Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/gallery/anvil/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ <h1>Anvil</h1>
<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" />
</button>
<p class="zoom-hint">Rendered headless by the showcase piece itself. Select it to enlarge.</p>
<div class="callout"><span class="tag">witnesses</span> Recomputed: 3168 tris, two materials with 1040 wood and 912 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.621×0.414×0.569 m, LOD ratios in band, convex collider 134 tris, hygiene 0, 16 grounded staves, hoop bite 0.003 m, foot-on-head gap 0.003 m, waist corner reach 0.8572, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-staves 16; --float-anvil 17; --round-band 18; --round-waist 19.</div>
<div class="callout"><span class="tag">witnesses</span> Recomputed: 3168 tris, two materials with 1040 wood and 912 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.621×0.414×0.569 m, LOD ratios in band, convex collider 130 tris, hygiene 0, 16 grounded staves, hoop bite 0.003 m, foot-on-head gap 0.003 m, waist corner reach 0.8572, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-staves 16; --float-anvil 17; --round-band 18; --round-waist 19.</div>
<p class="taglist"><span class="tag">category</span> <a href="../#k=showcase&amp;c=village">Village</a></p>
<p class="taglist"><span class="tag">tags</span> <a href="../#tag=mesh">mesh</a> <a href="../#tag=export">export</a> <a href="../#tag=showcase">showcase</a></p>
<div class="runline">
Expand All @@ -68,7 +68,7 @@ <h1>Anvil</h1>
<p><strong>Composes</strong> skills <code>mesh-editing-and-bmesh</code>, <code>bake-high-to-low</code>, <code>depsgraph-and-evaluated-data</code>, <code>engine-export-presets</code>, and snippets <code>bake_normal_high_to_low.py</code>, <code>setup_bake_target_image.py</code>, <code>lod_chain.py</code> / <code>decimate_to_budget.py</code>, <code>convex_hull_collider.py</code>, <code>export_preset_unity.py</code> (helpers copied, not imported as a package).</p>
<h2 id="budgets">Budgets<a class="anchor" href="#budgets" aria-label="Link to this section">#</a></h2>
<p>Declared as named constants; every gate <strong>recomputes</strong> from the mesh, materials, UVs, evaluated LOD, collider, or export file.</p>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (4.5.11 / 5.1.2 / 5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>2500–4500</td><td>3168 / 3168 / 3168</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000 / 0.5000 / 0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2197 / 0.2197 / 0.2197</td></tr><tr><td>Materials</td><td>exactly 2 distinct; ≥400 wood, ≥400 metal faces</td><td>2 slots; 1040 / 912</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(0.621, 0.414, 0.569) m ± 0.015</td><td>(0.6210, 0.4137, 0.5690), zmin 0</td></tr><tr><td>Collider tris</td><td>≤ 280</td><td>134</td></tr><tr><td>Export</td><td>written, size &gt; 0</td><td>257068 / 257068 / 257052 bytes</td></tr></tbody></table></div>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (4.5.11 / 5.1.2 / 5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>2500–4500</td><td>3168 / 3168 / 3168</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000 / 0.5000 / 0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2197 / 0.2197 / 0.2197</td></tr><tr><td>Materials</td><td>exactly 2 distinct; ≥400 wood, ≥400 metal faces</td><td>2 slots; 1040 / 912</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(0.621, 0.414, 0.569) m ± 0.015</td><td>(0.6210, 0.4137, 0.5690), zmin 0</td></tr><tr><td>Collider tris</td><td>≤ 280</td><td>130</td></tr><tr><td>Export</td><td>written, size &gt; 0</td><td>258408 / 258408 / 258400 bytes (4.5.11 / 5.1.2 / 5.2.1)</td></tr></tbody></table></div>
<p>Base triangles dropped from <strong>6616 to 2988</strong> in the quality pass: overlapping face boxes and a beveled superellipse horn became one slotted slab plus a circular oval loft. Hidden coincident faces were the waste.</p>
<p>DECIMATE COLLAPSE triangle counts are <strong>not</strong> identical across series — the gate is a ratio band, not an exact count. Bake pixels are stochastic; the gate is <code>has_data</code> plus operator <code>FINISHED</code>, not byte-identity. Stave-width jitter uses fixed seed 17, and the per-piece wood tone its own seed. Export byte counts differ on 5.2.1 (glTF serializer), not a gated axis.</p>
<h3 id="hygiene">Hygiene<a class="anchor" href="#hygiene" aria-label="Link to this section">#</a></h3>
Expand Down
4 changes: 2 additions & 2 deletions docs/gallery/archery-target/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ <h1>Archery Target</h1>
<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" />
</button>
<p class="zoom-hint">Rendered headless by the showcase piece itself. Select it to enlarge.</p>
<div class="callout"><span class="tag">witnesses</span> Recomputed: 42908 tris, sixteen materials with 4732 straw, 1856 twine, 1086 pine, 6288 steel, 522 white, 816 black, 128 blue, 128 red, 254 gold, 326 carbon, 500 vane, 300 cock-vane, 1076 nock, 5230 grass, 286 soil and 768 leather faces, UVs in 0..1 with zero AABB overlap, outer AABB 2.007×2.689×2.054 m, zmin 0 with both skids and the rear tread bedded 2.0 mm into the turf (band 1–4 mm), hygiene 0 including zero coplanar cross-shell pairs, the hinge pin 0.000 mm off the axis of all three knuckles (tol 0.3 mm), the boss seated 2.5 mm into its ledge and leaning 2.0 mm on both legs (bands 1–4 mm), the gold centre 1.3000 m above the turf (World Archery 1.30 ± 0.05) on a 1.100 × 0.280 m boss and a 0.800 m face tilted 12.000° (band 10–15°), seven points buried 0.119–0.149 m in the straw (band 0.08–0.20) with straw left ahead, every vane at least 0.419 m clear of the boss (min 0.25), ten fletched shafts with three vanes each within 0.002° of 120° (tol 1°), all ten ring lines on the 4 cm scoring table (0.000 mm off, tol 0.5 mm) in the right inks, a 73.85 kg stand and boss whose mass centre is 0.349 m inside its supports with a forward tip angle of 27.83° (min 20°), one connected assembly of 722 shells, LOD ratios in band, collider 1083 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-foot 16; --offset-hinge 17; --lift-boss 18; --high-boss 19; --shallow-arrow 20; --short-arrow 21; --skew-vane 22; --wide-gold 23; --short-skids 24; --loose-pin 25.</div>
<div class="callout"><span class="tag">witnesses</span> Recomputed: 42908 tris, sixteen materials with 4732 straw, 1856 twine, 1086 pine, 6288 steel, 522 white, 816 black, 128 blue, 128 red, 254 gold, 326 carbon, 500 vane, 300 cock-vane, 1076 nock, 5230 grass, 286 soil and 768 leather faces, UVs in 0..1 with zero AABB overlap, outer AABB 2.007×2.689×2.054 m, zmin 0 with both skids and the rear tread bedded 2.0 mm into the turf (band 1–4 mm), hygiene 0 including zero coplanar cross-shell pairs, the hinge pin 0.000 mm off the axis of all three knuckles (tol 0.3 mm), the boss seated 2.5 mm into its ledge and leaning 2.0 mm on both legs (bands 1–4 mm), the gold centre 1.3000 m above the turf (World Archery 1.30 ± 0.05) on a 1.100 × 0.280 m boss and a 0.800 m face tilted 12.000° (band 10–15°), seven points buried 0.119–0.149 m in the straw (band 0.08–0.20) with straw left ahead, every vane at least 0.419 m clear of the boss (min 0.25), ten fletched shafts with three vanes each within 0.002° of 120° (tol 1°), all ten ring lines on the 4 cm scoring table (0.000 mm off, tol 0.5 mm) in the right inks, a 73.85 kg stand and boss whose mass centre is 0.349 m inside its supports with a forward tip angle of 27.83° (min 20°), one connected assembly of 722 shells, LOD ratios in band, collider 634 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-foot 16; --offset-hinge 17; --lift-boss 18; --high-boss 19; --shallow-arrow 20; --short-arrow 21; --skew-vane 22; --wide-gold 23; --short-skids 24; --loose-pin 25.</div>
<p class="taglist"><span class="tag">category</span> <a href="../#k=showcase&amp;c=sports">Sports</a></p>
<p class="taglist"><span class="tag">tags</span> <a href="../#tag=mesh">mesh</a> <a href="../#tag=export">export</a> <a href="../#tag=showcase">showcase</a></p>
<div class="runline">
Expand All @@ -70,7 +70,7 @@ <h1>Archery Target</h1>
<p>Intended size: 2.01 m across the turf patch, 2.69 m front to back, 2.05 m to the top of the front legs. The turf sets the width and depth, the leg tops the height. The centre of the gold stands 1.30 m above the turf, the World Archery height.</p>
<h2 id="budgets">Budgets<a class="anchor" href="#budgets" aria-label="Link to this section">#</a></h2>
<p>Every budget is declared as a named constant. Every gate <strong>recomputes</strong> its value from the mesh, materials, UVs, evaluated LOD, collider, or export file.</p>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>42000–44000</td><td>42908</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2200</td></tr><tr><td>Materials</td><td>exactly 16 distinct; ≥4490 straw, ≥1760 twine, ≥1030 pine, ≥5970 steel, ≥495 white, ≥775 black, ≥120 blue, ≥120 red, ≥240 gold, ≥310 carbon, ≥475 vane, ≥285 cock vane, ≥1020 nock, ≥4960 grass, ≥270 soil, ≥730 leather faces</td><td>16 slots; 4732 / 1856 / 1086 / 6288 / 522 / 816 / 128 / 128 / 254 / 326 / 500 / 300 / 1076 / 5230 / 286 / 768</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(2.0071, 2.6887, 2.0538) m ± 0.01</td><td>(2.0071, 2.6887, 2.0538), zmin 0</td></tr><tr><td>Collider tris</td><td>≤ 1150</td><td>1083</td></tr><tr><td>Export</td><td>written, size &gt; 0, removed after measuring</td><td>3288248 bytes</td></tr></tbody></table></div>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>42000–44000</td><td>42908</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2200</td></tr><tr><td>Materials</td><td>exactly 16 distinct; ≥4490 straw, ≥1760 twine, ≥1030 pine, ≥5970 steel, ≥495 white, ≥775 black, ≥120 blue, ≥120 red, ≥240 gold, ≥310 carbon, ≥475 vane, ≥285 cock vane, ≥1020 nock, ≥4960 grass, ≥270 soil, ≥730 leather faces</td><td>16 slots; 4732 / 1856 / 1086 / 6288 / 522 / 816 / 128 / 128 / 254 / 326 / 500 / 300 / 1076 / 5230 / 286 / 768</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(2.0071, 2.6887, 2.0538) m ± 0.01</td><td>(2.0071, 2.6887, 2.0538), zmin 0</td></tr><tr><td>Collider tris</td><td>≤ 1150</td><td>634</td></tr><tr><td>Export</td><td>written, size &gt; 0, removed after measuring</td><td>3259388 / 3259388 / 3259380 bytes (4.5.11 / 5.1.2 / 5.2.1)</td></tr></tbody></table></div>
<p>The collider is the convex hull of the whole piece; its count is carried by the 96-segment turf outline.</p>
<p>Every falsifier leaves the triangle count at 42908 and the AABB unchanged: they move parts or change a length, never add or remove geometry.</p>
<p>DECIMATE COLLAPSE triangle counts are not identical across Blender series, so the LOD gate is a ratio band, not an exact count. Bake pixels are stochastic, so the bake gate is <code>has_data</code> plus operator <code>FINISHED</code>, not byte-identity. Construction uses only seeded <code>random.Random</code> streams; two default runs print identical measurements.</p>
Expand Down
2 changes: 1 addition & 1 deletion docs/gallery/bamboo-clump/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ <h1>Bamboo Clump</h1>
<p>Intended size: a clump 3.82 × 3.55 m across its leaves and 4.83 m to the highest leaf. The outer AABB is 3.8168 × 3.5512 × 4.8254 m, read off the vertices: the leaning culms and their branches set X and Y, a leaf on the tallest culm&#x27;s top plume sets the top; the soil&#x27;s underside is the ground. The collider is the convex hull of the lower 1.25 m of the clump, coarse: a player walks the litter and brushes through the leaves, but not through the culms.</p>
<h2 id="budgets">Budgets<a class="anchor" href="#budgets" aria-label="Link to this section">#</a></h2>
<p>Every budget is declared as a named constant. Every gate <strong>recomputes</strong> its value from the mesh, materials, UVs, evaluated LOD, collider, or export file.</p>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>72800–74800</td><td>73804</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2200</td></tr><tr><td>Materials</td><td>exactly 5 distinct; ≥2680 soil, ≥16600 culm, ≥16770 leaf, ≥2920 sheath, ≥740 dry-leaf faces</td><td>5 slots; 2734 / 16944 / 17115 / 2979 / 756</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(3.8168, 3.5512, 4.8254) m ± 0.01</td><td>(3.8168, 3.5512, 4.8254), zmin 0</td></tr><tr><td>Collider tris (lower 1.25 m hull)</td><td>≤ 96</td><td>88</td></tr><tr><td>Export</td><td>written, size &gt; 0, removed after measuring</td><td>5606968 bytes</td></tr></tbody></table></div>
<div class="table-wrap"><table><thead><tr><th scope="col">Axis</th><th scope="col">Declared</th><th scope="col">Measured (5.2.1)</th></tr></thead><tbody><tr><td>Base triangles</td><td>72800–74800</td><td>73804</td></tr><tr><td>LOD1 ratio</td><td>0.32–0.62 of base</td><td>0.5000</td></tr><tr><td>LOD2 ratio</td><td>0.10–0.35 of base</td><td>0.2200</td></tr><tr><td>Materials</td><td>exactly 5 distinct; ≥2680 soil, ≥16600 culm, ≥16770 leaf, ≥2920 sheath, ≥740 dry-leaf faces</td><td>5 slots; 2734 / 16944 / 17115 / 2979 / 756</td></tr><tr><td>UVs</td><td>in <code>0..1</code>, AABB overlap ≤ 1e-5</td><td>in range, overlap 0</td></tr><tr><td>Outer AABB</td><td>(3.8168, 3.5512, 4.8254) m ± 0.01</td><td>(3.8168, 3.5512, 4.8254), zmin 0</td></tr><tr><td>Collider tris (lower 1.25 m hull)</td><td>≤ 96</td><td>88</td></tr><tr><td>Export</td><td>written, size &gt; 0, removed after measuring</td><td>5606976 / 5606976 / 5606968 bytes (4.5.11 / 5.1.2 / 5.2.1)</td></tr></tbody></table></div>
<p>The quality pass re-fitted four of these around the new measurements, each for a stated reason. The triangle band moved from 51500–53500 to 72800–74800, paying for a fuller crown (815 leaves on 107 branches against 567 on 63), 21 culm sheaths, five knuckles and a wax-band row under every node. The face floors follow the same counts. The collider ceiling went from 80 to 96: the culms now rise from a 0.6 m footprint and splay from the soil, so the hull of the lower 1.25 m has more facets (88). The AABB is a new shape.</p>
<p>DECIMATE COLLAPSE triangle counts are not identical across Blender series, so the LOD gate is a ratio band, not an exact count. Bake pixels are stochastic, so the bake gate is <code>has_data</code> plus operator <code>FINISHED</code>, not byte-identity. The plan is seeded and nothing else is random; the geometry is pure Python math. Two default runs print identical measurements.</p>
<h3 id="hygiene">Hygiene<a class="anchor" href="#hygiene" aria-label="Link to this section">#</a></h3>
Expand Down
Loading
Loading