Compartilhar via


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:

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

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

Próximas etapas