Why glTF Uses Normal Maps Instead of Bump Maps
Height-based bump mapping was largely superseded by normal mapping in the core glTF 2.0 specification because normal maps provide direct vector data that improves runtime performance, eliminates shader-level gradient computations, and guarantees visual consistency across diverse rendering engines. By adopting tangent-space normal mapping as a baseline standard, glTF aligned itself with modern physically based rendering (PBR) pipelines and the technical constraints of real-time web and mobile graphics.
Computational Efficiency at Runtime
Height-based bump mapping relies on a scalar grayscale texture where
pixel values represent surface elevation. To compute how light interacts
with this virtual height, a fragment shader must calculate the surface
slope on the fly. This requires either sampling neighboring texels
multiple times or using screen-space derivative instructions (such as
dFdx and dFdy). Both approaches introduce
significant overhead: multi-tap sampling increases memory bandwidth
usage, while derivative operations add arithmetic complexity to the GPU
fragment stage.
In contrast, normal maps precompute this directional information during asset creation. By encoding the exact X, Y, and Z vector components of the perturbed surface normal directly into the RGB channels of the texture, normal mapping allows the GPU to determine surface orientation with a single texture fetch and minimal vector math.
Deterministic Cross-Platform Rendering
The primary design goal of the glTF format is to serve as the efficient, interoperable "JPEG of 3D." For glTF to succeed across varied platforms—including WebGL browsers, mobile devices, and high-end desktop engines—assets must look identical everywhere.
Height maps introduce cross-platform discrepancies because different hardware architectures, drivers, and graphics APIs implement partial derivatives and filtering differently. Calculating surface gradients dynamically often yields visible rendering discrepancies, seam artifacts along UV boundaries, or flickering at steep viewing angles on mobile chipsets. Tangent-space normal maps bypass runtime differentiation entirely, ensuring reliable, deterministic lighting calculations across all compliant engines.
Direct Directional Encoding
A height map only stores relative elevation, meaning the renderer must deduce surface direction purely from height differences across adjacent pixels. This creates limitations when representing complex, sharp, or asymmetric surface angles, particularly at lower texture resolutions. Normal maps store true directional vectors, granting 3D artists precise, pixel-level control over how light bounces off the geometry without relying on pixel density to imply slope steepness.
Alignment with Modern PBR Standards
When the Khronos Group standardized glTF 2.0, the broader real-time graphics industry had already established tangent-space normal mapping as the standard for real-time PBR workflows. Digital content creation tools, photogrammetry software, and real-time game engines natively bake and consume normal maps. Making normal mapping the core standard ensured immediate compatibility with existing industry tooling, while height-based techniques were reserved for specialized displacement and parallax extensions.