Поделиться через


Текстуры

Текстуры являются неизменяемым общим ресурсом. Текстуры можно загружать из хранилища BLOB-объектов и применять к моделям напрямую, как показано в руководстве. Изменение среды и материалов. Однако наиболее часто текстуры будут частью преобразованной модели, где на них ссылаются ее материалы.

Типы текстур

Различные типы текстур используются в разных случаях.

  • 2D-текстуры в основном используются в материалах.
  • Кубические карты обычно используются для неба.

Поддерживаемые форматы текстур

Все текстуры, переданные в ARR, должны быть в формате DDS. Желательно с MIP-картами и сжатием текстур.

Загрузка текстур

При загрузке текстуры необходимо указать ожидаемый тип. Если тип не соответствует, происходит сбой загрузки текстуры. При загрузке текстуры с одним и тем же URI дважды, возвращается один и тот же объект текстуры, так как это общий ресурс.

Аналогично загрузке моделей, существует два варианта обращения к ресурсу текстуры в исходном хранилище BLOB-объектов.

  • К текстуре также можно обращаться напрямую по параметрам хранилища BLOB-объектов, если хранилище BLOB-объектов связано с учетной записью. В этом случае используется функция загрузки LoadTextureAsync с параметром LoadTextureOptions.
  • К ресурсу текстуры можно обращаться по подписанному URL-адресу. Для этого используется функция LoadTextureFromSasAsync с параметром LoadTextureFromSasOptions. Также используйте этот вариант для загрузки встроенных текстур.

В следующем образце кода показано, как загрузить текстуру.

async void LoadMyTexture(RenderingSession session, string storageContainer, string blobName, string assetPath)
{
    try
    {
        LoadTextureOptions options = new LoadTextureOptions(storageContainer, blobName, assetPath, TextureType.Texture2D);
        Texture texture = await session.Connection.LoadTextureAsync(options);
    
        // use texture...
    }
    catch (RRException ex)
    {
    }
}
void LoadMyTexture(ApiHandle<RenderingSession> session, std::string storageContainer, std::string blobName, std::string assetPath)
{
    LoadTextureOptions params;
    params.TextureType = TextureType::Texture2D;
    params.Blob.StorageAccountName = std::move(storageContainer);
    params.Blob.BlobContainerName = std::move(blobName);
    params.Blob.AssetPath = std::move(assetPath);
    session->Connection()->LoadTextureAsync(params, [](Status status, ApiHandle<Texture> texture)
    {
        // use texture...
    });
}

Обратите внимание, что в случае использования варианта SAS отличается только функция или параметр загрузки.

В зависимости от того, для чего предполагается использовать текстуру, могут существовать ограничения по типу и содержимому текстуры. Например, карты неровностей материала PBR должны быть в оттенках серого.

Документация по API

Следующие шаги