Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Textures are an immutable shared resource. Textures can be loaded from blob storage and applied to models directly, as demonstrated in Tutorial: Changing the environment and materials. Most commonly, though, textures will be part of a converted model, where they are referenced by its materials.
Texture types
Different texture types have different use cases:
Supported texture formats
All textures given to ARR have to be in DDS format. Preferably with mipmaps and texture compression.
Loading textures
When loading a texture, you have to specify its expected type. If the type mismatches, the texture load fails. Loading a texture with the same URI twice will return the same texture object, as it is a shared resource.
Similar to loading models, there are two variants of addressing a texture asset in source blob storage:
- The texture can be addressed by blob storage parameters directly, in case the blob storage is linked to the account. Relevant loading function in this case is
LoadTextureAsync
with parameterLoadTextureOptions
. - The texture asset can be addressed by its SAS URI. Relevant loading function is
LoadTextureFromSasAsync
with parameterLoadTextureFromSasOptions
. Use this variant also when loading built-in textures.
The following sample code shows how to load a texture:
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...
});
}
Note that in case of using its SAS variant only the loading function/parameter differs.
Depending on what the texture is supposed to be used for, there may be restrictions for the texture type and content. For example, the roughness map of a PBR material must be grayscale.
API documentation
- C# Texture class
- C# RenderingConnection.LoadTextureAsync()
- C# RenderingConnection.LoadTextureFromSasAsync()
- C++ Texture class
- C++ RenderingConnection::LoadTextureAsync()
- C++ RenderingConnection::LoadTextureFromSasAsync()