Skip to content

Commit b21a221

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add ships-wheel piece
A one-metre, eight-spoke ship's wheel on a pedestal. Turned teak spokes and handles run to a laminated rim with a 10 mm brass inlay. Brass ferrules sit where the handles leave the rim, and the king spoke has a second ring. The brass nave turns on an iron shaft in a bolted brass collar, over a panelled teak column on a stepped plinth. Radial witnesses, measured off the finished mesh: - the nave is 0.0001 mm off the rim's centre; - the shaft is 0.0004 mm off the nave's axis, with 0.599 mm of bore clearance; - every spoke is seated 3.000 mm into the rim and every handle 4.000 mm; - spoke spacing is within 0.00013 degrees of k*45, and every handle is within 0.00007 degrees of its spoke's axis. Budgets: 9188 tris. The teak face floor is 2800. LOD1 is 4594 tris; LOD2 is 2020 on 4.5.11 and 5.1.2 and 2014 on 5.2.1, which is why LOD is checked as a ratio band. The Unity glTF is about 697 kB. Hygiene is all zero, with no coplanar faces between shells. Falsifiers: 21 runs on Blender 4.5.11 LTS, 5.1.2 and 5.2.1 LTS (.scratch binaries). Each one exits its own code, and the default run exits 0 on all three. --skip-decimate 9 LOD1 ratio 1.0 --stray-vert 15 one loose vert --lift-z 16 zmin 50 mm --offset-hub 17 nave 2 mm off the rim centre --short-spoke 18 spoke tip 7 mm short of the rim --skew-spoke 19 one spoke 2 degrees off its spacing Asset quality is remapped to exit 21, because 11 is this piece's collider code. Review pass: - The first render's teak read as regular stripes. - Grain now follows each member's long axis through a GrainCo attribute. The rings are irregular, a fine fibre layer sits over them, and each member gets its own tone. - The column's three panelled faces now read at hero distance. Gates: - Framing: pass (fill y 0.778). Asset quality: pass (edge90 0.079). - Contact sheet: luma 0.251, stage 0.243, warmth -0.053, saturation 0.191, all in family. - Asset sheet: pass. The wheel is not the least-designed object in the reference lineup. - gallery.json gives the piece the display title "Ship's Wheel". - scripts/asset_sheet.py gains the WheelLow SELECT row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 8da2354 commit b21a221

91 files changed

Lines changed: 4785 additions & 159 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@
216216
"showcase/toboggan",
217217
"showcase/sundial",
218218
"showcase/mine-cart",
219-
"showcase/garden-gate"
219+
"showcase/garden-gate",
220+
"showcase/ships-wheel"
220221
]
221222
}

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ classifies it as a `cursor-plugin`. This is content the AI loads when the user
2121
asks Blender questions or works on Blender add-ons in Cursor or Claude Code.
2222

2323
The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 64
24-
examples, and 74 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 75 showcase pieces (counts are CI-enforced against README.md)
2525
and the manifest). The full inventory tables and per-item purposes live in
2626
`CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`;
2727
showcase conventions: `showcase/README.md`. The render look is specified

‎CLAUDE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ rules/<rule-name>.mdc - Anti-pattern rules, 9 total
2222
templates/<template-name>/ - Starter projects, 3 total
2323
snippets/<snippet-name>.py - Standalone code patterns, 27 total
2424
examples/<name>/ - Runnable smoke-gated examples, 64 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 74 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 75 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
2626
scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json
2727
scripts/site/ - Vendored landing-page build (Jinja2); tokens.css is the shared palette
2828
tests/check_site_links.py - Internal link/anchor/alt gate over the built site (docs/)

‎README.md‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</p>
1919

2020
<p align="center">
21-
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>64 examples</strong> &nbsp;&bull;&nbsp; <strong>74 showcase pieces</strong>
21+
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>64 examples</strong> &nbsp;&bull;&nbsp; <strong>75 showcase pieces</strong>
2222
</p>
2323

2424
<p align="center">
@@ -37,7 +37,7 @@
3737

3838
## Overview
3939

40-
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 74 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40+
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 75 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4141

4242
The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
4343

@@ -106,7 +106,7 @@ per-script exit-code model, are in
106106
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).
107107

108108
<details>
109-
<summary><strong>74 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>75 showcase pieces</strong> — click to expand the preview grid</summary>
110110

111111
<p align="center">
112112
<a href="showcase/shipping-crate/"><img src="showcase/shipping-crate/preview.webp" width="24%" alt="Shipping crate: a wooden slat crate stencilled PORT ROYAL and NO 17, with iron corner brackets and an end handle, on a dark studio floor, warm wedge on the back wall" /></a>
@@ -183,6 +183,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
183183
<a href="showcase/sundial/"><img src="showcase/sundial/preview.webp" width="24%" alt="Sundial: a garden sundial with a stepped stone plinth, a tapered octagonal granite column and cap, and a bronze dial plate with hour lines, a Roman-numeral chapter ring and a triangular gnomon, on a dark studio floor" /></a>
184184
<a href="showcase/mine-cart/"><img src="showcase/mine-cart/preview.webp" width="24%" alt="Mine cart: a rust-streaked riveted red steel tub on oak sills, four flanged iron wheels resting on two polished rails spiked to sleepers in grey ballast, on a dark studio floor" /></a>
185185
<a href="showcase/garden-gate/"><img src="showcase/garden-gate/preview.webp" width="24%" alt="Garden gate: a bow-topped gate of weathered oak boards standing ajar on black strap hinges between square posts on sandstone flags, on a dark studio floor" /></a>
186+
<a href="showcase/ships-wheel/"><img src="showcase/ships-wheel/preview.webp" width="24%" alt="Ship's wheel: a varnished teak eight-spoke wheel with turned handles, a brass nave and a brass rim inlay, on a panelled teak pedestal with a stepped plinth, on a dark studio floor" /></a>
186187
</p>
187188

188189
[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
@@ -321,6 +322,8 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
321322

322323
[`garden-gate`](showcase/garden-gate/) — procedural ledged-and-braced garden gate on hook-and-band hinges through the same pipeline; every knuckle measured coaxial on its pin, both pins on one plumb axis, and the swing circle clearing the latch post. Falsifiers `--skip-decimate` exits 9, `--offset-knuckle` exits 17, `--lift-gate` exits 18, `--tilt-pintle` exits 19, `--tight-post` exits 20.
323324

325+
[`ships-wheel`](showcase/ships-wheel/) — procedural eight-spoke ship's wheel on its pedestal, turned teak spokes and handles on a brass nave, through the same pipeline; nave concentric with the rim, every spoke and handle seated in the rim, spokes 45° apart. Falsifiers `--skip-decimate` exits 9, `--stray-vert` exits 15, `--lift-z` exits 16, `--offset-hub` exits 17, `--short-spoke` exits 18, `--skew-spoke` exits 19.
326+
324327
</details>
325328

326329
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
146146
- ~~Mine cart on a rail segment as a game-prop showcase piece~~ **SHIPPED** as `showcase/mine-cart/` — riveted steel tub on four flanged wheels over 30 lb rails, spiked sleepers and ballast; every tread seated within −1.5..+0.5 mm of its railhead (`--float-wheel` exits 18), axles square (`--skew-axle` exits 19), flanges 3–10 mm clear of the railheads (`--wide-gauge` exits 20); `--skip-decimate` exits 9 on the LOD1 ratio band
147147
- ~~Hinged garden gate as a game-prop showcase piece~~ **SHIPPED** as `showcase/garden-gate/` — ledged-and-braced oak gate on hook-and-band hinges: knuckle axis on pin axis (0.000 mm, 0.600 mm clearance), knuckle seat on the hook, both pins plumb on one axis, swing circle clearing the latch post by 14.87 mm; `--skip-decimate` exits 9 on the LOD1 ratio band, `--offset-knuckle` 17, `--lift-gate` 18, `--tilt-pintle` 19, `--tight-post` 20
148148
- Mooring bollard with a coiled rope as a game-prop showcase piece — rope turns laid as stacked helices around the barrel: each turn resting on the one below (not interpenetrating, not floating), measured turn-to-turn off the mesh
149-
- Ship's wheel as a game-prop showcase piece — spokes and handles by exact radial repetition: equal angular spacing, every spoke end seated in the rim, hub/rim concentric, handles on the computed radius
149+
- ~~Ship's wheel as a game-prop showcase piece~~ **SHIPPED** as `showcase/ships-wheel/` — eight turned teak spokes and handles on a brass nave, laminated rim with a brass inlay, iron shaft in a bolted brass collar on a panelled pedestal; nave concentric with the rim and the shaft in its bore (`--offset-hub` exits 17), every spoke and handle seated 1–6 mm into the rim (`--short-spoke` exits 18), spokes 45° ± 0.05° apart with handles on their axes (`--skew-spoke` exits 19); `--skip-decimate` exits 9 on the LOD1 ratio band
150150
- Sawhorse pair carrying a plank as a game-prop showcase piece — splayed legs and a board spanning two supports: the plank's underside rests on both saddles within a band (a two-support span, not a single seat) and every foot lands on the floor
151151
- Tiered stone fountain as a game-prop showcase piece — concentric basins on a column: every basin coaxial, each upper basin's lip overhanging the one below by a stated band so the overflow line lands inside the next basin
152152
- Cannon on a wooden field carriage as a game-prop showcase piece — trunnions seated in the carriage's cap-square cradles: trunnion axis coaxial with both cradles and wheels resting on the ground at the axle's computed height

‎docs/gallery/anvil/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Anvil</h1>
4545
<p>A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 74 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it.">
5050
<img src="../assets/anvil-hero.webp" alt="A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3571,7 +3571,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
35713571
</article>
35723572
</div>
35733573
</section>
3574-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 74 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
3574+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 75 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
35753575
</main>
35763576
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
35773577
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

‎docs/gallery/apothecary-shelf/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Apothecary Shelf</h1>
4545
<p>A procedural apothecary shelf — housed shelves, gallery rails, a drawer bank and an arched crest, stocked with fifteen lathed bottles, flasks and glazed jars, each corked or lidded and labelled — carried through UVs, bake, LOD, convex collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 74 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars.">
5050
<img src="../assets/apothecary-shelf-hero.webp" alt="A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3420,7 +3420,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
34203420
</article>
34213421
</div>
34223422
</section>
3423-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 74 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
3423+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 75 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
34243424
</main>
34253425
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
34263426
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

‎docs/gallery/archery-target/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Archery Target</h1>
4545
<p>A procedural archery range target on a turf patch — a 1.10 m compressed-straw boss coiled from rope courses that show on its back and round its edge, bound with doubled jute twine drawn tight over the crests; an 80 cm ten-zone World Archery face in aged inks with ring lines, an X ring and a printed X, held by four target pins; a timber easel leaning it back 12° on toe skids with knee braces, a ledge with a stop lip on a bolted rail and gussets, a numbered butt board, a strap hinge pinned to a rear leg in a steel ferrule and foot, and a splay chain between eye bolts; five carbon arrows in the face with cresting, nocks and three vanes, one glancing into the straw edge, one snapped with its fletched half on the grass, and a leather quiver of arrows lying among grass tufts — through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 74 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below.">
5050
<img src="../assets/archery-target-hero.webp" alt="A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -5266,7 +5266,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
52665266
</article>
52675267
</div>
52685268
</section>
5269-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 74 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
5269+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 75 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
52705270
</main>
52715271
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
52725272
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>
56 KB
Loading
7.62 KB
Loading

0 commit comments

Comments
 (0)