Texturas
As texturas são um recurso compartilhado imutável. As texturas podem ser carregadas do armazenamento de blob e aplicadas diretamente aos modelos, como demonstrado em Tutorial: Alterando o ambiente e os materiais. No entanto, geralmente as texturas serão parte de um modelo convertido, em que eles são referenciados por seus materiais.
Tipos de textura
Tipos de textura diferentes têm diferentes casos de uso:
Formatos de textura compatíveis
Todas as texturas para o Application Request Routing devem estar no formato DDS. Preferencialmente com mipmaps e compactação de textura.
Carregar texturas
Ao carregar uma textura, é preciso especificar seu tipo esperado. Se o tipo não corresponder, o carregamento da textura falhará. Carregar uma textura com o mesmo URI duas vezes retornará o mesmo objeto de textura, pois é um recurso compartilhado.
De forma semelhante ao carregamento de modelos, há duas variantes de endereçamento de um ativo de textura no armazenamento do blob de origem:
- Lide com a textura diretamente pelos parâmetros de Armazenamento de Blobs, caso o armazenamento de blobs esteja vinculado à conta. A função de carregamento relevante nesse caso é
LoadTextureAsync
com o parâmetroLoadTextureOptions
. - O ativo de textura pode ser endereçado por seu URI de SAS. A função de carregamento relevante é
LoadTextureFromSasAsync
com o parâmetroLoadTextureFromSasOptions
. Use essa variante também ao carregar texturas integradas.
O código de exemplo a seguir mostra como carregar uma textura.
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...
});
}
Caso a variante SAS seja usada, somente a função/o parâmetro de carregamento será diferente.
Dependendo do uso da textura, pode haver restrições para o tipo de textura e o conteúdo. Por exemplo, o mapa de irregularidades de um material PBR deve ser em escala de cinza.
Documentação da API
- Classe Texture do C#
- RenderingConnection.LoadTextureAsync() do C#
- RenderingConnection.LoadTextureFromSasAsync() do C#
- Classe Texture do C++
- RenderingConnection::LoadTextureAsync() do C++
- RenderingConnection::LoadTextureFromSasAsync() do C++