Skip to content

fix(examples): redesign prop-origin-transform as a street utility pedestal with a thrown conduit elbow - #267

Merged
TMHSDigital merged 3 commits into
mainfrom
fix/hero-prop-origin-transform
Sep 26, 2026
Merged

TMHSDigital merged 3 commits into
mainfrom
fix/hero-prop-origin-transform

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

What changed and why

The gallery review judged the prop-origin-transform hero to be programmer art: two teal boxes, each with a grey cylinder, cryptic TRAP / MPI KEEP floor text and unexplained green and pink tick marks. This PR redesigns both the asset and the composition.

Asset: a street utility pedestal, built as one mesh with 5 materials:

  • precast concrete footing
  • galvanised base plate with anchor nuts
  • green cabinet on a black kick skirt, with a hipped lid
  • door with hinges, a T-handle and a hazard plate
  • louvred side vents, a conduit boss, and a sleeve in the pad

It is authored the way an import often arrives: origin at the geometric centre, with mesh coordinates divided by the non-uniform object scale (1.15, 0.92, 1.08). The data-API bake therefore lands on exactly the designed shape. The accessory is a flanged PVC conduit elbow (2 materials) with bolt heads, a strap clamp, and a coupling that seats in the sleeve.

Composition (no text):

  • Left: the elbow is parented with matrix_parent_inverse and stays seated.
  • Right: bare child.parent = parent applies the pedestal's transform a second time. The elbow is thrown 0.65 m past the slab edge and into the air, and a glowing cyan wireframe ghost marks the seat it left.
  • A sidewalk slab raises both origins 0.20 m, so the doubled translation lifts the elbow instead of sliding it along the floor.
  • Floor pivot rings centred on each origin, with red X and green Y crosshair notches, replace the buried axis stubs.

Wiring:

  • The render path now also runs gallery_asset_quality (exit 11).
  • scripts/asset_sheet.py gains a SELECT row for the asset (^(Pedestal|Conduit)\.Keep$).
  • The alt text is updated in gallery.json and the README, and the gallery is regenerated.

Gates (Blender 5.2.1 LTS, E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe)

  • Framing: fill x=0.812 y=0.644 (band 0.70–0.90, ok). Margins: left 0.050, right 0.097, bottom 0.161, top 0.144 (≥0.02).

  • Asset quality: parts=2, materials=7, dominant share 0.50, edge90=0.075, no default names. Result: aq_ok.

  • Contact sheet: docs/gallery/contact-sheets/prop-origin-transform-contact-sheet.webp

    tile luma stage warmth sat
    prop-origin-transform 0.2498 0.2027 +0.0615 0.2304
    armature-bend 0.2787 0.2132 -0.4279 0.1436
    damped-track-aim 0.1511 0.1448 +0.2772 0.2305
    bmesh-gear 0.2358 0.1772 +0.3027 0.2495

    Verdicts:

    • Stage darkness: pass. 0.203 is inside the calibration span (0.145–0.213). The first cut was 0.228 and was darkened.
    • Wedge warmth: pass. It is positive, but weaker than gear and damped-track.
    • Subject fill: pass.
    • Saturation: pass. 0.230 is in range.
    • Thumbnail legibility: pass. At card size the orange elbow hanging off to the right with its cyan ghost reads at once.
    • Mean luminance: 0.250 against calibration 0.151–0.279.
  • Asset sheet: docs/gallery/asset-sheets/prop-origin-transform.webp, against collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow and apothecary-shelf. Verdict: pass. The pedestal carries the most distinct parts and materials per silhouette of any piece in the lineup. It sits level with the hydrant and is not identifiable as the least-designed object.

  • Drift: measure_hero_drift.py --only prop-origin-transform gives mean_abs 0.00367 and a verdict of matches.

  • The generated <img alt> in docs/gallery/index.html and docs/gallery/prop-origin-transform/index.html was read back; the text is correct (193 chars).

Check runs

binary (reported) check --skip-mpi
5.2.1 LTS exit 0, bare_jump 0.298469, mpi_err 0 exit 8 (err 2.985e-01)
5.1.2 exit 0, identical numbers exit 8 (err 2.985e-01)
4.5.11 LTS exit 0, identical numbers exit 8 (err 2.985e-01)

tests/smoke/run_example.py on 5.2.1 gives [PASS]. The render path on 4.5.11 LTS also exits 0 with identical framing numbers.

Falsifiers

Check logic and thresholds are unchanged. Because the mesh changed, every mesh-dependent check was re-falsified on 5.2.1 with a probe that monkeypatches the helper out:

  • origin bake removed: exit 6, local min.z=-0.580000 != 0
  • scale apply removed: exit 5, scale (1.15, 0.92, 1.08)
  • --skip-mpi: exit 8, err 0.2985 m

Proven by live run vs. established by inspection

  • Proven by live run: every number above. That covers the checks and falsifiers on 5.2.1, 5.1.2 and 4.5.11, framing and asset quality on 5.2.1 and 4.5.11, the contact-sheet metrics, the asset-sheet render, the drift measurement, and the gallery build.
  • Established by inspection only: the thumbnail-legibility and asset-sheet "not least-designed" verdicts, which are judgments made by eye on the committed composites.

🤖 Generated with Claude Code

TMHSDigital and others added 3 commits September 25, 2026 21:02
…estal with a thrown conduit elbow

The gallery review judged the hero programmer art: two teal boxes with grey
cylinders, cryptic TRAP / MPI KEEP floor text and unexplained tick marks.

The pedestal is now a designed prop in five materials: concrete footing,
galvanised base plate and anchor nuts, cabinet with kick skirt, hipped lid,
hinged door with a T-handle and hazard plate, louvred vents, a conduit boss
and a pad sleeve. It is authored as an import arrives (centred origin, mesh
divided by a non-uniform object scale), so the data-API bake lands on
exactly the designed shape. The accessory is a flanged PVC conduit elbow
with a clamp and a coupling that seats in the sleeve.

The composition drops all text. The left copy is parented with MPI and
seated. On the right copy, bare child.parent throws the elbow 0.65 m into
the air past the slab edge, and a glowing cyan wireframe ghost marks the
seat it left. Floor pivot rings centred on each origin replace the axis
stubs. The render path now runs the gallery_asset_quality gate too, and
asset_sheet.py gains a SELECT row for the asset.

Check logic and thresholds are unchanged. The documented numbers move with
the new mesh: bare jump 0.298 m, and min.z -0.58 without the origin bake.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
build_gallery caps card alts at 200 chars; the redesign alt was 333.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Union of asset-sheet SELECT rows; generated gallery pages regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 26, 2026
@TMHSDigital
TMHSDigital merged commit 2873914 into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-prop-origin-transform branch September 26, 2026 01:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant