Tekstury

Tekstury są niezmiennym zasobem udostępnionym. Tekstury mogą być ładowane z magazynu obiektów blob i stosowane bezpośrednio do modeli, jak pokazano w artykule Samouczek: zmienianie środowiska i materiałów. Najczęściej jednak tekstury będą częścią przekształconego modelu, w którym są przywoływane przez jego materiały.

Typy tekstur

Różne typy tekstur mają różne przypadki użycia:

  • Tekstury 2D są używane głównie w materiałach.
  • Mapy modułów mogą być używane na niebie.

Obsługiwane formaty tekstur

Wszystkie tekstury podane ARR muszą być w formacie DDS. Najlepiej z mipmaps i kompresji tekstury.

Ładowanie tekstur

Podczas ładowania tekstury należy określić jej oczekiwany typ. Jeśli typ jest niezgodny, obciążenie tekstury zakończy się niepowodzeniem. Załadowanie tekstury z tym samym identyfikatorem URI dwukrotnie zwróci ten sam obiekt tekstury, co zasób udostępniony.

Podobnie jak w przypadku modeli ładowania, istnieją dwa warianty adresowania zasobu tekstury w źródłowym magazynie obiektów blob:

  • Teksturę można rozwiązać bezpośrednio za pomocą parametrów magazynu obiektów blob, jeśli magazyn obiektów blob jest połączony z kontem. Odpowiednią funkcją ładowania w tym przypadku jest LoadTextureAsync parametr LoadTextureOptions.
  • Zasób tekstury można rozwiązać za pomocą identyfikatora URI sygnatury dostępu współdzielonego. Odpowiednia funkcja ładowania jest LoadTextureFromSasAsync z parametrem LoadTextureFromSasOptions. Użyj tego wariantu również podczas ładowania wbudowanych tekstur.

Poniższy przykładowy kod pokazuje, jak załadować teksturę:

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

Należy pamiętać, że w przypadku używania wariantu sygnatury dostępu współdzielonego różni się tylko funkcja/parametr ładowania.

W zależności od tego, do czego ma być używana tekstura, mogą istnieć ograniczenia dotyczące typu tekstury i zawartości. Na przykład mapa szorstkości materiału PBR musi być skala szarości.

Dokumentacja interfejsu API

Następne kroki