Compartir vía


Texturas

Las texturas son un recurso compartido inmutable. Las texturas se pueden cargar desde Blob Storage y aplicarse directamente a los modelos, como se muestra en Tutorial: Cambio del entorno y los materiales. Sin embargo, normalmente, las texturas formarán parte de un modelo convertido, donde se hace referencia a ellas por sus materiales.

Tipos de textura

Los diferentes tipos de textura tienen casos de uso diferentes:

  • Las texturas 2D se usan principalmente en materiales.
  • Los mapas de cubos se pueden usar para el cielo.

Formatos de textura admitidos

Todas las texturas dadas a ARR deben estar en formato DDS. Preferiblemente con los mapas MIP y compresión de textura.

Carga de texturas

Al cargar una textura, tiene que especificar el tipo esperado. Si el tipo no coincide, se produce un error en la carga de la textura. La carga de una textura con el mismo URI dos veces devolverá el mismo objeto de textura, ya que se trata de un recurso compartido.

De forma similar a la carga de modelos, hay dos variantes a la hora de direccionar un recurso de textura en el almacenamiento de blobs de origen:

  • La textura se puede direccionar directamente mediante parámetros de Blob Storage, en caso de que Blob Storage esté vinculado a la cuenta. En este caso, la función de carga pertinente es LoadTextureAsync con el parámetro LoadTextureOptions.
  • El recurso de textura se puede direccionar por su URI de SAS. La función de carga pertinente es LoadTextureFromSasAsync con el parámetro LoadTextureFromSasOptions. Use también esta variante al cargar texturas integradas.

En el código de ejemplo siguiente se muestra cómo cargar una 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...
    });
}

Tenga en cuenta que, en el caso de usar su variante de SAS, la única diferencia es la función o el parámetro de carga.

Dependiendo del tipo de textura que se supone que se va a usar, puede haber restricciones en cuanto al tipo y el contenido. Por ejemplo, el mapa de rugosidad de un material PBR debe ser una escala de grises.

Documentación de la API

Pasos siguientes