The hemisphere mix both shaded fragment stages share — the WGSL port of
gl-program.ts's HEMISPHERE_LIGHT_GLSL. Branch-free: a frame with no
hemisphere writes zeros for sky and ground, so the mix is the zero
vector regardless of n. A zero-length normal uses the 0.5 mix
(constant extra ambient), matching the GL chunk.
The hemisphere mix both shaded fragment stages share — the WGSL port of
gl-program.ts'sHEMISPHERE_LIGHT_GLSL. Branch-free: a frame with no hemisphere writes zeros for sky and ground, so the mix is the zero vector regardless ofn. A zero-length normal uses the 0.5 mix (constant extra ambient), matching the GL chunk.