Back to the live shader field guide

Execution and claim ledger

What was actually held fixed?

This page separates executed evidence from interpretation. The images are direct captures of one Three.js 0.184.0 scene on one physical NVIDIA GPU. They are not illustrations and they do not claim to be final art direction.

20exclusive shader modes captured
1024 x 640every evidence frame at DPR 1
1,000mode changes without resource growth
0runtime errors in the accepted capture

Focal-asset atlas

The same exact goblin crop in all twenty modes.

The cards use this deterministic 330 x 450 crop because the wide field view understates subtle diffuse and normal changes. These are cropped pixels from the accepted captures, not separate renders. Open the crop receipt.

Labeled fixed goblin detail crops for all twenty shader modes

Wide scene and value atlas

All twenty fixed frames at scene scale.

Labeled contact sheet of all twenty shader modes Grayscale contact sheet of all twenty shader modes

Invariant receipt

The comparison contract did not drift.

Fixed inputs

Original GLB and embedded atlas; source geometry and transforms; camera, projection, key vector, fog, sky, tone mapping, exposure, canvas size, DPR, texture decoding, and material base colors.

One allowed rendering mutation

The selector's only controlled rendering mutation is uMode, shared by all controlled scene materials. It also updates the selected UI state and URL. S08 deliberately moves rendered vertices inside that same shader; its card says so. The contact mark stays fixed as a grounding witness.

Real GPU

ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Ti SUPER (0x00002705) Direct3D11 vs_5_0 ps_5_0, D3D11). Software renderers were rejected by the capture harness.

Stable runtime

Repeated Lambert captures were byte-identical. Geometry 10 to 10; textures 2 to 2; programs 2 to 2 across 1,000 selections.

Control fingerprint: 67076334c03698c21d047a2d1313085281753a86078e527099e015488e82d240. Source asset SHA-256: 96df166216e28160c1554a80b6a84bfe900916f11aac9eb43d9ade2d45e6a8ec.

Important distinctions

Similar-looking operations are not the same mechanism.

Toon bands

S06 and S07 quantize the lighting scalar before it multiplies the atlas. The result follows form-light boundaries.

RGB posterize

S14 quantizes final material channels after lighting. Each channel steps independently, so new colors can appear.

Fixed palette

S15 replaces final material color with the nearest of eight declared swatches. It is a palette decision as well as shader math.

Material print patterns

S17-S19 use screen coordinates only on fragments covered by scene surfaces. They sample no completed-frame buffer and leave the sky unchanged.

Per-mode receipt

Image delta, hash, and source/context.

IDExecuted mechanismPipelinePixels changed vs S00SHA-256 prefixSource/context
S00Lambert reference
The positive normal-light dot product multiplies the same base color, with one fixed ambient floor.
MATERIAL FRAGMENT0.00%f78974705558031aThree r184 Lambert source
S01Unlit atlas
The fragment shader returns decoded base color without consulting the light vector.
MATERIAL FRAGMENT31.65%b043b553ebe0e9ceThree r184 MeshBasicMaterial
S02Wrapped diffuse
Signed N dot L is offset by a fixed wrap amount and normalized before diffuse multiplication.
MATERIAL FRAGMENT48.85%28939f1fbaea5745Project wrapped-diffuse implementation
S03Half-Lambert
Signed N dot L is remapped to zero-to-one, clamped, and squared.
MATERIAL FRAGMENT4.58%4b49196c7d66576aValve Source SDK Half-Lambert witness
S04Diffuse plus specular
Lambert diffuse receives one fixed Blinn-Phong half-vector lobe.
MATERIAL FRAGMENT49.78%e3d26d7e4a593e39Three r184 shader sources
S05Warm-cool Gooch
Signed N dot L interpolates between immutable cool and warm terms over the same atlas.
MATERIAL FRAGMENT50.72%ad265e93587ade9eGooch shading paper
S06Two-band toon
A fixed threshold converts continuous Lambert response into one shadow value and one light value.
MATERIAL FRAGMENT44.33%693beaf6428b3d05Three r184 toon ramp mechanism
S07Soft four-band toon
Three narrow smooth transitions assemble four fixed diffuse plateaus.
MATERIAL FRAGMENT42.45%060c8465fd1537bbThree r184 toon ramp mechanism
S08Static vertex wobble
A frozen analytic wave displaces each source vertex along its normal; time never advances.
VERTEX + FRAGMENT5.08%ab1ddaea6ce5745bThree r184 ShaderMaterial foundation
S09Flat-face normals
Screen derivatives reconstruct a face normal in the fragment shader.
MATERIAL FRAGMENT28.90%afbc9abb9cf33621Three r184 flat-normal source
S10Analytic matcap
View-space normal coordinates index an analytic lit-sphere equation; no added image texture is used.
MATERIAL FRAGMENT51.50%3e15a5abd69b738eThree r184 matcap mechanism
S11Cool rim light
A fixed Fresnel-style power curve of one minus N dot V is added after Lambert.
MATERIAL FRAGMENT51.44%5aa547c9495767e9MIT Toon RP rim implementation
S12View-normal RGB
Normalized view-space normals map from minus-one-to-one into RGB zero-to-one.
MATERIAL FRAGMENT52.09%abef6c30347cb650Three r184 normal material source
S13Iridescent Fresnel
Fresnel and fixed world position index a procedural cosine palette.
MATERIAL FRAGMENT52.09%9bf8f23494335b33Three r184 shader foundation
S14RGB posterize
Final material RGB channels are independently quantized after lighting.
MATERIAL FRAGMENT50.72%a972ae73021571f7Three r184 posterize source
S15Nearest fixed palette
The shader selects the nearest of eight immutable linear-RGB palette swatches by squared distance.
MATERIAL FRAGMENT51.88%9bd4cc421b348b6eMIT nearest-palette loop witness
S16Luma-preserving broken color
World-space hash selects hue-biased tints, then rescales them toward the original luminance.
MATERIAL FRAGMENT40.86%ceb33bf72f861047MIT GLSL noise foundation
S17Material halftone
Fixed-resolution gl_FragCoord cells draw luminance-weighted analytic dots inside the object shader.
MATERIAL FRAGMENT5.82%dcbe62d39f2c5a7fThree r184 ToonShaderDotted
S18Material crosshatch
Two analytic screen-space line fields activate at separate Lambert shadow thresholds.
MATERIAL FRAGMENT4.72%bdf669c6781d0cd2Three r184 ToonShaderHatching
S19Ordered material dither
A fixed four-by-four Bayer threshold offsets five-level RGB quantization inside each material fragment.
MATERIAL FRAGMENT50.72%f09d8981e41397a7Three r184 shader foundation

Limits of the proof

What this page does not establish.

Corpus anchors

Local research behind the experiment.