Skip to content

Commit 294dcc5

Browse files
TMHSDigitalclaude
andcommitted
fix(showcase): mine-cart quality pass: per-member timber grain, worn paint, ore load, even rail rust
- Each timber member gets its own grain direction, with rings, fibre and checks. This replaces the woven crosshatch. - The tub's paint is sun-faded, chipped to bare steel at the rim and foot, and lightly dented. - A heaped ore load fills the tub, with lumps and hematite faces, and is included in the collider. - The rails get even fine rust under a continuous polished running band. The wheels get dull iron with bright worn treads. - Envelope height is now 1.152 m and tris 13396 (band 12600-14200). Wheel and rail contacts are unchanged. - 21-run falsifier matrix on 4.5.11 / 5.1.2 / 5.2.1, every run on its declared code. The default re-runs after the iron revision. - Framing, asset quality and the asset sheet pass. Contact sheet: luma 0.235, stage 0.220, saturation 0.173. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 1c85142 commit 294dcc5

8 files changed

Lines changed: 711 additions & 128 deletions

File tree

1.13 KB
Loading
1.39 KB
Loading
10.3 KB
Loading
2.06 KB
Loading

‎docs/gallery/mine-cart/index.html‎

Lines changed: 445 additions & 65 deletions
Large diffs are not rendered by default.

‎showcase/mine-cart/README.md‎

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# mine-cart
22

3-
![A narrow-gauge mine cart: a riveted red-oxide steel tub with a rolled lip on timber sills, four flanged iron wheels resting on two polished railheads, spiked to four sleepers in a bed of grey ballast](preview.webp)
3+
![A narrow-gauge mine cart: a riveted red-oxide steel tub heaped with dark ore, with a rolled lip, on timber sills, four flanged iron wheels resting on two polished railheads, spiked to four sleepers in a bed of grey ballast](preview.webp)
44

55
A narrow-gauge mine cart on a rail segment: a riveted steel tub with a
66
rolled lip, a base strap, ten stiffener ribs and an iron grab bar on each
7-
end, carried on two timber sills and two buffer beams with a coupling ring
8-
at each end; four flanged wheels on two axles running in four iron axle
7+
end, heaped with a load of iron ore, carried on two timber sills and two
8+
buffer beams with a coupling ring at each end; four flanged wheels on two axles running in four iron axle
99
boxes; and the track it stands on, two 30 lb rails on tie plates, held by
1010
dog spikes to four sleepers bedded in ballast. **A showcase piece, not an
1111
example** — it witnesses no API contract. It asserts that generated
@@ -16,8 +16,8 @@ geometry meets declared asset budgets, recomputed from the finished mesh.
1616
| Shipped content | Used for |
1717
| --- | --- |
1818
| `skills/mesh-editing-and-bmesh` | lathed wheels and rivets, swept rail sections, rolled lip, base strap, grab bars and coupling rings, chamfered boxes, all in one `bmesh`, chamfered with `bmesh.ops.bevel` |
19-
| `skills/custom-properties` | face attributes read back by the audits (`Part`) and the shaders (`WoodTone`, `Grime`) |
20-
| `skills/procedural-materials-and-shaders` | red-oxide paint with run-off rust and a dusty inside; mill-scaled iron with the railheads and treads polished where they run; creosoted sleepers and weathered oak; two sizes of crushed-stone ballast |
19+
| `skills/custom-properties` | face attributes read back by the audits (`Part`) and the shaders (`WoodTone`, `Grime`, `Ore`); a per-vertex `GrainCo` vector that gives each timber member its own grain space |
20+
| `skills/procedural-materials-and-shaders` | red-oxide paint, sun-faded toward the rim, chipped to bare steel at the rim and foot, with run-off rust and shallow dents; mill-scaled iron with crisp rust scabs and the railheads and treads polished where they run; creosoted sleepers and weathered oak whose growth rings, fibre and drying checks follow each member's long axis; two sizes of crushed-stone ballast, and fist-sized ore lumps with hematite-red faces and the odd glint |
2121
| `skills/bake-high-to-low` | Cycles tangent-space normal bake, the 48-segment wheels onto the 24-segment low |
2222
| `skills/engine-export-presets` | Unity glTF (`export_yup=True`) |
2323
| `skills/depsgraph-and-evaluated-data` | evaluated triangle counts for the LOD ratios |
@@ -59,17 +59,17 @@ mesh.
5959

6060
| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) |
6161
| --- | --- | --- |
62-
| Base triangles | 11500–13200 | 12334 / 12334 / 12334 |
63-
| LOD1 ratio | 0.32–0.62 | 0.4999 / 0.4999 / 0.4999 |
64-
| LOD2 ratio | 0.10–0.35 | 0.2199 / 0.2199 / 0.2118 |
62+
| Base triangles | 12600–14200 | 13396 / 13396 / 13396 |
63+
| LOD1 ratio | 0.32–0.62 | 0.5000 / 0.5000 / 0.5000 |
64+
| LOD2 ratio | 0.10–0.35 | 0.2199 / 0.2199 / 0.2125 |
6565
| Material slots | exactly 4, distinct | 4 / 4 / 4 |
66-
| Steel / iron / timber / ballast faces | ≥ 700 / 4400 / 180 / 550 | 816 / 5104 / 208 / 622 on all three |
66+
| Steel / iron / timber / ballast faces | ≥ 700 / 4400 / 180 / 1150 | 816 / 5104 / 208 / 1228 on all three |
6767
| UV bounds | inside 0..1 | (0.0005, 0.0005)–(0.9995, 0.9995) |
6868
| UV AABB overlap | ≤ 1e-5 | 0.000000 |
69-
| Outer AABB | 2.400 × 1.500 × 1.048 m ± 0.020 | 2.4000 × 1.5000 × 1.0481 on all three |
70-
| Collider triangles | ≤ 1700 | 1532 (13 hulls) on all three |
69+
| Outer AABB | 2.400 × 1.500 × 1.152 m ± 0.020 | 2.4000 × 1.5000 × 1.1516 on all three |
70+
| Collider triangles | ≤ 1700 | 1570 (13 hulls) on all three |
7171
| Normal bake | `{'FINISHED'}` with image data | `{'FINISHED'}`, `has_data=True` |
72-
| glTF export | file written, non-empty | 990544 bytes on all three |
72+
| glTF export | file written, non-empty | 1073556 bytes on all three |
7373

7474
### Hygiene
7575

@@ -104,7 +104,8 @@ mesh.
104104

105105
Real-world size: a 600 mm (24 in) gauge tub on 30 lb rail, the common
106106
narrow-gauge mining track. The tub is 1.30 × 0.85 m at the lip and its top
107-
stands 1.05 m above the ground, 0.84 m above the rail, inside the range
107+
stands 1.05 m above the ground, 0.84 m above the rail (the heaped ore
108+
crowns at 1.15 m), inside the range
108109
IS 8066 gives for 600 mm gauge mine cars; 0.36 m wheels on a 0.60 m
109110
wheelbase.
110111

@@ -132,9 +133,21 @@ wheelbase.
132133
to the outside; the base strap a chamfered band round the foot of the
133134
walls. Ten ribs follow the leaning walls, 3 mm into them, four rivets
134135
each; more rivets run along the strap. Each end carries a round grab bar.
136+
- **Load.** A heap of ore: six concentric rings inside the rim, its edge
137+
50 mm below the lip and 6 mm clear of the inner skin, rising to a
138+
lumpy crown 0.15 m above that (each ring jittered ±16 mm by the fixed
139+
hash), closed underneath by a skirt that draws in with the leaning walls
140+
so it never touches them. Its own shell, in the ballast slot, marked by
141+
the `Ore` face attribute.
142+
- **Surfaces.** Every timber member stamps `GrainCo`, its own (across,
143+
across, along) coordinates with the pith set 0.12–0.30 m off the piece,
144+
so growth rings show as flat-sawn arches on the long faces and as arcs
145+
on the ends, and fibre and drying checks run with the member, never
146+
across it. The first pass read the grain in object space, squeezed along
147+
Z: horizontal members showed it as a woven crosshatch.
135148
- **Collider.** A hull per wheel, rail and sleeper, the ballast's
136-
shoulders (its jittered top only adds faces), the tub with its lip and
137-
ribs, and the frame. Plates, spikes, rivets and rings are left out:
149+
shoulders (its jittered top only adds faces), the tub with its lip, ribs
150+
and the ore's crown, and the frame. Plates, spikes, rivets and rings are left out:
138151
millimetres of relief on surfaces a hull already covers.
139152

140153
## Findings the budgets forced
@@ -160,10 +173,10 @@ wheelbase.
160173
| A member is tenoned into its seat | yes | rails into plates into sleepers into ballast, spikes into sleepers, boxes into sills, tub into sills, axles into hubs, ribs into walls |
161174
| Seat conformance (a band: minimum so it cannot float) | yes | every wheel's tread on its railhead (`--float-wheel`) |
162175
| Mirrored assemblies | yes | wheel sets measured pairwise: squareness and clearance per wheel |
163-
| Material face floors | yes | steel 700, iron 4400, timber 180, ballast 550 |
176+
| Material face floors | yes | steel 700, iron 4400, timber 180, ballast 1150 |
164177
| One substance, one slot | yes | painted steel, iron, timber, ballast |
165178
| Shading is part of the model | yes | wheels, axles, rivets, grab bars and rings smooth, every edge over 35° hard; boxes faceted |
166-
| Edge treatment | yes | sleepers, plates, spike heads, sills, beams, boxes, ribs chamfered; the right-angle edge fraction is 0.083 |
179+
| Edge treatment | yes | sleepers, plates, spike heads, sills, beams, boxes, ribs chamfered; the right-angle edge fraction is 0.077 |
167180
| Sort bmesh operator inputs | yes | the bevel's edge list is sorted by index |
168181
| The bake cage is narrower than the nearest neighbour | yes | `CAGE_EXTRUSION` 0.01 m |
169182
| Level on the stage; stage 60 m | yes | turned about Z only; 60 m floor and wall |

0 commit comments

Comments
 (0)