OverviewFilesCommitsIssuesDocsReleasesPeers

hypercore-kb commits / fd3db51

skills/blender-bridge: record the closed erosion stack and the flip that was measured
The wrapper and the node are ported and measured, so the skill says so with the numbers rather than "0.1848, next step". Also records the two things that will otherwise be rediscovered: the bridge mirrors U and not V (and why the commit that said otherwise reasoned it out instead of measuring), and that ProcNodes_GradientNoise is approximate -- analytic derivatives against finite differences -- which its "1.000000" hid because that number was a correlation on the height alone. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fd3db51693756b5ee9e3ac04a72b10a6a67730f9
by plankatron <fleeky@gmail.com> · 2026-09-04T19:16:48.000Z

Changed files (1) +23 -4

.claude/skills/blender-bridge/SKILL.md +23 -4
……@@ -21,7 +21,7 @@ Everything dated here was measured on that day; anything older is marked.
21213. Rebuild C++ AFTER the bump — **all three targets**, see Build
22224. .so is **symlinked** to hyper-tps (no copy needed)
2323
24**Current version: 0.58.0** (branch: `sdf-volume-bridge`, 22 commits unpushed
24**Current version: 0.60.0** (branch: `sdf-volume-bridge`, 25 commits unpushed
2525to `bare` as of 2026-09-04)
2626
2727## Where things are
……@@ -168,7 +168,26 @@ top two came out exact first try.
168168| 5 scalar helpers | `ProcNodes_{PowInv,EaseOut,SmoothStart,NormalizeSafe}` | 18 assertions |
169169| `phacelle_noise` | `ProcNodes_Phacelle`, 64 nodes | **9.537e-07** |
170170| `erosion_filter` | `ProcNodes_ErosionFilter`, 122 nodes | **2.980e-08** |
171| `erosion_node_eval_full` | `ProcNodes_ErosionEval` | see below |
171| `erosion_node_eval_full` | `ProcNodes_ErosionEval`, 24 nodes | **1.937e-07** |
172| `ErosionNoiseNode::execute` | `ProcNodes_ErosionNoise`, 22 nodes | **corr 0.999988**, RMS 2.7e-03 over 576 verts |
173
174`test_erosion_noise_parity.py` is the end-to-end one and it reports the
175correlation for **all eight orientations** of the (u, v) match, because matching
176by vertex index passes a mirrored preview silently. That is how the axis flip
177was found: after the filter rebuild the values were already right and the
178identity score had not moved.
179
180**The bridge mirrors U, not V.** `M` maps Godot `(x, y, z)` -> Blender
181`(-x, z, y)`, so the same vertex has Blender x = -Godot x and Blender y = Godot
182z. v0.47.2 flipped U; v0.47.3 replaced it with a V flip reasoning that "M maps
183Godot Z to Blender Y, reversing V" — M does map Z to Y, in the SAME direction,
184and it is X that is negated. Neither measured it. v0.60.0 put it back.
185
186⚠ **`ProcNodes_GradientNoise` is NOT exact**, and it is the whole remaining
187end-to-end residual. `grad_noised_2d` returns iq's ANALYTIC derivatives; the
188group takes FINITE DIFFERENCES, three evaluations per sample. Height agrees to
189~7e-3, **slope differs by up to 5e-2**. It was recorded as "1.000000", which was
190a correlation on the height — the slope was never compared to anything.
172191
173192`ProcNodes_ErosionNoise` is the node users place, and it is a port of the
174193**SUPERSEDED** filter — the frequency approach (2018 clayjohn / 2023 Fewes),
……@@ -609,8 +628,8 @@ reach fingertips (Z already aligns with chain). Works for all leaf bones (breast
609628 now a SYMLINK to the source, so there is nothing to copy — but the restart is
610629 still required.
611630- **The C++ test suites do not build** — source only, no SConstruct targets
612- **ErosionNoise parity is 0.1848** until the re-port is wired up (see the
613 proc-nodes parity section)
631- **`ProcNodes_GradientNoise` uses finite differences where the C++ is
632 analytic** — the last known numerical gap in the terrain path
614633
615634## Testing
616635