Skip to content

fix(showcase): fence-kit and hand-pump visual quality pass - #183

Merged
TMHSDigital merged 3 commits into
mainfrom
fix/showcase-fence-pump-quality
Sep 19, 2026
Merged

TMHSDigital merged 3 commits into
mainfrom
fix/showcase-fence-pump-quality

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Summary

Reusable showcase visual-quality pass on fence-kit and hand-pump (picks: no prior quality pass; last report named these next). One branch, three commits: convention, then each piece.

New convention in showcase/README.md: Diagonal from stations (exit 17) — brace / gooseneck / scroll from named host endpoints, not a hypot-length box rotated about its centroid.

fence-kit

Intended size: 1.60 m bay, 1.14 m posts. Outer AABB 1.624 x 0.134 x 1.232 m.

Defects (round 1 inspection, old mesh)

  1. Brace left ~4-6 cm of daylight (front ortho, joint_brace_l, threeq_a, clay).
  2. Brace right punched through the top strap (front ortho, joint_brace_r).
  3. U-straps were three disconnected cubes with an open inner face (joint_strap, joint_post_rail).
  4. Rails identical (front, top).
  5. Kick sat above the shoe with daylight; square-cut vs post (joint_kick, ground).
  6. Cap pyramid smaller than the post, shelf at POST_H (joint_cap).
  7. Cube shoes (ground, bottom).
  8. Brace was a hypot-box in front of the rails at y = -POST_W*0.55 (front, clay).
  9. No wear.
  10. Clay silhouette read as a toy fence.

Generator fixes (structural)

  • Brace is an oriented box from (post_xs[0], Y_BRACE, RAIL_ZS[0]) to (post_xs[1], Y_BRACE, RAIL_ZS[-1]) on the post back face, not a centroid-rotated hypot box.
  • Rail collars are U-wraps (omit the span-facing plate) with COLLAR_BITE so they cannot z-fight the rail ends.
  • Rails tenon TENON past the post inner face; kick seats SHOE_H - 0.003 into the shoes; caps added after the wood bevel with a 3 mm overlap.
  • Seeded sin(i) jitter on rail Y/Z. Wear noise on both materials. No XY recenter.

Round 2 inspection (looked at every PNG): brace meets both posts, caps eave the posts, kick is a toe board, clay reads as a fence. Remaining nits: U-straps are still three plates (intentional vs z-fight), shoes are box collars. 2 inspection rounds. Landing-page yes.

Hygiene / joint (live run, all three binaries)

Axis 4.5.11 / 5.1.2 / 5.2.1
tris 1092 / 1092 / 1092 (was 1212)
bbox (1.6240, 0.1340, 1.2320), zmin 0
hygiene (loose/nonman/doubles/zero-area/ngons/zfight) all 0
brace_gap (max of per-post mins) 0.00240
rail_gap 0.00093
span_x 1.3900
shoes 2, shoe_z 0
collider 32
export 82216 / 82216 / 82208

Falsifiers (same code on 4.5.11, 5.1.2, 5.2.1)

Flag Exit Budget
default 0
--skip-decimate 9 LOD1 ratio
--stray-vert 15 loose verts
--lift-z / --short-shoes 16 zmin / named shoes
--short-brace 17 brace-to-post gap
--gap-rails 18 rail-to-post gap
--long-rails 19 rail span vs 2·RAIL_HALF

Hero: 5.2.1 Cycles, check_framing with no deviation=. fill y=0.872, margins min 0.033. Pillow webp q85.

hand-pump

Intended size: ~1.05 m village pump, 0.34 m plinth, 0.76 m column. Outer AABB 0.610 x 0.382 x 1.052 m.

Defects (round 1 inspection, old mesh)

  1. Seven sausage cyl_between gooseneck (left ortho, threeq, clay, joint_spout_*).
  2. Cube head (threeq, joint_head_handle, top).
  3. Thin box lever into the cube, no pivot pin (threeq).
  4. 16-gon flat-shaded column (clay, wire).
  5. Two stacked plinth boxes, flange with no bolts (joint_plinth, ground).
  6. Blunt cylinder nozzle (joint_spout_nozzle).
  7. XY AABB recenter shifted the column off origin.
  8. 10-gon blunt grip.
  9. No packing nut / gland.
  10. Silhouette read as toys.

Generator fixes (structural)

  • Gooseneck is a 6-gon tube along a YZ quarter-circle from y0 = -COL_R_LO, t0 = -0.14 so the join is inside the column volume.
  • Head is a 24-seg stuffing box, 8-seg packing nut, two cheek boxes, and a pivot bolt — not a cube.
  • Flange bites the plinth; plinth cap bites the slab; upper column bites the lower; stacked caps are not coplanar (kills doubles/z-fight).
  • Column stays on the origin; only zmin is snapped. world_bbox from live verts. Wood grip added after plinth bevel. Wear noise. 4 flange bolts. Flared nozzle cone.

Round 2 inspection (looked at every PNG): gooseneck is a continuous tube, head reads as a stuffing box, clay silhouette is a pump, plinth planted. Remaining nits: 6-gon cut at the column join, cube cheeks. 2 inspection rounds. Landing-page yes.

Hygiene / joint (live run, all three binaries)

Axis 4.5.11 / 5.1.2 / 5.2.1
tris 1064 / 1064 / 1064 (was 1164)
bbox (0.6100, 0.3820, 1.0520), zmin 0
hygiene all 0
spout_gap 0.00272
flange_gap 0.00600
col_r 0.06200
collider 114
export 97304 / 97304 / 97296

Falsifiers (same code on 4.5.11, 5.1.2, 5.2.1)

Flag Exit Budget
default 0
--skip-decimate 9 LOD1 ratio
--stray-vert 15 loose verts
--lift-z 16 zmin
--float-spout 17 spout-to-column gap
--float-flange 18 flange-to-plinth gap
--skinny-col 19 column radius vs COL_R_LO

Hero: 5.2.1 Cycles, check_framing with no deviation=. fill y=0.844, margins min 0.072. Pillow webp q85.

Evidence

  • Live run: default + every falsifier on .scratch/blender-4.5.11-windows-x64, blender-5.1.2-windows-x64, blender-5.2.1-windows-x64 (5.2.1 reports Blender 5.2.1 LTS). Inspection sheets in .scratch/inspect/round2/ (untracked).
  • Inspection only: gallery HTML alts/witnesses after python scripts/build_gallery.py.
  • Inspection renders were not committed.

Test plan

  • Validate + Socket
  • blender-smoke 5.2 LTS and 4.5 LTS
  • blender-smoke 5.1 after needs-5.1 (REST {\"labels\":[\"needs-5.1\"]})
  • Squash-merge with branch deletion, no --admin
  • Post-merge: release tag, Pages, gallery 200

Made with Cursor

TMHSDigital and others added 3 commits September 19, 2026 08:16
A hypot-length box rotated about its centroid misses one host and punches the other; braces and goosenecks have to be built from the stations they join.

Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Build the brace from named post stations and U-wrap the rail collars so the bay reads as a fence instead of a hypot-box with coplanar straps.

Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the sausage-cylinder gooseneck and cube head with a tube from the column radius and a stuffing-box so the silhouette reads as a pump.

Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.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 19, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 19, 2026
@TMHSDigital
TMHSDigital merged commit 09453f5 into main Sep 19, 2026
13 checks passed
@TMHSDigital
TMHSDigital deleted the fix/showcase-fence-pump-quality branch September 19, 2026 12:24
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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant