How glTF Normal Map Scale Controls Surface Relief
The normal map scale factor in glTF is a floating-point multiplier
that modulates the perceived depth and intensity of high-frequency
surface details on a 3D model. Stored within the material’s
normalTextureInfo object, this parameter scales the
horizontal and vertical vectors of tangent-space normals before lighting
calculations occur. By allowing artists and developers to amplify,
soften, or completely flatten surface relief without modifying the
underlying texture file or geometry, it serves as an essential runtime
control for visual realism, consistency, and performance
optimization.
Technical Function of the Scale Factor
In the glTF 2.0 specification, a normal map encodes unit vectors in tangent space using the red (\(X\)), green (\(Y\)), and blue (\(Z\)) channels. The scale parameter acts specifically on the tangent (\(X\)) and bitangent (\(Y\)) components:
\[\mathbf{N}^* = \left( N_x \cdot \text{scale},\; N_y \cdot \text{scale},\; N_z \right)\]
\[\mathbf{N}_{\text{final}} = \text{normalize}(\mathbf{N}^*)\]
Because the \(Z\) component remains unscaled prior to re-normalization, adjusting the scale directly changes the angle of the normal vector relative to the base surface:
- Scale = 1.0 (Default): The surface relief renders exactly as authored in the source texture, providing the baseline angle intended during texture baking.
- Scale > 1.0: The \(X\) and \(Y\) coordinates are amplified, tilting the normal vectors further away from the surface normal (\(Z\)). This exaggerates grooves, cracks, and bumps, creating the illusion of deeper, more pronounced physical relief.
- 0.0 < Scale < 1.0: The influence of the \(X\) and \(Y\) vectors is dampened, rotating the normals closer to the geometric normal vector \((0, 0, 1)\). This smooths out micro-surface details, creating a subtle, softened appearance.
- Scale = 0.0: The \(X\) and \(Y\) offsets are eliminated entirely. After normalization, the vector points directly along the \(Z\)-axis, effectively disabling the normal map and leaving the surface perfectly flat according to the vertex normals.
- Negative Values: Reversing the sign inverts the \(X\) and \(Y\) directions. Protrusions appear as indentations and vice versa, which can correct inverted green-channel (DirectX vs. OpenGL) issues, though it must be used cautiously to preserve lighting accuracy.
Practical Applications in 3D Pipelines
The glTF normal scale parameter eliminates the need to re-bake or duplicate image assets when tuning material appearance across different scenarios:
- Real-Time Material Customization: Render engines can expose the scale factor as an interactive property. This allows users to tweak materials dynamically, such as transitioning a smooth leather texture into a rough, weathered surface in a product configurator.
- Texture Reusability: Multiple assets can share a single high-resolution normal map while maintaining distinct identities. A single stone pattern can appear as light, polished granite on one mesh (\(\text{scale} \approx 0.3\)) and rugged, untreated rock on another (\(\text{scale} \approx 1.5\)).
- LOD Transition Smoothing: At distant Level-of-Detail (LOD) steps, heavy normal relief often causes visual aliasing and shimmering under directional lighting. Runtime engines can lower the normal map scale factor as the camera pulls away, reducing specular artifacts without swapping texture files.