你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
纹理
纹理是不可变共享资源。 纹理可以从 Blob 存储加载并直接应用于模型,如教程:更改环境和材料中所述。 不过,通常情况下,纹理会成为转换的模型的一部分,在该模型中,纹理由其材料引用。
纹理类型
不同的纹理类型具有不同的用例:
支持的纹理格式
为 ARR 指定的所有纹理都必须采用 DDS 格式。 最好使用纹理图和纹理压缩。
加载纹理
加载纹理时,必须指定其预期类型。 如果类型不匹配,纹理加载将失败。 加载具有相同 URI 的纹理两次将返回相同的纹理对象,因为它是共享的资源。
与加载模型类似,有两种用于在源 blob 存储中为纹理资产寻址的变体:
- 如果 Blob 存储已链接到帐户,则可直接通过 Blob 存储参数对纹理进行寻址。 在本例中,相关的加载函数为具有参数
LoadTextureOptions
的LoadTextureAsync
。 - 纹理资产可以通过其 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 文档
- C# Texture 类
- C# RenderingConnection.LoadTextureAsync()
- C# RenderingConnection.LoadTextureFromSasAsync()
- C++ Texture 类
- C++ RenderingConnection::LoadTextureAsync()
- C++ RenderingConnection::LoadTextureFromSasAsync()