Skip to content

feat(showcase): add rope-bridge - #251

Merged
TMHSDigital merged 1 commit into
mainfrom
feat/showcase-rope-bridge
Sep 25, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
feat/showcase-rope-bridge

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Adds showcase/rope-bridge. It is a rope footbridge with log posts and sills through-tenoned to the post centres. Twenty planks are seated on two laid foot ropes, the hand ropes are lashed to the posts, suspenders tie hand rope to foot rope, and the foot ropes are staked off behind each end.

Selection: it is the first unclaimed candidate in the ROADMAP pool (line 136). It is a recognizable prop with no API contract, so it goes in showcase, not examples. No open PR or feat/showcase-* branch covered it.

Binaries (all local, .scratch/):

  • blender-4.5.11-windows-x64, reports Blender 4.5.11 LTS
  • blender-5.1.2-windows-x64, reports Blender 5.1.2
  • blender-5.2.1-windows-x64, reports Blender 5.2.1 LTS

The budget that matters: deck parabola (exit 19)

A deck laid on two straight ramps has the same ends, sag, planks and bounding box as one that hangs, so no envelope check can tell them apart. The check fits a least-squares parabola to the plank top-face centres read off the mesh. Every plank must land within 6 mm of the fit, and the fitted sag must be 0.22 ± 0.015 m.

  • Default: residual 2.97 mm, sag 0.2204 m.
  • --vee-deck: its fitted sag is 0.215 m, still in band, and every other budget passes. It exits 19 only on the 32.5 mm residual. live-run-proven

Falsifiers: exit codes per binary (live-run-proven)

default --skip-decimate --stray-vert --lift-z --float-post --short-rails --float-planks --loose-lashings --float-suspenders --lean-post --vee-deck --drift-planks --slack-rails --sharp-plank --low-bake --output
4.5.11 0 9 15 16 16 17 18 18 18 19 19 19 19 20 21 —
5.1.2 0 9 15 16 16 17 18 18 18 19 19 19 19 20 21 —
5.2.1 0 9 15 16 16 17 18 18 18 19 19 19 19 20 21 0
Flag Target budget Measured Exit
--skip-decimate LOD1 ratio 1.0000 9
--stray-vert hygiene loose_v 1 15
--lift-z grounded zmin 0.050 16
--float-post named supports (4 posts + 4 stakes) worst 0.012 16
--short-rails rope-end / tenon bite −19.3 mm 17
--float-planks plank seat band −3.0 mm 18
--loose-lashings lashing hoop band −4.0 mm 18
--float-suspenders one connected assembly 15 components 18
--lean-post plumb 19.4 mm 19
--vee-deck deck parabola 32.5 mm 19
--drift-planks plank pitch 31.7 mm 19
--slack-rails rail height 0.565 m 19
--sharp-plank edge treatment 12 right-angle edges 20
--low-bake baked texels per UV island 9.42 21

Envelope: every falsifier stays inside BBOX_TOL (20 mm). The worst cases are --float-post at +12 mm in Z and --loose-lashings at +13 mm in X and Y. live-run-proven

Checks run locally

  • tests/check_falsifier_targets.py: static check passes. --run <BLENDER> --only rope-bridge also passes on all three binaries. live-run-proven

  • tests/smoke/run_example.py --forbid-skip: [PASS] rope-bridge on 4.5.11, 5.1.2 and 5.2.1. live-run-proven

  • Other local checks:

    • check_exit_code_readme, check_import_export_rules, check_engine_id, check_gallery_images, test_harness
    • the inline validate-manifest and validate-counts jobs, run in a clean worktree (29 showcase pieces)

    All pass. live-run-proven

  • Determinism: every measured line is byte-identical across 4.5.11, 5.1.2, 5.2.1 and a second 5.2.1 run. That includes both LOD counts and the 300212 B glTF. Check-only wall-clock is about 2.0–2.2 s. live-run-proven

  • Ecosystem drift check: remote action, so CI-proven only.

  • 4.5 / 5.2 smoke jobs: CI-proven on this PR. needs-5.1 is applied because the pipeline bakes.

Findings the budgets forced during authoring

  • Coplanar pairs. The coplanar budget counted 84 cross-shell pairs. The two lashing turns on each post were one section stacked, so their outer faces shared planes. The second turn is now rotated half a vertex step, and the count is 0.
  • Right-angle edges. The edge budget found 6 right-angle edges. The foot rope's bend over the sill arris had a radius smaller than the rope, so a ring every few degrees folded the section through itself. It is now a single mitred ring, and the count is 0.
  • Framing. The framing gate failed the first camera (bottom margin 0.017). The camera was re-aimed to fill 0.822 × 0.761, with a minimum margin of 0.069.

Visual gates

Contact sheet: docs/gallery/contact-sheets/rope-bridge-contact-sheet.webp. The calibration band is armature-bend / damped-track-aim / bmesh-gear.

criterion rope-bridge calibration verdict
mean luminance 0.2216 0.151–0.302 in band
stage darkness 0.2233 0.145–0.236 in band
wedge warmth +0.139 −0.43 … +0.37 warm, milder than two of the three
saturation 0.131 0.144–0.231 just under the set; in line with the timber showcase peers (archway 0.090, trough 0.136)
subject fill 0.822 wide — passes the framing gate
thumbnail legibility — — reads as a rope bridge at tile size

The first draft's stage was 0.243, above the brightest calibration stage: a key light at 900 W flooded the back wall. It was relit at 660 W. inspection + measured

Asset sheet: docs/gallery/asset-sheets/rope-bridge.webp. Verdict: passes. Rendered alone under neutral light, it carries more construction than any reference:

  • grained, chamfered planks
  • laid rope, lashings hooped onto their posts, staked tie-offs

It is not the least-designed object; the rocket and the mech arm are simpler. inspection-only

Close-ups inspected (sill wrap, post lashings, stake ties, plank seats from below, deck end, elevation):

  • No z-fight speckle and no chrome.
  • One defect was found: the single-ring post-top dome rendered faceted. A second round-over ring was added before the hero was rendered. inspection-only

The hero was rendered on 5.2.1 through scripts/render_hero.py, and build_gallery.py was run last. The generated <img alt> and witness callout on docs/gallery/index.html and docs/gallery/rope-bridge/index.html were read and are complete. inspection-only

Not applicable, with reasons (in the piece README)

  • Mirror-symmetry budget: laid rope is chiral.
  • Single convex-hull collider: replaced by a 30-box compound, because a hull over a sagging deck puts walkers 0.22 m above the planks at midspan.
  • Masonry, vessel, scatter, fixture, roof, forging and ring conventions: no such parts.

🤖 Generated with Claude Code

A rope footbridge was the first unclaimed showcase candidate on the
roadmap. Its failure mode no bounding box can see is the deck shape: two
straight ramps with the same ends and sag pass every envelope check. The
piece fits a least-squares parabola to the plank tops read off the mesh,
and --vee-deck exits 19 on that fit while its sag stays in band.

Also asserts named supports, rope-end and tenon bites, banded plank seats
and lashing hoops, one connected assembly, plumb, plank pitch, rail
height, edge treatment and baked texels per UV island, each with a
falsifier proven on 4.5.11, 5.1.2 and 5.2.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@TMHSDigital TMHSDigital added the needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. label Sep 25, 2026
@github-actions github-actions Bot added showcase Budget-conformance props under showcase/ documentation Improvements or additions to documentation labels Sep 25, 2026
@TMHSDigital
TMHSDigital merged commit e256a9a into main Sep 25, 2026
14 checks passed
@TMHSDigital
TMHSDigital deleted the feat/showcase-rope-bridge branch September 25, 2026 17:41
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 needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. showcase Budget-conformance props under showcase/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant