紋理

紋理是固定的 共用資源 。 紋理可以從 Blob 儲存體 載入 ,並直接套用至模型,如教學課程:變更環境和材質 中所述 。 不過,最常見的情況是紋理會是已轉換模型的 部分,其材質 會參考 它們。

紋理類型

不同的紋理類型有不同的使用案例:

支援的紋理格式

提供給 ARR 的所有紋理都必須使用 DDS 格式 。 最好使用 Mipmap 和紋理壓縮。

載入紋理

載入紋理時,您必須指定其預期類型。 如果類型不符,紋理載入會失敗。 載入具有相同 URI 的紋理兩次會傳回相同的紋理物件,因為它是 共用資源

與載入模型類似,在來源 Blob 儲存體中定址紋理資產有兩種變體:

  • 如果 Blob 儲存體連結至帳戶 ,則紋理可以直接由 Blob 儲存體參數定址。 在此情況下,相關的載入函式是 LoadTextureAsync 搭配 參數 LoadTextureOptions
  • 紋理資產可以透過其 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 文件

下一步