Skip to content

Commit ca0c508

Browse files
TMHSDigitalclaude
andcommitted
fix(showcase):
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 7902563 commit ca0c508

4 files changed

Lines changed: 233 additions & 55 deletions

File tree

2.71 KB
Loading

‎showcase/sundial/README.md‎

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
# sundial
22

3-
![A garden sundial: a stepped stone plinth under a tapered octagonal granite column and cap, carrying a bronze dial plate with inked hour lines and a curved-backed gnomon](preview.webp)
3+
![A garden sundial: a stepped stone plinth under a tapered octagonal granite column and cap, carrying a bronze dial plate with Roman numerals and inked hour lines and a triangular gnomon](preview.webp)
44

55
A horizontal garden sundial for 45° north: a stepped stone plinth, a
66
tapered octagonal granite column with a flared foot and collar, a cap, a
7-
bronze dial plate with a bead rim, a curved-backed bronze gnomon, and
8-
twenty-two inked lines laid out by the dial formula. **A showcase piece,
7+
bronze dial plate with a bead rim, a curved-backed bronze gnomon,
8+
twenty inked hour and half-hour lines laid out by the dial formula, two
9+
chapter rings and Roman numerals VII–XI and I–V, each numeral on its own
10+
hour line. Astragal beads ring the column at its foot and under its collar. **A showcase piece,
911
not an example** — it witnesses no API contract. It asserts that generated
1012
geometry meets declared asset budgets, recomputed from the finished mesh.
1113

1214
## What it composes
1315

1416
| Shipped content | Used for |
1517
| --- | --- |
16-
| `skills/mesh-editing-and-bmesh` | frusta, lathed plate and ring, swept ink bars and a lofted gnomon, all in one `bmesh`, chamfered with `bmesh.ops.bevel` |
18+
| `skills/mesh-editing-and-bmesh` | frusta, octagonal astragal beads, lathed plate and rings, swept ink bars and numeral strokes and a lofted gnomon, all in one `bmesh`, chamfered with `bmesh.ops.bevel` |
1719
| `skills/custom-properties` | a face attribute (`StoneTone`) read by the granite shader |
18-
| `skills/procedural-materials-and-shaders` | speckled, mossy granite with a pitted bump; bronze going green in patches; satin ink |
20+
| `skills/procedural-materials-and-shaders` | speckled granite with grime and a low-contrast lichen held to the plinth joints, and a pitted bump; bronze going green in patches; satin ink |
1921
| `skills/bake-high-to-low` | Cycles tangent-space normal bake, a 128-segment high onto the 64-segment low |
2022
| `skills/engine-export-presets` | Unity glTF (`export_yup=True`) |
2123
| `skills/depsgraph-and-evaluated-data` | evaluated triangle counts for the LOD ratios |
@@ -67,20 +69,20 @@ locally (see the cross-version note below).
6769

6870
| Budget | Band | Measured |
6971
| --- | --- | --- |
70-
| Base triangles | 2200–2700 | 2404 |
72+
| Base triangles | 3600–4200 | 3924 |
7173
| LOD1 ratio | 0.32–0.62 | 0.5000 |
7274
| LOD2 ratio | 0.10–0.35 | 0.2196 |
7375
| Material slots | exactly 3, distinct | 3 |
74-
| Stone / bronze / ink faces | ≥ 140 / 430 / 570 | 180 / 507 / 713 |
76+
| Stone / bronze / ink faces | ≥ 240 / 430 / 1300 | 276 / 507 / 1489 |
7577
| UV bounds | inside 0..1 | (0.0011, 0.0011)–(0.9989, 0.9989) |
7678
| UV AABB overlap | ≤ 1e-5 | 0.000000 |
7779
| Outer AABB | 0.600 × 0.600 × 1.010 m ± 0.020 | 0.6000 × 0.6000 × 1.0100 |
7880
| Collider triangles | ≤ 480 | 444 (eight hulls) |
7981
| Normal bake | `{'FINISHED'}` with image data | `{'FINISHED'}`, `has_data=True` |
80-
| glTF export | file written, non-empty | ~208 kB |
82+
| glTF export | file written, non-empty | ~322 kB |
8183
| Hygiene | all zero | loose 0/0, non-manifold 0, zero-area 0, doubles 0, n-gons 0, coplanar cross-shell pairs 0 |
8284
| Grounded AABB | \|zmin\| ≤ 1e-4 | 0.00000 |
83-
| Parts | 6 stone, 1 plate, 1 gnomon, 1 ring, 1 noon, 10 bars, 10 ticks | as stated |
85+
| Parts | 6 stone, 2 beads, 1 plate, 1 gnomon, 2 rings, 1 noon, 10 bars, 10 ticks, 28 numeral strokes | as stated |
8486
| Style angle | 45° ± 0.25° | 45.0000° |
8587
| Hour-line bearings | formula ± 0.10°, radial ± 1° | 0.00001°, 0.0000° |
8688
| Gnomon bite | 2.0–5.0 mm below the plate's top | 3.50 mm |
@@ -102,6 +104,13 @@ Real-world size: a 1.01 m garden sundial. A 0.40 m dial at hip height
102104
foot starts 5 mm into the step, the column 10 mm, so the two bottoms
103105
are not the same plane. Near-right-angle edges are chamfered with
104106
`bmesh.ops.bevel`, `material=` passed so the chamfer keeps the stone slot.
107+
- **Beads.** Two octagonal astragals, a closed (width, height) profile
108+
swept round the shaft's own octagon. The profile is offset from the
109+
column's width at the bead's height, so the inner wall grips 8 mm
110+
inside the taper, and the flat that would sit on the foot (or under the
111+
collar) is buried 3 mm into that block. A bead is told from the stone
112+
blocks as the only stone shell shallower than the cap; the part budget
113+
asserts there are two.
105114
- **Plate.** One lathe about Z: a flat field, a bead rim, a bevelled
106115
outer edge and an underside that sits 4 mm into the cap. 64 segments;
107116
the high mesh is 128.
@@ -114,10 +123,24 @@ Real-world size: a 1.01 m garden sundial. A 0.40 m dial at hip height
114123
- **Ink.** Every line is a keeled hexagon swept along its bearing: a
115124
ridge 2.0 mm proud of the plate, a keel 2.5 mm buried. A ridge and a keel
116125
keep the tops and the bottoms of twenty lines from being one plane.
117-
The noon arrow is the exception: a flat-topped, chamfered prism.
126+
The noon arrow is the exception: a flat-topped, chamfered prism. Hour
127+
lines run 60–127 mm out and end in an inner chapter ring at 128.5 mm;
128+
the numerals stand between it and the outer ring at 166.5 mm.
129+
- **Numerals.** Each Roman numeral is a set of strokes in the same keeled
130+
section, laid out in glyph space (across, up) and mapped to the dial so
131+
a glyph point goes to bearing `φ + u / r_mid`. A constant angular offset
132+
keeps every I on its own radius, so the three strokes of a III are not
133+
parallel planes side by side, and their end caps are not one plane.
134+
The two strokes of a V cross just above the point instead of sharing a
135+
vertex, which would be a double. Glyph up is outward. The numerals move
136+
with the lines under `--linear-hours`. XII is left to the noon arrow.
137+
The part budget counts the strokes in the numeral band (131–161 mm by
138+
centroid) against the strokes the glyphs call for; numeral bearings are
139+
not separately asserted, since the hour lines they stand on are.
118140
- **Collider.** One hull per stone block, one for the gnomon, and one for
119141
the plate taken over every fourth segment. The ink is left out: it is a
120-
couple of millimetres of relief on a surface the plate hull covers.
142+
couple of millimetres of relief on a surface the plate hull covers. So
143+
are the beads: 17 mm of moulding round a shaft the column hull covers.
121144

122145
## Findings the budgets forced
123146

@@ -133,6 +156,12 @@ Real-world size: a 1.01 m garden sundial. A 0.40 m dial at hip height
133156
stations are gone.
134157
- **Collider.** Hulls over chamfered stone are heavier than they look; the
135158
foot took the compound from 388 to 444 triangles.
159+
- **Coplanar by coincidence.** Widening the numerals put one stroke of
160+
the IX's X on the same plane as the end cap of the 10:30 tick, 44 mm
161+
away: three pairs, exit 15. The X is now 10.4 mm wide, not 11.
162+
- **A gnomon seen edge-on is a needle.** The hero first turned the piece
163+
−28°, which put the camera 62° off the gnomon's face, and the fin read
164+
as a stick. The still now turns it −58°.
136165

137166
## Conventions walked
138167

@@ -147,9 +176,9 @@ Every convention in `showcase/README.md`, and whether it applies here.
147176
| A member is tenoned into its seat | yes | each stone part into its host; the gnomon 3.5 mm into the plate (`--float-gnomon`) |
148177
| Seat conformance (a band: minimum so it cannot float) | yes | the gnomon bite and every ink line's proud and buried depth (`--float-gnomon`, `--float-lines`) |
149178
| Mirrored assemblies | partly | the gnomon and noon arrow are centred on the meridian; asserted as one centroid offset (`--shift-noon`) |
150-
| Material face floors | yes | stone 140, bronze 430, ink 570 |
179+
| Material face floors | yes | stone 240, bronze 430, ink 1300 |
151180
| One substance, one slot | yes | granite, bronze, ink |
152-
| Shading is part of the model | yes | stone and gnomon faceted (dressed stone, a bronze plate); the lathed plate and ring smooth, every edge over 35° hard |
181+
| Shading is part of the model | yes | stone, beads and gnomon faceted (dressed stone, a bronze plate); the lathed plate and both rings smooth, every edge over 35° hard |
153182
| Edge treatment | partly | chamfered, but no separate budget: removing the chamfers moves the triangle band first |
154183
| Sort bmesh operator inputs | yes | the bevel's edge list is sorted by index |
155184
| The bake cage is narrower than the nearest neighbour | yes | `CAGE_EXTRUSION` 0.01 m |
@@ -229,10 +258,10 @@ a ratio band.
229258

230259
| Value | 5.2.1 |
231260
| --- | --- |
232-
| Base triangles | 2404 |
233-
| LOD1 / LOD2 tris | 1202 / 528 |
234-
| Face counts (stone / bronze / ink) | 180 / 507 / 713 |
261+
| Base triangles | 3924 |
262+
| LOD1 / LOD2 tris | 1962 / 862 |
263+
| Face counts (stone / bronze / ink) | 276 / 507 / 1489 |
235264
| Outer AABB | 0.6000 × 0.6000 × 1.0100 |
236265
| Collider tris | 444 |
237266
| Style angle | 45.0000° |
238-
| glTF bytes | 208060 |
267+
| glTF bytes | 321636 |

‎showcase/sundial/preview.webp‎

2.31 KB
Loading

0 commit comments

Comments
 (0)