Split out of #1575, which shipped in 20.0.0. That ticket covered specular (Ks / Ns), the Pr / Pm approximation and map_d per-texel alpha; these are the fields it deliberately left, recorded here so they are not lost.
Neither is scheduled. Both are low value on their own, and the first is gated on a design decision that 20.0 explicitly declined.
1. map_Pr / map_Pm — roughness and metalness texture maps
The scalars are consumed today: Pr and Pm are approximated onto the existing shading terms, alongside glTF's pbrMetallicRoughness factors, through one shared mapping. The texture maps are not sampled.
The reason is not effort, it is that sampling them only pays off against a genuine PBR shading model. 20.0 chose the approximation deliberately over growing one: the lit mesh path is a stylized half-Lambert model, and per-texel roughness feeding a non-PBR term would be doing precise work with an imprecise instrument.
So this should not be picked up on its own. It belongs to a decision about whether the mesh path grows a real PBR model, which wants its own design ticket and is a much larger piece of work.
2. Ka (ambient) and illum
The lowest-value fields in the format, and #1575 said as much when it listed them.
Ka is largely redundant against the engine's ambient light. Parsing it into the material for completeness is harmless; wiring it into shading would give two ambient contributions that fight each other.
illum is vestigial in modern pipelines. Most exporters emit a constant, and the values that are not 2 describe a fixed-function pipeline the engine does not have.
Worth parsing onto the material so the data is not silently dropped, and not wiring into shading unless a concrete need appears.
Acceptance
- the parsed value reaches the material and is observable from user code
- a model supplying none of these renders byte-identically to today
- any shading change is verified on both GPU backends and produces identical output
Split out of #1575, which shipped in 20.0.0. That ticket covered specular (
Ks/Ns), thePr/Pmapproximation andmap_dper-texel alpha; these are the fields it deliberately left, recorded here so they are not lost.Neither is scheduled. Both are low value on their own, and the first is gated on a design decision that 20.0 explicitly declined.
1.
map_Pr/map_Pm— roughness and metalness texture mapsThe scalars are consumed today:
PrandPmare approximated onto the existing shading terms, alongside glTF'spbrMetallicRoughnessfactors, through one shared mapping. The texture maps are not sampled.The reason is not effort, it is that sampling them only pays off against a genuine PBR shading model. 20.0 chose the approximation deliberately over growing one: the lit mesh path is a stylized half-Lambert model, and per-texel roughness feeding a non-PBR term would be doing precise work with an imprecise instrument.
So this should not be picked up on its own. It belongs to a decision about whether the mesh path grows a real PBR model, which wants its own design ticket and is a much larger piece of work.
2.
Ka(ambient) andillumThe lowest-value fields in the format, and #1575 said as much when it listed them.
Kais largely redundant against the engine's ambient light. Parsing it into the material for completeness is harmless; wiring it into shading would give two ambient contributions that fight each other.illumis vestigial in modern pipelines. Most exporters emit a constant, and the values that are not2describe a fixed-function pipeline the engine does not have.Worth parsing onto the material so the data is not silently dropped, and not wiring into shading unless a concrete need appears.
Acceptance