Текстуры
Текстуры являются неизменяемым общим ресурсом. Текстуры можно загружать из хранилища 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
- Класс C# Texture
- C# RenderingConnection.LoadTextureAsync()
- C# RenderingConnection.LoadTextureFromSasAsync()
- Класс C++ Texture
- C++ RenderingConnection::LoadTextureAsync()
- C++ RenderingConnection::LoadTextureFromSasAsync()