How a mesh's surface normals are obtained at render time.
'smooth' — use the stored per-vertex normals array, when it is present
AND its normal_dims matches the displayed axes (spec §3.4). Interpolated
across each triangle, so a welded surface reads as curved.
'flat' — derive a per-fragment normal from screen-space derivatives of
the interpolated position, giving a faceted surface. Also the fallback
whenever 'smooth' cannot be honoured.
'none' — no lighting at all: the base colour reaches the screen
unmodulated, with the diffuse and specular terms suppressed. This is what
the other three geometry types always do (they are purely emissive), and
what a data basemap needs — a textured globe whose colours carry meaning
must not be reshaded by a view-anchored key. Never a default, only ever
explicit, since defaulting to it would un-light every existing mesh.
The writer resolves this at write time and always stamps a concrete value
('smooth' only when normals were supplied), so the viewer never has to
guess. An explicit authored value is stamped as given and is never rewritten
— an explicit 'smooth' with no stored normals is legal and falls back, and
an explicit 'flat' gives a faceted surface even when normals exist.
How a mesh's surface normals are obtained at render time.
'smooth'— use the stored per-vertexnormalsarray, when it is present AND itsnormal_dimsmatches the displayed axes (spec §3.4). Interpolated across each triangle, so a welded surface reads as curved.'flat'— derive a per-fragment normal from screen-space derivatives of the interpolated position, giving a faceted surface. Also the fallback whenever'smooth'cannot be honoured.'none'— no lighting at all: the base colour reaches the screen unmodulated, with the diffuse and specular terms suppressed. This is what the other three geometry types always do (they are purely emissive), and what a data basemap needs — a textured globe whose colours carry meaning must not be reshaded by a view-anchored key. Never a default, only ever explicit, since defaulting to it would un-light every existing mesh.The writer resolves this at write time and always stamps a concrete value (
'smooth'only when normals were supplied), so the viewer never has to guess. An explicit authored value is stamped as given and is never rewritten — an explicit'smooth'with no stored normals is legal and falls back, and an explicit'flat'gives a faceted surface even when normals exist.