Skip to content

Commit b38677a

Browse files
authored
fix: re-stage the two newest heroes to the calibration-set bar (#93)
A card-scale review found vse-gamma-cross and light-link-studio below the gallery bar: both sorted as the odd one out in their own committed contact sheets, which the CLAUDE.md contact-sheet gate exists to prevent. The witness engineering was sound; the renders and a few hygiene items were not. vse-gamma-cross: the gamma-dip proof was a 0.115 red-channel delta between two non-adjacent ~95x115 px swatches, invisible at card scale, so a naive-lerp Blender would render a nearly identical image. The bench is recomposed around four large fade panels with the authentic-mid and naive-lerp-mid swatches large and adjacent at frame center, the stage re-darkened to spec, and the pair labels mounted on the plinth facing the camera. The check gains the final-frame sample (frame 32, t=31/32) so the endpoint convention is pixel-backed end to end, and strips_coll() now calls .strips directly instead of papering over the 4.x rename with a .sequences fallback. light-link-studio: the wall carried no wedge warmth (measured R-B -0.1 against +8...+58 across the pinned calibration set) and ~40% of the frame was featureless grey. Re-lit to a measured +20...+50 warm wall pool, re-framed to ~75% subject fill with a TRACK_TO camera, LINKED/UNLINKED plaques stood upright and legible at card scale, and the rim-graze horizon stripe and clipped specular core eliminated. Dead EEVEE debris removed (IS_5X, eevee_engine_id, a one-choice --engine flag, an ignored engine parameter) and the unreproducible EEVEE figures replaced with fresh probe measurements (3.7x linked ratio on both 4.5.11 EEVEE Next and 5.1.2 EEVEE). The README witness list now uses the dash bullets the gallery generator renders. Measured values shifted with the re-lit scene and are updated consistently (linked ratio 3.6x on 5.1 / 3.4x on 4.5, rise 206% / 213%; falsification exit 6 at hero/decoy 0.39x). Both examples pass check-only on Blender 4.5.11 LTS and 5.1.2 with measured values printed, and both contact sheets re-judged against the pinned set with per-criterion numbers. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
1 parent 198ab43 commit b38677a

15 files changed

Lines changed: 304 additions & 252 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ consumed-input compositing contract, and a save/reload round-trip.
310310
</tr>
311311
<tr>
312312
<td width="46%" valign="middle">
313-
<a href="examples/light-link-studio/"><img src="examples/light-link-studio/preview.webp" alt="Light link studio: a blazing orange hero sphere over a LINKED plaque beside a dim steel decoy over UNLINKED on a dark studio floor - one key light restricted to the hero collection" /></a>
313+
<a href="examples/light-link-studio/"><img src="examples/light-link-studio/preview.webp" alt="Light link studio: a blazing orange hero sphere beside a dim steel decoy on a dark studio floor, upright LINKED and UNLINKED plaques below each, a warm light pool raking the wall behind - one key light restricted to the hero collection" /></a>
314314
</td>
315315
<td valign="middle">
316316

@@ -326,7 +326,7 @@ honors linking too (measured), with Cycles pinned for deterministic samples.
326326
</tr>
327327
<tr>
328328
<td width="46%" valign="middle">
329-
<a href="examples/vse-gamma-cross/"><img src="examples/vse-gamma-cross/preview.webp" alt="VSE gamma cross: a mixing bench in a dark studio - eight emissive panels fading crimson to teal across the cross, with the brighter naive-lerp midpoint framed in hazard orange on the console below" /></a>
329+
<a href="examples/vse-gamma-cross/"><img src="examples/vse-gamma-cross/preview.webp" alt="VSE gamma cross: a mixing bench in a dark studio - four large emissive panels fading crimson to teal across the cross, with the true midpoint swatch beside the brighter naive-lerp midpoint framed in hazard orange at frame center" /></a>
330330
</td>
331331
<td valign="middle">
332332

5.17 KB
Loading
1012 Bytes
Loading
994 Bytes
Loading
472 Bytes
Loading

docs/gallery/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -524,14 +524,14 @@ <h2><a href="vse-gamma-cross/">vse-gamma-cross</a></h2>
524524
<a class="card-link" href="vse-gamma-cross/">View example <span aria-hidden="true">&rarr;</span></a>
525525
</div>
526526
</article>
527-
<article class="card" data-tags="rendering">
527+
<article class="card" data-tags="rendering objects">
528528
<a class="card-media" href="light-link-studio/" aria-label="light-link-studio example detail page">
529529
<img src="assets/light-link-studio-hero.webp" alt="light-link-studio — One key, one hero: a light linked to a receiver collection lights only the hero, proven by two pixel renders in one pass." loading="lazy" decoding="async" />
530530
</a>
531531
<div class="card-body">
532532
<h2><a href="light-link-studio/">light-link-studio</a></h2>
533-
<p class="teaches">One key, one hero: a light linked to a receiver collection lights only the hero, proven by two pixel renders in one pass. Linked: 4.0x luminance ratio; unlinked in the same check: the decoy rises 244% while the hero holds at 0.0% drift.</p>
534-
<p class="witnesses"><span class="tag">witnesses</span> The API is obj.light_linking on the light OBJECT (ld.light_linking is an AttributeError). Luminance is sampled at each sphere&#x27;s projected center; EEVEE Next honors linking too (5.5x on 4.5, 5.9x on 5.1), Cycles pinned for deterministic samples.</p>
533+
<p class="teaches">One key, one hero: a light linked to a receiver collection lights only the hero, proven by two pixel renders in one pass. Linked: 3.6x luminance ratio; unlinked in the same check: the decoy rises 206% while the hero holds at 0.0% drift.</p>
534+
<p class="witnesses"><span class="tag">witnesses</span> The API is obj.light_linking on the light OBJECT (ld.light_linking is an AttributeError). Luminance is sampled at each sphere&#x27;s projected center; EEVEE honors linking too (probe-measured 3.7x on 4.5.11 EEVEE Next and 5.1.2 EEVEE), Cycles pinned for deterministic samples.</p>
535535
<a class="card-link" href="light-link-studio/">View example <span aria-hidden="true">&rarr;</span></a>
536536
</div>
537537
</article>

docs/gallery/light-link-studio/index.html

Lines changed: 58 additions & 45 deletions
Large diffs are not rendered by default.

docs/gallery/vse-gamma-cross/index.html

Lines changed: 68 additions & 62 deletions
Large diffs are not rendered by default.

examples/gallery.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,12 +361,13 @@
361361
{
362362
"name": "light-link-studio",
363363
"dir": "examples/light-link-studio",
364-
"teaches": "One key, one hero: a light linked to a receiver collection lights only the hero, proven by two pixel renders in one pass. Linked: 4.0x luminance ratio; unlinked in the same check: the decoy rises 244% while the hero holds at 0.0% drift.",
365-
"witnessesFix": "The API is obj.light_linking on the light OBJECT (ld.light_linking is an AttributeError). Luminance is sampled at each sphere's projected center; EEVEE Next honors linking too (5.5x on 4.5, 5.9x on 5.1), Cycles pinned for deterministic samples.",
364+
"teaches": "One key, one hero: a light linked to a receiver collection lights only the hero, proven by two pixel renders in one pass. Linked: 3.6x luminance ratio; unlinked in the same check: the decoy rises 206% while the hero holds at 0.0% drift.",
365+
"witnessesFix": "The API is obj.light_linking on the light OBJECT (ld.light_linking is an AttributeError). Luminance is sampled at each sphere's projected center; EEVEE honors linking too (probe-measured 3.7x on 4.5.11 EEVEE Next and 5.1.2 EEVEE), Cycles pinned for deterministic samples.",
366366
"hero": "docs/gallery/assets/light-link-studio-hero.webp",
367367
"preview": "examples/light-link-studio/preview.webp",
368368
"tags": [
369-
"rendering"
369+
"rendering",
370+
"objects"
370371
]
371372
}
372373
]

examples/light-link-studio/README.md

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,43 @@ most often misses or misaddresses.
77

88
**What it witnesses:** the light-linking contract and the traps around it.
99

10-
1. **The API is on the light OBJECT, not the Light datablock.**
11-
`ld.light_linking` is an AttributeError on both versions (verified); the
12-
path is `obj.light_linking.receiver_collection` (ObjectLightLinking, with
13-
`blocker_collection` alongside). Assignment reads back through the API.
14-
2. **Linked, the key lights only the receiver collection.** Render one:
15-
hero well-lit, decoy at the fill floor — hero/decoy luminance ratio
16-
**4.0x** (gate ≥ 3x), measured at each sphere's *projected* center so
17-
framing can't move the sample off the subject.
18-
3. **Unlinked (same check), the restriction vanishes surgically.** Render
19-
two: the decoy rises **244–251%** while the hero drifts **0.0%** — the
20-
link restricts without dimming anything else. The shipped check therefore
21-
demonstrates both states, not just one.
22-
4. **The engine note, verified rather than assumed.** Light linking also
23-
works on EEVEE Next — measured 5.5x linked ratio on 4.5.11 EEVEE Next and
24-
5.9x on 5.1.2 EEVEE, matching Cycles within sampling noise. The check
25-
still pins Cycles for deterministic tiny-sample CPU renders; luminance
26-
gates need `view_transform = 'Standard'` (AgX compresses the ratios).
10+
- **The API is on the light OBJECT, not the Light datablock.**
11+
`ld.light_linking` is an AttributeError on both versions (verified); the
12+
path is `obj.light_linking.receiver_collection` (ObjectLightLinking, with
13+
`blocker_collection` alongside). Assignment reads back through the API.
14+
- **Linked, the key lights only the receiver collection.** Render one:
15+
hero well-lit, decoy at the fill floor — hero/decoy luminance ratio
16+
**3.6x** (gate ≥ 3x), measured at each sphere's **projected** center so
17+
framing can't move the sample off the subject.
18+
- **Unlinked (same check), the restriction vanishes surgically.** Render
19+
two: the decoy rises **206–213%** while the hero drifts **0.0%** — the
20+
link restricts without dimming anything else. The shipped check therefore
21+
demonstrates both states, not just one. The rise figure is noisy by
22+
construction: the decoy's unlit base sits near the fill floor, so small
23+
absolute shifts in that base swing the relative rise between versions and
24+
runs — the gate is a conservative ≥ 50%.
25+
- **The engine note, verified rather than assumed.** Light linking also
26+
works on EEVEE — measured with an EEVEE luminance probe (the shipped
27+
scene with `render.engine` swapped: `BLENDER_EEVEE` on 5.x,
28+
`BLENDER_EEVEE_NEXT` on 4.x) at **3.7x** linked ratio on both 4.5.11
29+
EEVEE Next and 5.1.2 EEVEE, matching Cycles within sampling noise. The
30+
shipped check still pins Cycles for deterministic tiny-sample CPU
31+
renders; luminance gates need `view_transform = 'Standard'` (AgX
32+
compresses the ratios).
2733

2834
**What each check catches on failure:** inverting the link to the decoy
29-
collection (exit 6 — hero drops to 0.179, ratio collapses to 0.22x), an
35+
collection (exit 6 — hero/decoy ratio collapses to 0.39x), an
3036
RNA move of the API onto the Light datablock (exit 3, guarded), a lost
3137
assignment read-back (exit 5), a link that doesn't restrict (exit 7, rise
3238
below 50%), and a non-surgical restriction (exit 8, hero drift above 5%).
3339

3440
**Version witness:** ObjectLightLinking API and the measured ratios match on
35-
Blender 4.5 LTS and 5.1 (4.0x linked both; rise 244% vs 251% within sampling
36-
noise).
41+
Blender 4.5 LTS and 5.1 (3.4x vs 3.6x linked; rise 213% vs 206% — inside the
42+
rise noise described above).
3743

3844
The render is the contract at a glance: the blazing orange hero over the
39-
LINKED plaque, the cold steel decoy over UNLINKED — one key, one hero.
45+
LINKED plaque, the cold steel decoy over UNLINKED, a warm pool raking the
46+
wall behind them — one key, one hero.
4047

4148
## Run
4249

0 commit comments

Comments
 (0)