@@ -51,6 +51,7 @@ entry in `showcase/gallery.json`, and a rendered still.
5151 (exit 19). ` --float-rivets ` lifts fasteners off their host (exit 18).
5252 ` --round-haft ` turns an oval section round (exit 19).
5353 ` --float-nails ` lifts nail heads off their strap (exit 18).
54+ ` --short-mortar ` stops every mortar joint shy of its stones (exit 18).
5455 ` --sharp-iron ` skips a chamfer pass so the edge-treatment budget fails
5556 (file-local code; ` crate-stack ` uses 21).
5657 A budget with no falsifier witnesses nothing:
@@ -324,6 +325,26 @@ entry in `showcase/gallery.json`, and a rendered still.
324325 threshold taken from the plate (` IRON_WRAP * 0.5 ` ), not from the
325326 fastener: a yawed 10 mm head has a world AABB wider than 10 mm, and a
326327 fixed 10 mm threshold silently dropped 8 of 48 nails.
328+ - ** A joint is filled, not open (exit 18).** Masonry, brick and
329+ stacked-stone pieces separate their blocks with a named joint, and a
330+ joint left as air is a stack of floating blocks with daylight through
331+ every course. ` stone-archway ` shipped that way: 7 mm bed joints and
332+ 9.7 mm voussoir joints, none of them touching. Fill each joint with its
333+ own mortar shell, sized from the two blocks it sits between, recessed
334+ behind their faces by more than the chamfer so it reads as a raked
335+ joint, and biting a named depth into both. Assert every mortar shell
336+ BVH-overlaps ** exactly two** stones — one means a bed left hanging,
337+ none means the air gap came back. Keep the mortar shells out of any
338+ classifier that names stone parts; left in, a bed classifies as a
339+ course and every downstream stone budget measures the wrong
340+ neighbour. Add mortar after the chamfer pass, unchamfered: a 6 mm
341+ chamfer on a 10 mm bed eats it.
342+ - ** Stone is not noise stretched over a block.** A noise-driven colour
343+ mix sampled so its features streak read as wood grain on
344+ ` stone-archway ` at hero scale. Stone wants isotropic object-space
345+ mottling, fine speckle driving roughness and a small bump, and a
346+ seeded tone per block as a face attribute so no two stones match.
347+ Chain a baked normal map * under* that bump rather than replacing it.
327348- ** Identical boards read as CG.** Planks cut from one material are one
328349 plank repeated. Give each shell a seeded tone and its own grain
329350 direction — its long axis, recovered from its vertices — as face
0 commit comments