glTF 2.0 PBR Standard Dielectric Base Reflectance F0
This article examines the standard dielectric base reflectance (\(F_0\)) hardcoded into the glTF 2.0 physically based rendering (PBR) specification. It explains the exact numeric value defined by the core specification, the physics behind why this constant was selected, how the metallic-roughness workflow calculates surface reflectance, and how modern glTF extensions allow developers to override this default behavior when necessary.
In the core glTF 2.0 specification, the standard dielectric base
reflectance (\(F_0\)) at normal
incidence is hardcoded to 0.04 (a 4% reflectance value,
represented as vec3(0.04, 0.04, 0.04) in linear color
space).
The Physical Basis for 0.04
The base reflectance (\(F_0\)) represents the fraction of light reflected back from a surface when the viewing angle is perpendicular (0 degrees) to the surface normal.
The choice of 0.04 is derived from the standard Index of Refraction (IOR) of common real-world dielectric (non-metallic) materials. The relationship between IOR (\(n\)) and reflectance at normal incidence (\(F_0\)) in air is calculated using the Fresnel equation:
\[F_0 = \left( \frac{n - 1}{n + 1} \right)^2\]
An \(F_0\) value of 0.04 corresponds to an index of refraction of approximately 1.5 (\(n \approx 1.5\)). Most common dielectric materials—such as plastics, glass, water, acrylic, skin, and stone—have IOR values falling between 1.3 and 1.6, which translate to an \(F_0\) range between 0.02 and 0.05. Hardcoding \(F_0\) to 0.04 establishes a visually plausible baseline that covers the vast majority of non-metallic surfaces without requiring an extra texture map or parameter input.
Implementation in the Metallic-Roughness Workflow
The standard glTF 2.0 PBR metallic-roughness model computes the effective \(F_0\) by linearly interpolating between the fixed dielectric reflectance and the base color of the material based on the metallic factor:
\[\text{Effective } F_0 = \text{mix}(\text{vec3}(0.04), \text{baseColor.rgb}, \text{metallic})\]
- Pure Dielectrics (
metallic = 0.0): The specular reflectance at normal incidence is locked to an achromatic 4% (vec3(0.04)), and thebaseColorentirely defines the diffuse reflected color. - Pure Metals (
metallic = 1.0): There is no diffuse component. The material reflects light exclusively via specular reflection, and \(F_0\) is set directly to the linear RGB values ofbaseColor.
Overriding the Default
While core glTF 2.0 enforces this fixed 0.04 baseline for all non-metals, the Khronos Group introduced official extensions to allow custom dielectric values when precision is required:
KHR_materials_ior: Allows authors to explicitly define an Index of Refraction other than 1.5, adjusting the base reflectance accordingly (for instance, \(n = 1.33\) for water, yielding an \(F_0\) of roughly 0.02).KHR_materials_specular: Provides direct control over the specular intensity and specular color tint for dielectric materials, overriding the default 0.04 ceiling.
Without these extensions present, any standard-compliant glTF 2.0 viewer will treat all dielectric specular highlights as originating from a fixed 4% (\(0.04\)) normal reflectance.