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:

  • As texturas 2D são usadas principalmente em materiais.
  • Cubemaps podem ser usados para o céu.

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âmetro LoadTextureOptions.
  • O ativo de textura pode ser abordado pelo seu URI SAS. Função de carregamento relevante é LoadTextureFromSasAsync com parâmetro LoadTextureFromSasOptions. 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

Próximos passos