Skip to content

Commit 937ba1a

Browse files
TMHSDigitalclaude
andauthored
fix: hay-bale, treasure-chest, gn-instance-grid and temp-override-join quality pass (#232)
* fix(showcase): hay-bale reads as straw — fibre shader, cord twine, symmetric loaf Straw shader (fibres along and across, colour break-up, fibre bump) and an 8 x 10 mm cord in place of the 16 x 24 mm band. Thinning the cord exposed a 0.45 mm belt asymmetry from non-mirrored quad diagonals; the loaf is now triangulated along short diagonals and its X-symmetry asserted directly (exit 19, --odd-loaf). showcase/gallery.json also carries the treasure-chest alt. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix(showcase): treasure-chest lid bands follow the vault instead of fanning out Each band was eight boxes rotated +t where the tangent needs -t, so the segments fanned out like feathers. Bands are now arc slabs on the lid's own vault; caps and hasp use -t. A lid-band budget asserts three bands on the vault radially in the hinge frame (exit 18, --lift-lid-bands). Grain and rust materials. The temp glTF export is removed after measuring. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix(examples): gn-instance-grid still shows the source lattice under its instances Render path only. The check, its assertions and exit codes are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix(examples): temp-override-join staircase stands on plinths instead of hanging Render path only. The check, its assertions and exit codes are unchanged. examples/gallery.json and docs/gallery/index.html also carry the gn-instance-grid, hay-bale and treasure-chest card alts. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * docs(showcase): conventions for body symmetry and bands on curved hosts Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 3b1ad79 commit 937ba1a

26 files changed

Lines changed: 1061 additions & 186 deletions
7.13 KB
Loading
27.4 KB
Loading
-298 Bytes
Loading
312 Bytes
Loading
54.5 KB
Loading
12.8 KB
Loading
-120 Bytes
Loading
-116 Bytes
Loading

‎docs/gallery/gn-instance-grid/index.html‎

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
<meta property="og:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/gn-instance-grid-hero.webp" />
1717
<meta property="og:image:width" content="1280" />
1818
<meta property="og:image:height" content="720" />
19-
<meta property="og:image:alt" content="A three-by-three grid of green instanced cubes on a dark floor." />
19+
<meta property="og:image:alt" content="A three-by-three grid of green instanced cubes, each sitting on a node of a faint source-grid lattice on a dark floor." />
2020
<meta property="og:site_name" content="Blender Developer Tools" />
2121
<meta name="twitter:card" content="summary_large_image" />
2222
<meta name="twitter:title" content="gn-instance-grid — Examples — Blender Developer Tools" />
2323
<meta name="twitter:description" content="A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances → Set Shade Smooth — attached as a NODES modifier with no Group Input geometry." />
2424
<meta name="twitter:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/gn-instance-grid-hero.webp" />
25-
<meta name="twitter:image:alt" content="A three-by-three grid of green instanced cubes on a dark floor." />
25+
<meta name="twitter:image:alt" content="A three-by-three grid of green instanced cubes, each sitting on a node of a faint source-grid lattice on a dark floor." />
2626
<style>
2727
/* fonts are deployed by the landing build (docs/fonts/) */
2828
@font-face { font-family: 'Barlow Condensed'; font-weight: 600; font-display: swap;
@@ -268,8 +268,8 @@ <h1>gn-instance-grid</h1>
268268
<p>A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances → Set Shade Smooth — attached as a NODES modifier with no Group Input geometry.</p>
269269
</header>
270270
<main id="main">
271-
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A three-by-three grid of green instanced cubes on a dark floor.">
272-
<img src="../assets/gn-instance-grid-hero.webp" alt="A three-by-three grid of green instanced cubes on a dark floor." width="1280" height="720" />
271+
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A three-by-three grid of green instanced cubes, each sitting on a node of a faint source-grid lattice on a dark floor.">
272+
<img src="../assets/gn-instance-grid-hero.webp" alt="A three-by-three grid of green instanced cubes, each sitting on a node of a faint source-grid lattice on a dark floor." width="1280" height="720" />
273273
</button>
274274
<p class="zoom-hint">Rendered headless by the example itself — click to zoom.</p>
275275
<div class="callout"><span class="tag">witnesses</span> Realized instances produce closed-form topology (72 verts, 54 faces), Set Material carries Lime, and the corner instance center sits at its closed-form grid coordinate.</div>
@@ -490,8 +490,33 @@ <h2>Source</h2>
490490
<span class="c"># tip the grid so depth reads; cubes already rest on the floor via the tree</span>
491491
obj.rotation_euler = (<span class="n">0.0</span>, <span class="n">0.0</span>, math.radians(<span class="n">24</span>))
492492

493+
<span class="c"># The source Mesh Grid drawn as a faint lattice on the floor, turned with</span>
494+
<span class="c"># the instances, so the still shows grid points in and one cube per</span>
495+
<span class="c"># point out. Render-only: the same GRID_SIZE / GRID_X / GRID_Y the tree</span>
496+
<span class="c"># uses, as a wireframe 1 mm above the floor.</span>
497+
lat_me = bpy.data.meshes.new(<span class="s">&quot;Lattice&quot;</span>)
498+
lbm = bmesh.new()
499+
<span class="k">try</span>:
500+
bmesh.ops.create_grid(lbm, x_segments=GRID_X - <span class="n">1</span>, y_segments=GRID_Y - <span class="n">1</span>,
501+
size=GRID_HALF)
502+
lbm.to_mesh(lat_me)
503+
<span class="k">finally</span>:
504+
lbm.free()
505+
lat_mat = bpy.data.materials.new(<span class="s">&quot;Lattice&quot;</span>)
506+
lat_mat.use_nodes = <span class="k">True</span>
507+
lb = lat_mat.node_tree.nodes[<span class="s">&quot;Principled BSDF&quot;</span>]
508+
lb.inputs[<span class="s">&quot;Base Color&quot;</span>].default_value = (<span class="n">0.30</span>, <span class="n">0.42</span>, <span class="n">0.26</span>, <span class="n">1.0</span>)
509+
lb.inputs[<span class="s">&quot;Roughness&quot;</span>].default_value = <span class="n">0.6</span>
510+
lat_me.materials.append(lat_mat)
511+
lattice = bpy.data.objects.new(<span class="s">&quot;Lattice&quot;</span>, lat_me)
512+
lattice.location = (<span class="n">0.0</span>, <span class="n">0.0</span>, <span class="n">0.001</span>)
513+
lattice.rotation_euler = obj.rotation_euler
514+
wire = lattice.modifiers.new(<span class="s">&quot;lattice&quot;</span>, <span class="s">&quot;WIREFRAME&quot;</span>)
515+
wire.thickness = <span class="n">0.018</span>
516+
scene.collection.objects.link(lattice)
517+
493518
aim = bpy.data.objects.new(<span class="s">&quot;Aim&quot;</span>, <span class="k">None</span>)
494-
aim.location = (<span class="n">0.0</span>, <span class="n">0.0</span>, CUBE_SIZE / <span class="n">2</span>)
519+
aim.location = (-<span class="n">0.12</span>, <span class="n">0.0</span>, <span class="n">0.0</span>)
495520
scene.collection.objects.link(aim)
496521

497522
<span class="k">def</span> light(name, loc, energy, size, col):
@@ -523,7 +548,9 @@ <h2>Source</h2>
523548
cam_data = bpy.data.cameras.new(<span class="s">&quot;Cam&quot;</span>)
524549
cam_data.lens = <span class="n">50.0</span>
525550
cam = bpy.data.objects.new(<span class="s">&quot;Cam&quot;</span>, cam_data)
526-
cam.location = (<span class="n">3.7</span>, -<span class="n">4.3</span>, <span class="n">2.7</span>)
551+
<span class="c"># Higher, so the 3 x 3 layout reads as a grid: from 2.7 m the perspective</span>
552+
<span class="c"># scrambled the rows and the right column crowded the frame edge.</span>
553+
cam.location = (<span class="n">3.4</span>, -<span class="n">4.6</span>, <span class="n">4.3</span>)
527554
scene.collection.objects.link(cam)
528555
scene.camera = cam
529556
track = cam.constraints.new(<span class="s">&#x27;TRACK_TO&#x27;</span>)
@@ -584,7 +611,7 @@ <h2>Source</h2>
584611
</main>
585612
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
586613
<button class="lightbox-close" type="button" autofocus>Close</button>
587-
<img src="../assets/gn-instance-grid-hero.webp" alt="A three-by-three grid of green instanced cubes on a dark floor." />
614+
<img src="../assets/gn-instance-grid-hero.webp" alt="A three-by-three grid of green instanced cubes, each sitting on a node of a faint source-grid lattice on a dark floor." />
588615
</dialog>
589616
<footer>
590617
<div class="statusbar">

0 commit comments

Comments
 (0)