Texture Optimization
Preflight texture validation is target-aware:
- OpenUSD target: correctness/interoperability first
- RealityKit target: OpenUSD core + platform compatibility/performance checks
What “Right” Means
Section titled “What “Right” Means”A texture is considered healthy when it:
- Resolves correctly
- Decodes correctly
- Uses a target-appropriate container/encoding
- Fits target budget
- Uses expected colorspace/gamut
- Includes mipmaps when required by policy
Diagnose Commands
Section titled “Diagnose Commands”preflighttool texture analyze scene.usdz --target OpenUSDpreflighttool texture analyze scene.usdz --target visionos --jsonConvert Commands
Section titled “Convert Commands”preflighttool texture convert albedo.png albedo.ktx2 --format ktx2 --quality best --backend automaticpreflighttool texture convert normal.png normal.png --format png --max-dimension 2048 --backend openSourcepreflighttool texture convert albedo.png albedo.ktx2 --format ktx2 --backend appleTextureConverterBackend Selection
Section titled “Backend Selection”automatic: recommended default for most workflowsopenSource: preferred when you want general-purpose OpenUSD-oriented conversion behaviorappleTextureConverter: optional backend for KTX2-focused RealityKit workflows (capability-gated at runtime)
Execution Model
Section titled “Execution Model”- App-side conversion is in-process (sandbox-safe)
- App does not depend on spawning
TextureConverterCLI subprocesses - Runtime capability checks return structured unsupported results when conversion backends are unavailable
Diagnosis-to-Remediation Examples
Section titled “Diagnosis-to-Remediation Examples”texture.exceeds_target_budget-> convert withmax_dimensiontexture.colorspace_mismatch-> convert withgamut_out=sRGBtexture.no_mips_for_large_textures-> convert with mip generation enabled
Health Impact Summary
Section titled “Health Impact Summary”- Texture errors (
missing_file,unreadable_or_corrupt) are blocking - Texture warnings/advisories degrade Materials score incrementally
- Score remains in Blocked band while unresolved errors exist