你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

纹理

纹理是不可变共享资源。 纹理可以从 Blob 存储加载并直接应用于模型,如教程:更改环境和材料中所述。 不过,通常情况下,纹理会成为转换的模型的一部分,在该模型中,纹理由其材料引用。

纹理类型

不同的纹理类型具有不同的用例:

  • “2D 纹理”主要用于材料
  • “立方体贴图”可用于天空

支持的纹理格式

为 ARR 指定的所有纹理都必须采用 DDS 格式。 最好使用纹理图和纹理压缩。

加载纹理

加载纹理时,必须指定其预期类型。 如果类型不匹配,纹理加载将失败。 加载具有相同 URI 的纹理两次将返回相同的纹理对象,因为它是共享的资源

与加载模型类似,有两种用于在源 blob 存储中为纹理资产寻址的变体:

  • 如果 Blob 存储已链接到帐户,则可直接通过 Blob 存储参数对纹理进行寻址。 在本例中,相关的加载函数为具有参数 LoadTextureOptionsLoadTextureAsync
  • 纹理资产可以通过其 SAS URI 寻址。 相关的加载函数为 LoadTextureFromSasAsync,其参数为 LoadTextureFromSasOptions。 加载内置纹理时也使用此变体。

下面的示例代码说明如何加载纹理:

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...
    });
}

请注意,在使用其 SAS 变体时,不同的只有加载函数/参数。

纹理类型和内容可能存在限制,具体取决于要使用的纹理。 例如,PBR 材料的粗糙度图必须为灰度。

API 文档

后续步骤