docs/light-interference.md
Lights measured — three classifications retracted
Second result under renderer-as-laboratory, and the first where measurement overturned my own classification.
tests/light-interference.test.ts.
What was claimed
worldscene-freedoms.md classified four freedoms as colliding with the activity channel: distance fog, key light direction, fill light levels, material response. Fog was measured at 36.3% and repaired.
The other three were classified by reasoning — "shading modulates lightness" — and never checked. Measured now.
The retraction
Two facts about the scene decide most of it, and neither was checked when the classification was made:
- In
MeshStandardMaterialthe result islit(albedo) + emissive * emissiveIntensity. Emissive is self-illumination — lights do not multiply it. AndemissiveIntensityis the activity carrier. - Every building is an unrotated
boxGeometryin a translate-only group (WorldScene.tsx:284,:275), so every building presents identical face normals. There is no orientation variance to shade.
diffuse + ambient + hemi contribute a constant 0.0984 to every building
inversions from lighting: 0
Key light and fill light cannot reorder activity. They add the same number to every building. The classification was wrong on both counts — wrong about the shading model, and wrong about the geometry.
What does vary, measured
Specular is the one light-dependent term that differs across the estate, because the view vector differs even when the normal does not.
specular spread 8.09e-4 vs smallest activity step 0.094
inversions from specular: 0.00%
Real, and 116× below the channel's own resolution. It cannot cross a step. That is a quantitative finding rather than a dismissal: the effect exists and is bounded.
What the lights actually cost
Michelson-style contrast: with fill 0.796, without 0.843
A 5.6% relative reduction. Ambient and hemisphere raise the floor equally under every building, compressing the range the channel is read within. That cannot reorder anything — it is legibility, condition 3, outside what this repository can certify.
Score
One of four classified collisions was real.
| Freedom | Classified | Measured |
|---|---|---|
| distance fog | collides | 36.3% inverted — repaired to 0% |
| key light direction | collides | 0 inversions — constant offset |
| fill light levels | collides | 0 inversions — contrast only, −5.6% |
| material response | collides | 0 inversions — specular 116× too small |
Had the rule been repair after classification rather than repair after measurement, three lights would have been changed for nothing, and the scene would be dimmer and flatter with no truth gained.
The audit is updated: channelAsserts is now false for the three lights, and
the unowned-claim set drops from four to one.
unowned claims: interactive camera
Fog stays channelAsserts: true, and the distinction is load-bearing: fog
does dim, so it still asserts on the lightness dimension. It stopped being an
unowned claim because it was grounded, not because it stopped claiming. The
test asserts both separately.
Standing
| Measurable defect exposed? | no — three retracted |
| Measurable improvement? | no changes made, which is the result |
| Ontology expanded? | no |
What is still not established
- Specular uses Blinn-Phong standing in for GGX. Adequate for the question asked — whether the term can cross a 0.094 step when it spans 8e-4 — and not a faithful model of three.js output.
- Albedo is approximated as a scalar
0.1for#1a1d2a. - The remaining unowned claim is the interactive camera, which cannot be measured this way: occlusion depends on the viewer's chosen pose, so it needs a rendered surface and a defined task. That is the next investigation.
label placementandtessellationremain arbitrary on non-asserting channels and are unmeasured; nothing suggests they need to be.
211 → 215 tests, tsc clean.