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
parametrLoadTextureOptions
. - Zasób tekstury można rozwiązać za pomocą identyfikatora URI sygnatury dostępu współdzielonego. Odpowiednia funkcja ładowania jest
LoadTextureFromSasAsync
z parametremLoadTextureFromSasOptions
. 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
- C# Texture, klasa
- Renderowanie w języku C#Połączenie ion. LoadTextureAsync()
- Renderowanie w języku C#Połączenie ion. LoadTextureFromSasAsync()
- C++ Texture, klasa
- Renderowanie języka C++Połączenie ion::LoadTextureAsync()
- Renderowanie języka C++Połączenie ion::LoadTextureFromSasAsync()