The last note owned correspondence. Color clamp asks whether history looks legal. Depth reject asks whether it is the same surface. Time is out of scope here. Split-sum already hid the samples in a prefilter cube DFG LUT; production then multiplies two tables. Tone mapping is inherited — Neutral after resolve, not re-fit. This note unhides the estimator. It owns Monte Carlo sampling mismatch — not VNDF, not a MIS bake-off, not a split-sum re-teach.
Same integral, two pdfs, one . Cosine-weighted hemisphere is the Lambertian ticket. A Phong cosine-power lobe about is the highlight ticket. On a sharp dielectric they are not interchangeable.

A new photographic family: gallery spotlight. Lacquer dielectric sphere on a short dark-stone plinth, dark slate wall, recessed canvas, painted picture rail. Phong-IS, , . HUD: Khronos PBR Neutral, PHOTO-ONLY, Phong-IS N=256 s=32. Do not hang on this photograph. The felt wall sparkles: Lambert sampled by a Phong lobe. That is Failure B on the cover, not a denoiser miss. The clean gallery still is the reference plate below.

Pin this. Same view, same , same seed stream. Uniform | cosine | Phong-IS. Only differs. Wedge crop of the highlight crescent under each column. Caption on the plate: same view, same N=64, same seed, only p differs. Photo only.
Hero, Mesa 25.0.7 llvmpipe, linear Rec.709, Khronos PBR Neutral , seed 329363537, key angular radius 3.600°, , : cosine 7.655620 vs Phong-IS 1.999657 (pass: phong cosine). cosine 0.140667 vs Phong-IS 0.824834 — surround starve, shown honestly. Fireflies () 21536 vs 1653. , . Assertions 24 pass / 0 fail.
Two questions, two pdfs
The integral does not change. Lighting, geometry, camera, BRDF, exposure, and the per-pixel stream do not change. Only changes. Variance is the photograph.
Cosine. Does this direction match Lambert the projected hemisphere?
Phong-IS. Does this direction match the cosine-power highlight about the reflection vector ? Not the half-vector. Not Blinn. Not GGX-VNDF.
On a lacquer dielectric under a 3.600° gallery disk they are not the same ticket. Cosine spends almost every sample off the lobe. When a sample does hit the small key, is huge and is only — lottery ticket, firefly. Phong-IS puts the inverse-CDF on . The crescent cleans up. The flanks do not automatically follow.
Uniform hemisphere () is the loud third arm: any-hemisphere sample is not cosine importance. At , , vs cosine ; vs . It is not a replacement for cosine. Firefly count at the same row is cosine 21536, uniform 14400, Phong-IS 1653 — quote , not that count, as the loudness ranking.
The scientific claim is narrow: pdf–integrand mismatch is a measurable variance, not a taste. Cosine matches Lambert projected hemisphere. Phong-IS matches a cosine-power highlight. Neither matches both at once.
Two facts, never mixed:
- Beauty plates (hero, 3-up, ladders, exponent, surround) are CPU MC, Neutral then sRGB OETF. HUD
photo-onlymeans do not invent RMSE, firefly count, or from the JPEG. 8-bit Neutral+sRGB clips fireflies. - Instruments (variance heat, pdf rose, metrics strip, reference) are the float buffer: linear Rec.709 residual, pdf rose, RMSE, fireflies, horizon fraction. Quote the metrics.
Why: the estimator, then the two pdfs
Working space is scene-referred linear Rec.709. Domain . Below-horizon samples contribute 0 and still count in . Do not renormalize after a horizon reject.
Same integral
Unbiased solid-angle estimator
Same , same , same camera, same geometry for every arm. Cosine stays in the numerator. It is not folded into .
BRDF (Lambert + Lafortune-normalized Phong)
Dielectric body, not a metal. This run: , , default . Metal () would hide Failure B.
is the BRDF energy constant. is the solid-angle pdf constant. Mixing them biases . White-furnace assert (, lobe well above the horizon): within a stated band. Science assert, not a hero plate.
No Fresnel, no GGX , no Smith. This is not a microfacet product note.
Pdfs (1/sr)
| Arm | Name | Inverse CDF | |
|---|---|---|---|
| C | Uniform hemisphere | on | , , ONB around |
| A | Cosine hemisphere | on | , , ONB around |
| B | Phong lobe about | if , else | , , ONB around |
Phong generation is in the -frame. If : weight , increment horizon_frac. RNG is a PCG integer hash, seed 329363537.
Light (analytic; no HDRI)
1-bounce direct. Finite disk key, upper-front-right, angular radius 3.600° from the highlight point, . warm. Dim cool fill over so flanks and wall remain measurable.
if the ray hits the disk and is not occluded by sphere or plinth, else . This note samples the reflection pdf only. Do not sample the light pdf. Do not MIS. A Dirac directional is illegal — hemisphere MC cannot hit a delta, and the note would collapse into NEE. Tiny key solid angle is what makes cosine firefly, and what a too-sharp can miss.
Jacobian / solid angle
The inverse-CDF maps to . above is already in solid angle. Do not multiply by an extra . A half-vector sampler would need the Jacobian . That Jacobian is why Blinn / GGX-VNDF is a different note. Cite it. Do not derive it. VNDF is how production samples this family of lobes. It is not the A/B.
Variance used on plates
All of these are linear Rec.709 , scene-referred, never JPEG, never after Neutral.
Two named ROIs, inclusive pixel rects at beauty (bottom-up):
- H — highlight crescent the key paints: .
- S — diffuse flank / plinth / foot: .
Per-pixel variance of the mean (no ref required):
The heat plate is in turbo, cosine vs Phong, same highlight-rim crop, shared p98 scale. Firefly count: with on hit pixels. Whole-frame RMSE is a footnote. It averages H and S and hides the lesson.
Display (inherited, not re-derived)
TM is Khronos PBR Neutral, , frozen across A/B/C. Constants not re-fit. Cite the tone-mapping and split-sum IBL notes. GL_FRAMEBUFFER_SRGB is off; encode is CPU. Measurement is the float buffer, not the JPEG.
Reference (not a sampling arm)
= analytic Lambert fill + Phong-IS of specular fill (32 spp) + disk NEE (96 spp). Independent seed 1374605335. Arms never sample the light pdf. This is how the box gets a high--quality ref without 4096 spp hemisphere MC on llvmpipe. The reference plate outlines ROI H/S. Not the cover.

Teaching pin: three pdfs, one view
The 3-up is the policy compare. Identical camera, geometry, materials, lights, exposure, , seed 329363537. Only differs.
| Column | What the wedge does | |
|---|---|---|
| Uniform | Grain. No crescent. Highest . | |
| Cosine | Body fills. Rim still a lottery. | |
| Phong-IS | Crescent appears. Surround goes dark. |
If the full-frame columns look like “Phong is better,” the surround plate is the correction. Trust the wedge for Failure A. Trust the honesty crop for Failure B. Quote / from the metrics, not from the 8-bit panel.
Unique artifact: variance heat on the highlight rim

This is the thing this note exists to draw. False-color , linear Rec.709 , turbo, same rim crop, shared p98 scale. HUD: INSTRUMENT FINGERPRINT, linear Rec.709 Y residual not PNG.
Cosine heat rings the crescent: a yellow-green residual blob with red firefly speckles. Phong-IS drops there — mostly blue, sparse specks, the outline of a lobe that actually got samples. Heat leaves the rim and may appear on the flank. That swap is the fingerprint. Not another RGB triangle. Not a DFG LUT remake.

The pdf rose is the secondary science plate. Hemisphere overlay, linear pdf in 1/sr, turbo: cosine about vs Phong about the same , . Polar insets under each. Caption on the plate: not Blinn, not GGX VNDF. Beside the photo, never the cover.
Quote the metrics, not the JPEG.
Ladders: , then

Failure A. Cosine at , same seed-stream prefixes. Fireflies decay slowly on the rim. At the body is quieter; the crescent is still not a Phong crescent. : 27.886635 / 15.989179 / 7.655620 / 3.837384.

Contrast. Phong-IS at the same rungs, matching pdf. The rim cleans earlier. Crescent readable by , tighter at 64/256. Surround stays dark with sparkles — Failure B riding along. : 8.377738 / 4.037456 / 1.999657 / 1.010789.

Exponent control. Phong-IS, fixed , , matching pdf. Wide lobe cosine on H (, , still beats cosine). Default is the pass plate. Sharp vs this 3.600° key: — ROI H is the crescent, so the extra rim is starved. That is the exponent control, not the pass predicate. High also hurts S.
Do not retune exposure or Neutral to hide cosine fireflies on a beauty plate. Fireflies are the lesson. The heat plate is where they are measured.
Failure B: Phong-IS starves the surround

This is the honesty plate. Tight crop of flank / plinth / foot. Cosine | Phong-IS | Phong-IS . Starve is allowed to win the crop. HUD: PHOTO-ONLY ON BEAUTY RMSE FROM FLOAT Y. Caption: Failure B flank / plinth / foot starve is allowed.
At , : cosine 0.140667 vs Phong-IS 0.824834. At : 0.860317. Both above cosine. The pdf lives around . Lambert still needs samples on the rest of . High will not feed the plinth.
The same starve is why Phong vs cosine at . Combined Phong white furnace () undershoots: measured 0.1930 vs expect 0.2917. At the inverse-CDF never places the Lambert tail in float32 ( underflows). Spec-only Phong furnace hits exactly — that is the vs check. Cosine combined hits 0.2923 vs 0.2917. Logged, not hidden. Unbiased in theory; float inverse-CDF is not a full-hemisphere Lambert sampler at this .
Phong is not monotone in on this one seed: 0.824834 at 64, 1.754730 at 256. Rare disk hits on the plinth are high-leverage. Residual heat, not a second theorem.
Hero is Phong-IS, so the felt wall sparkles. That is this failure on the cover. The clean gallery photograph is the reference plate.
Veach / MIS is how you stop choosing. One closer sentence, not a bake-off hero.
Quote the metrics. Do not quote the beauty photographs as meters.

Float buffer, Mesa llvmpipe. RMSE / var / fireflies from linear Rec.709 , never JPEG. Firefly . Seed 329363537. Ref seed 1374605335. Hash = pcg.
Pass predicate, , :
| fireflies | horizon_frac |
|||||
|---|---|---|---|---|---|---|
| uniform | 9.900829 | 0.133294 | 14400 | 90.03990936 | 0 | 0.145754 |
| cosine | 7.655620 | 0.140667 | 21536 | 56.92735672 | 0 | 0.146241 |
| phong | 1.999657 | 0.824834 | 1653 | 3.95137548 | 0.025246 | 0.059415 |
: 1.999657 7.655620. PASS.
ladder, , :
| cosine | phong | |
|---|---|---|
| 4 | 27.886635 | 8.377738 |
| 16 | 15.989179 | 4.037456 |
| 64 | 7.655620 | 1.999657 |
| 256 | 3.837384 | 1.010789 |
Exponent, Phong-IS, :
| fireflies | horizon_frac |
||||
|---|---|---|---|---|---|
| 8 | 1.783442 | 0.879714 | 2897 | 0.084079 | 0.102782 |
| 32 | 1.999657 | 0.824834 | 1653 | 0.025246 | 0.059415 |
| 128 | 7.367447 | 0.860317 | 587 | 0.002089 | 0.030926 |
White furnace (, , lobe off-horizon):
| Sampler | Measured | Expected | Band |
|---|---|---|---|
| Cosine, | 0.2923 | 0.2917 | PASS () |
| Phong, only | 0.1200 | 0.1200 | PASS () — vs |
| Phong, | 0.1930 | 0.2917 | short; inverse-CDF tail, see Failure B |
Header constants, as written:
| item | value |
|---|---|
| seed / ref_seed | 329363537 / 1374605335 |
| exposure / TM | 1.000 / Khronos PBR Neutral (not re-fit) |
| firefly | 4.0 |
| key angular radius / | 3.600° / 0.1372 |
| / | / |
| / / | / 0.120 / 32 |
| / | / inclusive, beauty |
Hero rounding used in the lede: 7.66 / 2.00; 0.141 / 0.825; fireflies 21536 / 1653; key 3.600°; seed 329363537; 24 pass / 0 fail. Do not invent RMSE from the hero, the 3-up, or the surround crop. Those frames are photo-only. The metrics strip is a science snapshot of the same table; quoted numbers are the float buffer.
Controls
Every A/B/C plate shares bit-identical camera, geometry, materials, lights, exposure, and per-pixel stream. Inverse-CDF differs; directions differ. Do not reuse a cosine direction under a Phong weight.
Seed
One published integer: 329363537. Same stream across arms. A residual that flips with a re-seed is RNG, not a theorem.
Horizon
Weight 0, count in , log horizon_frac. No pdf renormalize. Renormalizing biases the estimator toward the upper hemisphere. Phong : 0.025246. Cosine / uniform: 0 (generation in the -frame). Wider lobe () 0.084079; sharper () 0.002089.
White furnace
, lobe off-horizon. Cosine combined and Phong spec-only are the gated asserts. Combined Phong shortfall is the float inverse-CDF tail, not a loosened band.
Firefly
on linear . Do not score fireflies on the JPEG. Neutral+OETF hides them.
Light angular size
Stated 3.600°. Small enough that cosine misses, large enough that Phong- hits. Delta light experiment becomes NEE. Fat light cosine looks fine and the note dies.
Material
Dielectric, both and live. Plinth / wall / floor are Lambert. Metal-only hides surround starve.
ROI
H = crescent the key actually paints. S = flank + plinth, no highlight pixels. Whole-frame RMSE is not a substitute.
Two paths, do not mix the instruments
| path | frames | instrument |
|---|---|---|
| Photograph | hero, 3-up, ladders, exponent, surround | CPU MC of reflection pdfs on this llvmpipe, Neutral , sRGB OETF. HUD photo-only. |
| Instrument | variance heat, pdf rose, metrics strip, reference | heat, pdf rose, RMSE / fireflies / horizon, NEE reference. |
| Display | every plate | expose Neutral sRGB OETF. Resolve is linear. Operator is inherited. |
The 3-up is a photograph of the control and the source of the teaching. Quote the metrics for RMSE and fireflies. Do not quote the 8-bit panel as 7.655620.
Honesty gaps
- Offline spp strip on OSMesa / llvmpipe. Named on a still. Not 60 Hz. Not “interactive 1 spp.” Not a real-time path tracer. Not hardware RT. Not a production IBL baker.
- JPEG is 8-bit display-referred. Neutral+OETF clips fireflies. RMSE / var / firefly count are linear on the float buffer.
- Hero is Phong-IS. Felt wall sparkles. Failure B on the cover, not a denoiser miss. Clean still is the reference plate.
- uses disk NEE. That is not an A/B/C arm. The note still samples reflection pdfs only.
- Combined Phong white furnace undershoots (0.1930 vs 0.2917). Inverse-CDF at cannot place the Lambert tail in float32. Spec-only hits exactly; cosine combined hits .
- Phong is not monotone in on this seed (64: 0.824834, 256: 1.754730). Rare disk hits on the plinth. Residual heat, not a second theorem.
- is the exponent control against a 3.600° key and an ROI H, not a failed pass predicate.
- Beauty (). Composites . Not full-frame 4k spp.
- Analytic sphere. from the implicit surface, not a faceted mesh that sparkles under a sharp lobe. One sphere, one plinth, dark gallery.
- No Fresnel, no GGX, no Smith, no HDRI, no MIS arm. 1-bounce disk + constant fill.
- Whole-frame RMSE is not the lesson. It would average H and S.
- Not DLSS / OIDN / SVGF / ReSTIR. Offline spp strip, not a 1-spp product.
- Neutral constants copied from the tone-mapping note / Khronos PBR Neutral. Not re-fit.
- Cousin only: VNDF is how production samples this family of lobes; Veach is how you stop starving Lambert.
Mesa / llvmpipe — what this run can claim
| item | value |
|---|---|
GL_VERSION |
4.5 (Core Profile) Mesa 25.0.7-2+deb13u1 |
GL_RENDERER |
llvmpipe (LLVM 19.1.7, 256 bits) |
| OSMesa | core 3.3 request; driver reports 4.5 core |
| FBO color | RGBA32F complete, . 8-bit fallback not hit |
GL_FRAMEBUFFER_SRGB |
disabled (Neutral + sRGB OETF on CPU) |
| MSAA | disabled |
| Beauty / composite | / |
| Neutral | 1.00 |
| seed / hash | 329363537 / pcg |
| key | finite disk, 3.600° from the highlight point |
Can claim: on this OSMesa / llvmpipe build, the same integral under cosine vs Phong-IS at published and produces these / / firefly numbers; the heat plate is that residual; the 3-up is the same view with only changed.
Cannot claim: hardware RT, a real-time budget, “Phong is the correct production sampler,” energy identity after Neutral, anything measured off the JPEG. Discrete-GPU metrics, occupancy, bandwidth, or “this is how the hardware works.”
Assertions
This run: 24 pass / 0 fail.
| check | result |
|---|---|
| FBO is RGBA32F | PASS |
| Required gallery plates exist and are non-empty | PASS |
| No NaNs in the estimator | PASS |
| Sphere / plinth pixel counts | PASS ( / ) |
| White-furnace cosine | PASS 0.2923 vs 0.2917 |
| White-furnace Phong spec-only | PASS 0.1200 |
| ROI H/S non-empty | PASS / |
| at , | PASS 1.999657 7.655620 |
No assert tolerances were loosened to hide cosine fireflies or Phong surround starve.
Out of scope
Full MIS product bake-off as hero — Veach is one closer sentence, no balance-heuristic plates. GGX VNDF deep dive — cousin sentence only; no Smith , no half-vector Jacobian derivation, no roughness mip. Re-deriving Neutral TM, Karis prefilter, DFG LUT, split-sum energy tables — cite IBL + TM. Spectral path tracer. DLSS / SVGF / OIDN / ReSTIR as the denoiser of this still. Multi-bounce GI, next-event estimation as a sampling arm, area-light LTC. Shadow-map bias. Toksvig / anisotropic GGX / sRGB-vs-linear texture decode. A second photographic family as cover or journal hero. Real-time path-tracer claims, hardware RT cores, occupancy, bandwidth.
Estimator lock
Lo = (1/N) sum f_r(w_k, w_o) * L_i(w_k) * (n·w_k) / p(w_k)
p_c = (n·ω)/π // ONB around n
p_p = (s+1)/(2π) (ω·R)^s // ONB around R; n·ω≤0 → weight 0, still in N
f_r = ρd/π + ρs (s+2)/(2π) (ω·R)_+^s // s+1 is pdf; s+2 is BRDF
PNG = sRGB_OETF( Neutral(e * Lo) ) // e=1.00, inherited
Locked: same integral, two pdfs, one ; cosine in the numerator; horizon weight 0 and still in ; Neutral inherited, not re-fit. Pin the gallery still as the presentation. Pin the 3-up as the teaching. Pin the variance heat as the fingerprint. Pin the surround crop as the honesty plate. The tickets are not interchangeable.