OverviewFilesCommitsIssuesDocsReleasesPeers

hypercore-kb commits / d29f84d

skills/blender-bridge: the terrain path is exact, and record how the gap hid
v0.61.0 closed the last numerical gap. The gradient noise slope was a finite difference of a height that had a spurious 0.982 on it; end to end the terrain path now correlates 1.000000 at RMS 1.967e-07, median residual 3.553e-15. The lesson is worth more than the fix, so it is recorded rather than just the number. "GradientNoise parity 1.000000" was a CORRELATION ON THE HEIGHT: a flat 1.8% scale error correlates perfectly, and the slope was never compared to anything at all. Also records the fBM derivative rule -- deriv += d.yz * amp * freq -- so the chain-rule factor is read off the source rather than re-derived and quietly dropped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
d29f84d518c1b1d8e5d35b928465c55650b0647c
by plankatron <fleeky@gmail.com> · 2026-09-04T19:35:15.000Z

Changed files (1) +22 -10

.claude/skills/blender-bridge/SKILL.md +22 -10
……@@ -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.60.0** (branch: `sdf-volume-bridge`, 25 commits unpushed
24**Current version: 0.61.0** (branch: `sdf-volume-bridge`, 26 commits unpushed
2525to `bare` as of 2026-09-04)
2626
2727## Where things are
……@@ -163,8 +163,9 @@ top two came out exact first try.
163163| C++ (`proc-nodes/src/shared/erosion_filter.inc`) | Blender group | worst delta |
164164|---|---|---|
165165| `erosion_hash` | `ProcNodes_ErosionHash` | bit-for-bit, 7 lattice points |
166| `grad_noised_2d` | `ProcNodes_Noised` | via GradientNoise 1.000000 |
167| `fractal_noise_2d` | `ProcNodes_FBMNoised` (Repeat Zone) | same |
166| `grad_noised_2d` | `ProcNodes_Noised` | **height + ANALYTIC deriv** |
167| `fractal_noise_2d` | `ProcNodes_FBMNoised` (Repeat Zone) | deriv accumulated per octave |
168| `GradientNoiseNode` | `ProcNodes_GradientNoise`, 3 nodes | **1.907e-06**, height and both slopes |
168169| 5 scalar helpers | `ProcNodes_{PowInv,EaseOut,SmoothStart,NormalizeSafe}` | 18 assertions |
169170| `phacelle_noise` | `ProcNodes_Phacelle`, 64 nodes | **9.537e-07** |
170171| `erosion_filter` | `ProcNodes_ErosionFilter`, 122 nodes | **2.980e-08** |
……@@ -183,11 +184,23 @@ z. v0.47.2 flipped U; v0.47.3 replaced it with a V flip reasoning that "M maps
183184Godot Z to Blender Y, reversing V" — M does map Z to Y, in the SAME direction,
184185and it is X that is negated. Neither measured it. v0.60.0 put it back.
185186
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.
187**The terrain path is exact end to end** as of v0.61.0: correlation 1.000000,
188RMS 1.967e-07, median residual 3.553e-15 over 576 vertices.
189
190It was not, and the two defects that kept it from being are the clearest example
191in this repo of a number that looks like a pass. `ProcNodes_Noised` multiplied
192the height by **0.982** — a "normalization factor matching iq/Blender" that
193`grad_noised_2d` does not have — and returned the height ALONE, so
194`ProcNodes_GradientNoise` finite-differenced the whole fBM three times with
195eps=0.001. Slope was out by up to **5e-1**. The number of record, "GradientNoise
196parity 1.000000", was a **correlation on the height**: 1.8% out and perfectly
197correlated reads as 1.000000, and the slope was never compared to anything.
198
199When accumulating an fBM derivative the per-octave term is
200`d.yz * amp * freq` — the extra `freq` is the chain rule for evaluating at
201`p * nf`. Dropping it fails every case; it is the one part worth reading off
202`fractal_noise_2d_lod` rather than re-deriving, because a missing `nf` looks
203like a plausible slope.
191204
192205`ProcNodes_ErosionNoise` is the node users place, and it is a port of the
193206**SUPERSEDED** filter — the frequency approach (2018 clayjohn / 2023 Fewes),
……@@ -628,8 +641,7 @@ reach fingertips (Z already aligns with chain). Works for all leaf bones (breast
628641 now a SYMLINK to the source, so there is nothing to copy — but the restart is
629642 still required.
630643- **The C++ test suites do not build** — source only, no SConstruct targets
631- **`ProcNodes_GradientNoise` uses finite differences where the C++ is
632 analytic** — the last known numerical gap in the terrain path
644- No known numerical gap in the terrain path as of v0.61.0
633645
634646## Testing
635647