Why glTF Uses 0.04 Dielectric Reflectance

In the glTF 2.0 specification, the default specular reflectance at normal incidence (\(F_0\)) for dielectrics is set to a linear value of 0.04 (4%). This article explains the physical significance of this value, detailing how it derives from the Fresnel equations and the index of refraction of common real-world materials, and why it serves as the foundational baseline for real-time physically based rendering (PBR).

The Physics: Fresnel Equations and Normal Incidence

When light strikes the surface of an insulator (a dielectric material), a portion reflects while the rest refracts into the material. The fraction of reflected light is determined by the Fresnel equations, which depend on the angle of incidence and the material's Index of Refraction (IOR, denoted as \(n\)).

For light hitting a surface perpendicularly (a \(0^\circ\) angle of incidence, or normal incidence), the Fresnel reflectance equation simplifies to:

\[F_0 = \left(\frac{n_2 - n_1}{n_2 + n_1}\right)^2\]

Assuming light travels from air (\(n_1 \approx 1.0\)) into a solid dielectric surface (\(n_2 = n\)):

\[F_0 = \left(\frac{n - 1}{n + 1}\right)^2\]

The 1.5 Refractive Index Standard

The vast majority of everyday non-metallic materials—such as common plastics, glass, wood, stone, resin, and skin—have an IOR ranging closely between 1.45 and 1.55.

Substituting a median IOR of \(n = 1.5\) into the normal incidence formula yields:

\[F_0 = \left(\frac{1.5 - 1}{1.5 + 1}\right)^2 = \left(\frac{0.5}{2.5}\right)^2 = 0.2^2 = 0.04\]

This indicates that approximately 4% of light is reflected when looking directly at the surface, while the remaining 96% penetrates the material to become diffuse reflection, absorption, or transmission.

Material Comparison

While dielectric materials vary, their normal-incidence reflectance values fall into a remarkably narrow range:

  • Water (\(n \approx 1.33\)): \(F_0 \approx 0.02\) (2%)
  • Skin/Fabric (\(n \approx 1.4\)): \(F_0 \approx 0.028\) (2.8%)
  • Plastics and Crown Glass (\(n \approx 1.5\)): \(F_0 \approx 0.04\) (4%)
  • Dense Flint Glass (\(n \approx 1.6\)): \(F_0 \approx 0.053\) (5.3%)
  • Gemstones/Diamond (\(n \approx 2.42\)): \(F_0 \approx 0.17\) (17%)

Because the vast majority of non-gemstone dielectrics cluster tightly between 2% and 5%, choosing 4% (0.04) provides an accurate representation for nearly all standard real-world non-metals.

Purpose in the glTF Metallic-Roughness Model

In the core glTF metallic-roughness PBR workflow, a pixel's metallic value is either 0 (dielectric) or 1 (metal). Metals reflect colored light at very high intensities (typically 70% to 100% reflectance) taken directly from the base color. Dielectrics, however, reflect monochromatic (white) specular highlights at low intensities.

Hardcoding the default dielectric \(F_0\) to 0.04 yields multiple benefits:

  1. Energy Conservation: It prevents artists from accidentally setting specular values that violate the conservation of energy, ensuring materials behave plausibly under any lighting environment.
  2. Texture Memory and Efficiency: It eliminates the need for an extra specular reflectance texture map for standard assets, saving performance and transmission bandwidth.
  3. Consistency: It standardizes how dielectric reflections appear across different WebGL, Vulkan, and DirectX renderers.

For rare materials where the 0.04 default is physically inaccurate—such as water, eyes, or diamonds—glTF provides the official KHR_materials_ior extension, allowing creators to define custom IOR values outside the standard 1.5 baseline.