| … | … | @@ -21,7 +21,7 @@ Everything dated here was measured on that day; anything older is marked. |
| 21 | 21 | 3. Rebuild C++ AFTER the bump — **all three targets**, see Build |
| 22 | 22 | 4. .so is **symlinked** to hyper-tps (no copy needed) |
| 23 | 23 | |
| 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 |
| 25 | 25 | to `bare` as of 2026-09-04) |
| 26 | 26 | |
| 27 | 27 | ## Where things are |
| … | … | @@ -168,7 +168,26 @@ top two came out exact first try. |
| 168 | 168 | | 5 scalar helpers | `ProcNodes_{PowInv,EaseOut,SmoothStart,NormalizeSafe}` | 18 assertions | |
| 169 | 169 | | `phacelle_noise` | `ProcNodes_Phacelle`, 64 nodes | **9.537e-07** | |
| 170 | 170 | | `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 |
| 175 | correlation for **all eight orientations** of the (u, v) match, because matching |
| 176 | by vertex index passes a mirrored preview silently. That is how the axis flip |
| 177 | was found: after the filter rebuild the values were already right and the |
| 178 | identity 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 |
| 182 | z. v0.47.2 flipped U; v0.47.3 replaced it with a V flip reasoning that "M maps |
| 183 | Godot Z to Blender Y, reversing V" — M does map Z to Y, in the SAME direction, |
| 184 | and 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 |
| 187 | end-to-end residual. `grad_noised_2d` returns iq's ANALYTIC derivatives; the |
| 188 | group 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 |
| 190 | a correlation on the height — the slope was never compared to anything. |
| 172 | 191 | |
| 173 | 192 | `ProcNodes_ErosionNoise` is the node users place, and it is a port of the |
| 174 | 193 | **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 |
| 609 | 628 | now a SYMLINK to the source, so there is nothing to copy — but the restart is |
| 610 | 629 | still required. |
| 611 | 630 | - **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 |
| 614 | 633 | |
| 615 | 634 | ## Testing |
| 616 | 635 | |