Why Metallic glTF Models Have Zero Diffuse Reflections

In the glTF 2.0 physically based rendering (PBR) specification, setting the metallic parameter to 1.0 eliminates diffuse reflection entirely. This article explains the physical principles separating conductors from dielectrics, outlines the mathematical formulation used in glTF shaders to enforce energy conservation, and clarifies how the base color shifts from defining diffuse albedo to determining specular reflectance.

The Physics of Conductors vs. Dielectrics

Diffuse reflection is not an instantaneous surface bounce; it is the result of subsurface scattering. In dielectric materials (non-metals such as wood, stone, plastic, and skin), light penetrates the surface, bounces among internal microscopic particles, and re-emerges at random angles as diffuse light. A small percentage of light (typically around 4%) reflects immediately off the outer boundary as specular reflection.

Conductors (metals) possess a high density of free, delocalized electrons in their conduction bands. When incident light strikes a metal surface, these free electrons immediately interact with the electromagnetic wave, either reflecting it directly at the interface or absorbing it within a few nanometers, converting it into heat. Because light cannot penetrate the volume of a metal without being absorbed, subsurface scattering cannot occur. Consequently, true metals physically lack a diffuse reflection component.

The glTF Metallic-Roughness Formulation

The glTF standard simplifies complex material physics into the Cook-Torrance microfacet BRDF model, governed primarily by baseColor, metallic, and roughness. To ensure that rendering remains physically plausible and obeys the law of conservation of energy, the shader splits light into diffuse and specular paths based on the metallic input.

In the standard glTF reference implementation, the diffuse color (\(c_{diff}\)) is calculated using the following relationship:

\[c_{diff} = \text{baseColor} \times (1.0 - F_0) \times (1.0 - \text{metallic})\]

Where \(F_0\) represents specular reflectance at normal incidence (fixed at 0.04 for common dielectrics).

When the metallic value reaches 1.0:

  • The term \((1.0 - \text{metallic})\) evaluates to 0.0.
  • The diffuse color vector drops to zero: \(c_{diff} = (0.0, 0.0, 0.0)\).
  • The diffuse BRDF contribution (such as Lambertian diffuse) is multiplied by zero, wiping out all diffuse lighting.

Redefining Base Color as Specular Tint

Because metals possess no diffuse reflection, the baseColor property changes its physical meaning as the metallic value increases.

For dielectric surfaces (metallic = 0.0), baseColor represents the diffuse albedo, while the specular reflectance (\(F_0\)) remains a fixed achromatic value of 4% (RGB: 0.04, 0.04, 0.04).

For fully metallic surfaces (metallic = 1.0), the baseColor is mapped directly to \(F_0\). Metals exhibit high, wavelength-dependent specular reflection, meaning their specular reflections are tinted (such as the distinct yellow tint of gold or the reddish hue of copper). By zeroing out the diffuse component, glTF transfers 100% of the material's color information into the specular reflection term.

Non-Binary Metallic Values

While real-world materials are either conductors or dielectrics at a microscopic level, glTF permits continuous scalar values between 0.0 and 1.0 for the metallic factor. Intermediate values exist solely to account for macro-level blending across a single pixel—such as fine layers of dust, rust, corrosion, or texture filtering artifacts. Even in these blended scenarios, the diffuse reflection decreases linearly toward zero as the metallic value approaches 1.0 to preserve energy conservation.