Skip to content

Commit e73511e

Browse files
authored
Merge pull request #55 from AdaWorldAPI/claude/torso-helix-codec
cockpit/torso: land anisotropic + /torso-map + helix codec into main (stacked merges stayed in intermediate branches)
2 parents d6efb25 + 3b1420a commit e73511e

29 files changed

Lines changed: 666 additions & 167 deletions

claude-notes/plans/2026-06-24-fma-torso-bodyparts3d-splat.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,53 @@ Notes:
5858
~6.6 s/frame on the scalar path (no AVX target-cpu in the scratchpad project);
5959
correctness verified by viewing the rendered frames.
6060
- Colours: golden-angle hue per structure at S=0.34 V=0.78 (muted, per request).
61+
- Brush: splat3d render uses gaussian scale 0.0025 (was 0.008 — the big isotropic
62+
brush blobbed the detail into a "Warhol" look; 0.0025 at 810x1080 restores the
63+
ribcage/vertebrae). Frames re-rendered.
64+
65+
## Follow-up PR — anisotropic + GUID-tag + map (branch claude/torso-anisotropic-map)
66+
67+
- [x] **SPL2 format** (supersedes SPL1): hdr 40B [`SPL2`|count|node_count|radius|
68+
bbox]; body 21B [pos 3f | normal 3i8 | rgb 3u8 | opacity u8 | node_row u16].
69+
Helix-orderable + residual-ready (the codec PR slots in here).
70+
- [x] **Anisotropic surface-fit gaussians** ("connect the dots"): bake reads OBJ
71+
`vn` (BodyParts3D ships normals — free, no face traversal); render driver
72+
orients each gaussian flat-to-surface (`scale=[t,t,thin]`, `quat` aligns
73+
local-z to the normal). Tangent 0.004 connects within a structure while
74+
rib gaps stay visible. NOT voxels (continuous surfaces, not a discrete grid).
75+
- [x] **Per-node SoA + O(1) switch** (the GUID/value-tenant backbone): bake emits
76+
`torso.nodes.json` — one row per FMA structure (178 rows, 91 own meshes):
77+
fma id, name, depth, HHTL tier-ranks, colour, gaussian RANGE (start+count),
78+
OBJ-geometry tenant (centroid + bbox + FJ handles). Each gaussian carries
79+
its node_row. Consumers build the switch (row -> node) once -> O(1) tenant
80+
reads. Position = real BodyParts3D coordinate; identity = the FMA node.
81+
- [x] **/torso-map page**: click a gaussian -> node_row -> node SoA -> FMA label +
82+
partonomy breadcrumb; structure list (graph -> splat) highlights gaussians.
83+
Realises the osint-cad-splat thesis: graph and splat, one node at one address.
84+
- [x] tsc clean. Browser pick-interaction not exercised here (raycast-on-Points
85+
logic is standard; geometry verified via the CPU frames).
86+
87+
## Helix-anchor codec — MEASURED (branch claude/torso-helix-codec)
88+
89+
`tools/spl_codec.py` encodes SPL2 -> SPL3 and round-trips it. The x265-for-
90+
gaussians design, mapped to signals already in SPL2 + the node SoA:
91+
helix = 3D Morton (Z-order) of position = identity/GUID order (locality-preserving)
92+
anchor = FMA node (SoA centroid + per-node colour) = the I-frame, random-access
93+
motion = gaussian offset from its node anchor (the motion vector)
94+
residual = helix-ordered zig-zag delta of (motion, normal)
95+
colour = ANCHOR-PREDICTED -> 0 per-gaussian bytes (a 178-entry node palette)
96+
97+
Measured on the real torso (231,515 gaussians):
98+
- SPL2 21.0 B/g -> SPL3 7.47 B/g => **2.8x smaller** (zlib entropy stand-in)
99+
- colour: **exact, 887 B total** for ALL colour (crisp by construction, no bleed)
100+
- position round-trip RMSE **0.00001** (16-bit quant, effectively lossless)
101+
- node_row RLE 35 KB / 231K gaussians (structures contiguous in helix order)
102+
- stream split: motion 1.02 MB, normal 671 KB (the optimization target -> octahedral
103+
+ range coder), rows 35 KB, palette 887 B
104+
105+
Validates the design before wiring it into the render. Next increments:
106+
- [ ] octahedral normals + range coder (the 671 KB normal stream)
107+
- [ ] decode SPL3 at cockpit load; anisotropic/edge-aware reconstruction
108+
(node_row-bounded + normal-oriented = crisp colours in the render)
109+
- [ ] animation: deform node anchors -> motion-skinned gaussians follow
110+
(Motion-Blender GS; the partonomy is the rig)
23.1 KB
Loading
23.6 KB
Loading
24.6 KB
Loading
25.9 KB
Loading
27.4 KB
Loading
25.4 KB
Loading
25.5 KB
Loading
24.8 KB
Loading
24.7 KB
Loading

0 commit comments

Comments
 (0)