| … | … | @@ -25,9 +25,9 @@ claim to the user (hyper-games #63 Part 3). Re-run, do not quote. |
| 25 | 25 | 3. Rebuild C++ AFTER the bump — **all three targets**, see Build |
| 26 | 26 | 4. .so is **symlinked** to hyper-tps (no copy needed) |
| 27 | 27 | |
| 28 | | **Current version: 0.80.0** (branch: `sdf-volume-bridge`, HEAD `d0efc30`, |
| 29 | | **49 commits unpushed** to `bare` as of 2026-09-05; proc-nodes carries 38 of its |
| 30 | | own on `heightmap-erosion-toggle`, HEAD `be03703`) |
| 28 | **Current version: 0.81.0** (branch: `sdf-volume-bridge`, **52 commits |
| 29 | unpushed** to `bare` as of 2026-09-05; proc-nodes carries 40 of its own on |
| 30 | `heightmap-erosion-toggle`) |
| 31 | 31 | |
| 32 | 32 | ## Where things are |
| 33 | 33 | |
| … | … | @@ -252,10 +252,9 @@ input, matching Blender. |
| 252 | 252 | |
| 253 | 253 | Measured 2026-09-05, not quoted: |
| 254 | 254 | |
| 255 | | - **The ledger is 5 of 101 mapped types**, down from 52. All five are mesh |
| 256 | | primitives (`audit_missing_sockets.py` prints them). ⚠ #63 says "all of them |
| 257 | | UV Map outputs" — the audit says otherwise: `MeshCylinder` is `1 < 5`, missing |
| 258 | | **Top, Side, Bottom** as well as UV Map. The other four are UV Map alone. |
| 255 | - **The ledger is 0 of 101 mapped types** (52 -> 17 -> 5 -> 0). ⚠ #63 said the |
| 256 | last five were "all of them UV Map outputs"; the audit said otherwise — |
| 257 | `MeshCylinder` was `1 < 5`, missing **Top, Side, Bottom** as well. |
| 259 | 258 | - **UNRESOLVED is 0.** The five remaining unmatched proc sockets are GODOT-ONLY |
| 260 | 259 | and deliberate: kept AFTER Blender's last socket so they cannot displace a |
| 261 | 260 | real one, and unreachable by any Blender index. |
| … | … | @@ -792,7 +791,13 @@ Measured 2026-09-05, Blender 5.2.0, proc-nodes `be03703`: |
| 792 | 791 | | sockets by INDEX (fallback, type agrees) | 25 (8.1%) | |
| 793 | 792 | | GODOT-ONLY (past Blender's last socket) | 5 (1.6%) — `CurveToMesh:Resolution,Closed`, `DistributePointsOnFaces:Count`, `RepeatZoneInput:Geometry`, `SimulationZoneInput:Geometry` | |
| 794 | 793 | | **UNRESOLVED** (dropped at runtime) | **0** | |
| 795 | | | missing-socket ledger | **5 of 101 types** — `MeshCube`, `MeshGrid`, `MeshIcoSphere`, `MeshUVSphere` each missing `UV Map`; `MeshCylinder` `1 < 5`, also missing `Top`, `Side`, `Bottom` | |
| 794 | | missing-socket ledger | **0 of 101 types** — closed 2026-09-05 | |
| 795 | |
| 796 | ⚠ **`audit_socket_names.py` walks INPUTS ONLY** (`n.inputs`, line 80), so |
| 797 | 90.3% says nothing about output sockets. Every UV Map, and the cylinder's Top / |
| 798 | Side / Bottom, were invisible to it — `audit_missing_sockets.py` is the one that |
| 799 | covers them. Two audits, two different questions; quoting one for the other is |
| 800 | how five missing outputs sat behind a 90% number. |
| 796 | 801 | |
| 797 | 802 | ⛔ **The old text here said the two zone `CUSTOM` sockets "may not be |
| 798 | 803 | representable, so the realistic floor is 2, not 0".** That was never measured |
| … | … | @@ -811,6 +816,41 @@ and doing so reported three of `PerlinNoiseNode`'s sockets as wrong when that |
| 811 | 816 | node matches Blender exactly. Those three were queued for DELETION to satisfy a |
| 812 | 817 | number the tool got wrong. |
| 813 | 818 | |
| 819 | ## The primitives carry Blender's FACES (2026-09-05) |
| 820 | |
| 821 | #63 listed the UV outputs as "now unblocked" and quads as a separate later item. |
| 822 | Measured, three of the five were blocked ON the quads: a per-corner UV has |
| 823 | nothing to line up with while the corner domain disagrees. |
| 824 | |
| 825 | cube 8 verts / 36 corners / 12 faces vs Blender 8 / 24 / 6 |
| 826 | uv sphere 10 / 48 / 16 vs 10 / 40 / 12 |
| 827 | cylinder 8 / 36 / 12 vs 8 / 24 / 6 |
| 828 | circle 5 / 9 / 3 vs 5 / 5 / 1 (n-gon) |
| 829 | |
| 830 | Ported from Blender's own source, not derived — `mesh_primitive_{cuboid, |
| 831 | cylinder_cone,uv_sphere}.cc`, `node_geo_mesh_primitive_circle.cc`, and |
| 832 | `bmo_primitive.cc` for the ico sphere. ⚠ **The source tree on disk |
| 833 | (`/storage/projects/code/godot/blender-source`) is 5.2 ALPHA, March 2026; the |
| 834 | binary is 5.2.0 LTS, July.** Read the source for the algorithm, keep the BINARY |
| 835 | as the judge — #62 was bitten by exactly this on vector MODULO. |
| 836 | |
| 837 | - **`fill_type` is a PROPERTY and it changes the vertex count.** A triangle fan |
| 838 | appends the centre as the LAST vertex, an n-gon is one face, None has none. It |
| 839 | was never serialized, so every bridged circle and cylinder took proc-nodes' |
| 840 | own default fill whatever Blender showed. Both directions now carry it. |
| 841 | - ⛔ **The ico sphere's UV is a TABLE, not a projection.** BMesh's spherical |
| 842 | unwrap (`u = 0.5 + atan2(y,x)/2pi`) is what the UV SPHERE uses; ported onto the |
| 843 | ico sphere it gives corner 0 u = 0.300001 against Blender's 0.181819. Blender |
| 844 | ships a hand-made 60-entry net (`icouvs`). |
| 845 | - **Top / Side / Bottom live on a domain that depends on the fill** — faces when |
| 846 | the end has one, points when it is a tip or unfilled. |
| 847 | - ⚠ **Blender REMOVES sockets by mode.** A cylinder with `fill_type` NONE has no |
| 848 | `Fill Segments` socket at all, and setting it unconditionally crashes a |
| 849 | harness. This is the same lesson as "do not filter on `enabled`", one level up. |
| 850 | - ⛔ NOT done: an ico sphere above subdivision 1. The mesh is a BMesh |
| 851 | edge-subdivide whose vertex order belongs to that operator — 162 verts / 320 |
| 852 | faces against Blender's 42 / 80. |
| 853 | |
| 814 | 854 | ## Completed Phases |
| 815 | 855 | |
| 816 | 856 | - Phase 1-2: Geometry sync, transforms, UVs, materials, jitter, auto-reconnect, geometry nodes |
| … | … | @@ -836,6 +876,10 @@ number the tool got wrong. |
| 836 | 876 | Math, Mix, Wave + Vector Rotate, mesh primitives); the graph FRAME marked at |
| 837 | 877 | the bridge instead of converting values; ledger 52 -> 17 |
| 838 | 878 | - v0.68.0-v0.80.0 (#63): ramp and curve DATA both directions; the edge domain; |
| 839 | | quads; multi-input as a socket kind; item lists and zone pairing; the |
| 840 | | attribute family typed for all nine `data_type`s; ledger 17 -> 5, UNRESOLVED |
| 841 | | 6 -> 0, socket-by-name 81.7% -> 90.3% |
| 879 | the grid's quads; multi-input as a socket kind; item lists and zone pairing; |
| 880 | the attribute family typed for all nine `data_type`s; ledger 17 -> 5, |
| 881 | UNRESOLVED 6 -> 0, socket-by-name 81.7% -> 90.3% |
| 882 | - v0.81.0 (2026-09-05): cross-domain field adaptation, all twelve directions, |
| 883 | every rule measured; the grid's FACE order; quads for cube, circle, uv sphere |
| 884 | and cylinder; `fill_type` crossing both ways; all five UV Map outputs and the |
| 885 | cylinder's three selections — **ledger 5 -> 0** |