diff --git a/docs/gallery/asset-sheets/wheelbarrow.webp b/docs/gallery/asset-sheets/wheelbarrow.webp new file mode 100644 index 00000000..bcdc6cb0 Binary files /dev/null and b/docs/gallery/asset-sheets/wheelbarrow.webp differ diff --git a/docs/gallery/assets/gltf-skin-roundtrip-hero.webp b/docs/gallery/assets/gltf-skin-roundtrip-hero.webp index f03c55d5..98d85436 100644 Binary files a/docs/gallery/assets/gltf-skin-roundtrip-hero.webp and b/docs/gallery/assets/gltf-skin-roundtrip-hero.webp differ diff --git a/docs/gallery/assets/wheelbarrow-hero.webp b/docs/gallery/assets/wheelbarrow-hero.webp index a1fdc725..c9a95c1c 100644 Binary files a/docs/gallery/assets/wheelbarrow-hero.webp and b/docs/gallery/assets/wheelbarrow-hero.webp differ diff --git a/docs/gallery/contact-sheets/gltf-skin-roundtrip-contact-sheet.webp b/docs/gallery/contact-sheets/gltf-skin-roundtrip-contact-sheet.webp index 243ad78f..e9a97648 100644 Binary files a/docs/gallery/contact-sheets/gltf-skin-roundtrip-contact-sheet.webp and b/docs/gallery/contact-sheets/gltf-skin-roundtrip-contact-sheet.webp differ diff --git a/docs/gallery/contact-sheets/wheelbarrow-contact-sheet.webp b/docs/gallery/contact-sheets/wheelbarrow-contact-sheet.webp index 2bdbcfac..8dd01cc5 100644 Binary files a/docs/gallery/contact-sheets/wheelbarrow-contact-sheet.webp and b/docs/gallery/contact-sheets/wheelbarrow-contact-sheet.webp differ diff --git a/docs/gallery/gltf-skin-roundtrip/index.html b/docs/gallery/gltf-skin-roundtrip/index.html index 6d5bfdd5..42b59570 100644 --- a/docs/gallery/gltf-skin-roundtrip/index.html +++ b/docs/gallery/gltf-skin-roundtrip/index.html @@ -284,7 +284,7 @@

gltf-skin-roundtrip

What each check catches on failure: exporting with export_skins=False (exit 5 — no skin on disk), stripping the weights (exit 4 — no vertex groups), and posing the re-imported rig differently (exit 19 — deformation deviates 0.90).

Version witness: the skins pipeline is stable between Blender 4.5 LTS and 5.1 — the exporter/importer RNA is byte-identical (probed with gltf-export-roundtrip), and every measured value matches to the digit on 4.5.11 and 5.1.2.

-

The render stages the authored scorpion beside the actual re-imported one — same curl, same glowing stinger — proof the skin rode the format through.

+

The render stages the authored scorpion beside the actual re-imported one — same curl, same glowing stinger — proof the skin rode the format through. Both rigs are turned three-quarters to the camera. The tail curls in the rig's own Y-Z plane, so a head-on view saw the curl end-on: the tail stood straight up behind the body like a chimney. The yaw is composed into each armature's world matrix, because the glTF importer leaves its armature in quaternion mode, where rotation_euler does nothing.

Run

# Cheap correctness check (no render) — the CI check:
 blender --background --python gltf_skin_roundtrip.py --
@@ -360,6 +360,10 @@ 

Source

REST_TOL = 1e-5 # rest-matrix round-trip tolerance LBS_TOL = 5e-4 KEY_DIGITS = 4 +# render staging only (not part of the check): each rig's X offset and its +# yaw, so the tail's curl (in the rig's Y-Z plane) is seen in profile +STILL_X = 1.0 +STILL_YAW = -50.0 EXPORT_KWARGS = dict( export_format='GLTF_SEPARATE', @@ -897,9 +901,20 @@

Source

authored.data.materials.append(m) assign_weights(authored, part_of2) authored_arm = build_rig(authored) - # move the ARMATURES; the skinned meshes follow as children - authored_arm.location.x = -1.1 - roundtrip_arm.location.x = 1.1 + # move the ARMATURES; the skinned meshes follow as children. Each is + # turned three-quarters to the camera: seen head-on, the tail stood + # straight up behind the body like a chimney and the scorpion read + # as a boxy robot; side-on, the arch of the tail over the back and + # the legs down its flanks carry the read. + # The yaw is composed into the world matrix about the rig's own + # origin: the glTF importer leaves its armature in quaternion mode, + # where rotation_euler does nothing. + for arm, x in ((authored_arm, -STILL_X), (roundtrip_arm, STILL_X)): + arm.location.x = x + bpy.context.view_layer.update() + at = mathutils.Matrix.Translation(arm.matrix_world.translation) + arm.matrix_world = (at @ mathutils.Matrix.Rotation( + math.radians(STILL_YAW), 4, 'Z') @ at.inverted() @ arm.matrix_world) if not render_still(authored, os.path.abspath(args.output), args.engine): print("ERROR: render produced no file", file=sys.stderr) return 20 diff --git a/docs/gallery/index.html b/docs/gallery/index.html index 2e8a9dac..8f693cec 100644 --- a/docs/gallery/index.html +++ b/docs/gallery/index.html @@ -1036,12 +1036,12 @@

park-bench

wheelbarrow

A procedural wooden wheelbarrow through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

-

witnesses Recomputed: 2536 tris, two materials with 1157 wood and 190 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.556×0.630×0.572 m, zmin 0, hygiene 0, wall-floor seat 12 mm, spoke clearance 40 mm, two boards per side and front wall with 2 mm seams, LOD ratios in band (5.2 COLLAPSE leaner on LOD2), convex collider 90 tris, non-empty glTF. --skip-decimate exits 9 on LOD1; --stray-vert exits 15 on hygiene; --lift-z / --short-legs exit 16 on grounded; --fat-spokes / --float-walls / --wide-seams exit 17 on joint fit; --pipe-rim exits 18 on tread aspect.

+

witnesses Recomputed: 2440 tris, two materials with 1085 wood and 214 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.563x0.594x0.577 m, zmin 0, hygiene 0, both shafts one timber from grip to axle, tray flared 15 deg and raked 30 deg, wall-floor seat 8 mm, spoke clearance 52 mm, two boards per side and front wall with 2 mm seams measured in the wall's plane, LOD ratios in band (5.2 COLLAPSE leaner on LOD2), convex collider 80 tris, non-empty glTF. --skip-decimate exits 9 on LOD1; --stray-vert exits 15 on hygiene; --lift-z / --short-legs exit 16 on grounded; --fat-spokes / --float-walls / --wide-seams exit 17 on joint fit; --pipe-rim exits 18 on tread aspect; --split-shafts exits 20 on shaft runs; --box-tray exits 21 on tray flare.

View showcase piece wheelbarrow
diff --git a/docs/gallery/wheelbarrow/index.html b/docs/gallery/wheelbarrow/index.html index 5a40fc99..5e98419d 100644 --- a/docs/gallery/wheelbarrow/index.html +++ b/docs/gallery/wheelbarrow/index.html @@ -16,13 +16,13 @@ - + - +