material-texture-maxsize#

Code

VM.TEX.001

Validator

Compatibility

Tags

Summary#

Texture dimensions must not exceed 16,384 pixels on either axis to ensure optimal performance and memory usage in simulation environments.

Description#

All texture assets referenced by material shaders must comply with a maximum resolution limit of 16K (16,384 pixels) on both width and height. This requirement applies to all image formats including:

  • PNG (.png)

  • JPEG (.jpg, .jpeg)

  • OpenEXR (.exr)

  • HDR (.hdr)

  • Targa (.tga)

  • Bitmap (.bmp)

  • TIFF (.tif, .tiff)

Textures exceeding this limit can cause:

  • Excessive memory consumption

  • Performance degradation in real-time simulation

  • GPU memory overflow on systems with limited VRAM

  • Increased loading times

  • Potential crashes or instability

The 16K limit provides a balance between visual quality and performance for simulation-ready assets.

Why is it required?#

  • Ensures consistent performance across different hardware configurations

  • Prevents out-of-memory errors in simulation environments

  • Maintains reasonable asset loading times

  • Supports real-time rendering requirements

  • Enables assets to work on systems with limited GPU memory

  • Promotes efficient texture usage and optimization practices

Examples#

# Invalid: Texture exceeds maximum size
def Material "OversizedTextureMaterial"
{
    def Shader "Shader"
    {
        uniform token info:implementationSource = "sourceAsset"
        uniform asset info:mdl:sourceAsset = @./SimPBR.mdl@
        uniform token info:mdl:sourceAsset:subIdentifier = "SimPBR"
        
        # This texture is 32768x32768 pixels - exceeds 16K limit
        asset inputs:diffuse_texture = @./textures/huge_albedo_32k.png@
    }
}

# Invalid: One dimension exceeds limit
def Material "WideTextureMaterial"
{
    def Shader "Shader"
    {
        uniform token info:implementationSource = "sourceAsset"
        uniform asset info:mdl:sourceAsset = @./SimPBR.mdl@
        uniform token info:mdl:sourceAsset:subIdentifier = "SimPBR"
        
        # This texture is 20000x8000 pixels - width exceeds 16K limit
        asset inputs:diffuse_texture = @./textures/wide_albedo.png@
    }
}

# Valid: Texture within size limits
def Material "ValidTextureMaterial"
{
    def Shader "Shader"
    {
        uniform token info:implementationSource = "sourceAsset"
        uniform asset info:mdl:sourceAsset = @./SimPBR.mdl@
        uniform token info:mdl:sourceAsset:subIdentifier = "SimPBR"
        
        # 8192x8192 pixels - within 16K limit
        asset inputs:diffuse_texture = @./textures/albedo_8k.png@
        
        # 4096x4096 pixels - within 16K limit
        asset inputs:roughness_texture = @./textures/roughness_4k.png@
        
        # 2048x2048 pixels - within 16K limit
        asset inputs:normal_texture = @./textures/normal_2k.png@
    }
}

# Valid: Maximum allowed size
def Material "MaxSizeTextureMaterial"
{
    def Shader "Shader"
    {
        uniform token info:implementationSource = "sourceAsset"
        uniform asset info:mdl:sourceAsset = @./SimPBR.mdl@
        uniform token info:mdl:sourceAsset:subIdentifier = "SimPBR"
        
        # 16384x16384 pixels - exactly at 16K limit (valid)
        asset inputs:diffuse_texture = @./textures/albedo_16k.png@
    }
}

How to comply#

Resize Existing Textures:#

  • Use image editing tools to downscale textures exceeding 16K

  • Common target resolutions: 8K (8192), 4K (4096), 2K (2048), 1K (1024)

  • Maintain aspect ratio when resizing

  • Use high-quality resampling filters (bicubic or Lanczos)

Optimize Texture Usage:#

  • Use appropriate resolution based on the asset’s real-world size and viewing distance

  • Consider texture density (pixels per meter) for optimal quality

  • Use lower resolutions for textures that won’t be viewed up close

  • Reserve higher resolutions (8K-16K) only when absolutely necessary

Texture Atlasing:#

  • Combine multiple smaller textures into atlases rather than using oversized textures

  • Use texture trim/cropping to remove unused space

  • Optimize UV layouts for efficient texture space usage

Format Considerations:#

  • Use compression-friendly formats (PNG, JPEG) for color/albedo maps

  • Consider lower resolutions for metallic, roughness, and AO maps

  • Use appropriate bit depth for each texture type

For More Information#