Mobile glTF Texture Resolution Standards
Balancing visual fidelity against download speed and runtime memory is one of the most critical challenges when deploying glTF assets to mobile devices. This article outlines the industry-standard texture resolutions, channel-packing practices, and compression workflows that maintain high visual quality while keeping mobile 3D models lightweight and responsive.
The Standard: 1024×1024 and 2048×2048
For the majority of mobile web and native real-time 3D applications, standardizing on 1024×1024 (1K) and 2048×2048 (2K) dimensions provides the optimal compromise between network bandwidth, GPU memory (VRAM), and visual sharpness.
- 2048×2048 (2K): Reserved strictly for hero assets, close-up product views, or central characters where fine surface details (text, stitching, complex micro-patterns) are visible on high-DPI screens.
- 1024×1024 (1K): The baseline standard for the majority of standalone mobile assets, secondary characters, large props, and primary architectural elements.
- 512×512 (512px) and below: Ideal for background props, small accessories, UI elements, and auxiliary objects rarely inspected closely.
All texture dimensions must strictly follow Power of Two (POT) sizing (e.g., 512, 1024, 2048). Non-power-of-two (NPOT) textures often fail to generate hardware mipmaps correctly, resulting in texture shimmering and increased memory overhead on mobile GPUs.
Differential Map Resolution and Channel Packing
A common mistake is assigning the same texture resolution to every map in a PBR (Physically Based Rendering) material. Assigning resolutions according to how the human eye perceives different surface information significantly reduces the asset footprint without degrading quality.
1. Base Color (Albedo)
The base color defines the overall look and coloration of the object. Keep this map at the primary asset resolution (typically 1K or 2K) to prevent blurry textures on high-resolution smartphone screens.
2. Normal Maps
Normal maps simulate geometric surface contours and react directly to lighting. Compression artifacts and downscaling in normal maps are immediately noticeable as blocky lighting artifacts. Maintain normal maps at the same resolution as the base color (or at most one step down), and avoid extreme lossy compression on this channel.
3. ORM (Occlusion, Roughness, Metallic) Channel Packing
glTF natively supports combining Ambient Occlusion, Roughness, and Metallic into the Red, Green, and Blue channels of a single texture. Because roughness and metalness data often contain broad, continuous values rather than sharp high-frequency edges, the ORM map can safely be downscaled to half the resolution of the Base Color (e.g., a 1K Base Color paired with a 512×512 ORM map) with virtually no perceptible loss in rendering quality.
Compression Standards: KHR_texture_basisu
Resolution is only half the battle; texture compression dictates the final network payload and runtime VRAM usage. Standard PNG and JPEG formats must be completely decoded into uncompressed raw RGBA in mobile memory, quickly exhausting mobile GPU limits.
The mobile industry standard for glTF is the
KHR_texture_basisu extension, which uses Basis Universal
compression to create .ktx2 files:
- UASTC Mode: High-quality compression suited for normal maps and detailed base color maps where visual artifacts cannot be tolerated. It provides modest file-size reduction over the wire but transcodes directly to native GPU formats (ASTC on modern mobile chips).
- ETC1S Mode: Extremely high compression yielding very small network payloads (often 75–90% smaller than PNG). It is ideal for base color maps on non-hero assets and smooth gradient maps, though it can cause banding on normal maps.
Recommended Resolution Guidelines
- Target Maximum Download Size per Asset: Under 3 MB to 5 MB for primary web assets; under 1 MB for secondary elements.
- Primary Screen Asset: 1024×1024 (or 2048×2048 if zoom is enabled) Base Color + Normal; 1024×1024 ORM map.
- Secondary/Environment Asset: 512×512 to 1024×1024 Base Color; 512×512 Normal and ORM maps.
- Texture Atlasing: Combine multiple small objects sharing the same scene into a single 2048×2048 texture atlas rather than loading several individual 512×512 textures to minimize draw calls and state changes on mobile hardware.