Texturas
As texturas são um recurso partilhado imutável. As texturas podem ser carregadas a partir do armazenamento de blob e aplicadas diretamente aos modelos, como demonstrado no Tutorial: Alterando o ambiente e os materiais. Mais comumente, porém, as texturas farão parte de um modelo convertido, onde são referenciadas por seus materiais.
Tipos de textura
Diferentes tipos de textura têm diferentes casos de uso:
Formatos de textura suportados
Todas as texturas dadas ao ARR têm de estar no formato DDS. De preferência com mipmaps e compressão de textura.
Carregando texturas
Ao carregar uma textura, você precisa especificar seu tipo esperado. Se o tipo não corresponder, a carga de textura falhará. Carregar uma textura com o mesmo URI duas vezes retornará o mesmo objeto de textura, pois é um recurso compartilhado.
Semelhante aos modelos de carregamento, há duas variantes de endereçamento de um ativo de textura no armazenamento de blob de origem:
- A textura pode ser abordada por parâmetros de armazenamento de blob diretamente, caso o armazenamento de blob esteja vinculado à conta. Função de carregamento relevante neste caso é
LoadTextureAsync
com parâmetroLoadTextureOptions
. - O ativo de textura pode ser abordado pelo seu URI SAS. Função de carregamento relevante é
LoadTextureFromSasAsync
com parâmetroLoadTextureFromSasOptions
. Use esta 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...
});
}
Note que, no caso de usar sua variante SAS, apenas a função/parâmetro de carregamento difere.
Dependendo de como a textura deve ser usada, pode haver restrições para o tipo de textura e conteúdo. Por exemplo, o mapa de rugosidade de um material PBR deve ser em escala de cinza.
Documentação da API
- Classe de textura C#
- C# RenderingConnection.LoadTextureAsync()
- C# RenderingConnection.LoadTextureFromSasAsync()
- Classe de textura C++
- C++ RenderingConnection::LoadTextureAsync()
- C++ RenderingConnection::LoadTextureFromSasAsync()