SideFX Houdini customization package
git clone https://git.lucas.co/hou-control.git
developer_surface_detangle: the Shapeshifter algorithm
The Shapeshifter branch raised Not Implemented. It is now a point
repulsion for a growing surface, inside a Repeat block driven by
Iterations: each pass pushes every point away from any other point
closer than Thickness (in average edge lengths, nearest-neighbour
spacing on a point cloud) that is not a topological neighbour within
Neighbour Rings edges, by half the overlap, and marks changed = 1.
Iterations defaults to 0 and the SideFX branch is untouched, so
existing instances behave as before; each algorithm's folder shows
only when it is selected.
Verified: two grids 0.3 apart open to the 0.556 thickness in one pass
and hold there, every point marked; a single flat grid is untouched.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
developer.md | 2 +-
otls-audit.md | 3 ++-
...op_lsgalante.developer_surface_detangle.1.0.hdalc | Bin 6332 -> 11265 bytes
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/developer.md b/developer.md
index eb8f816..3943d40 100644
--- a/developer.md
+++ b/developer.md
@@ -109,7 +109,7 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
### Developer/Surface
- Surface Adapt
-- Surface Detangle (Detangle)
+- Surface Detangle (Detangle): resolves self-intersections with the Detangle SOP, or with a point repulsion that pushes non-neighbouring points apart to a thickness.
- Surface Open
- Surface Remesh 1.0 and 1.1 (Remesh)
- Surface Subdivide (Subdivide)
diff --git a/otls-audit.md b/otls-audit.md
index 346044b..53056f5 100644
--- a/otls-audit.md
+++ b/otls-audit.md
@@ -17,6 +17,8 @@ Audit of every HDA in `otls/`, run 2026-09-14 against Houdini 22.0.429 (Indie) w
> | `developer_vector_from_scalar` | `developer_gradient 1.0` | `95abc44` |
> | `developer_vector_rotate` | `developer_rotate 1.0` | `95abc44` |
>
+> `developer_surface_detangle`'s Shapeshifter algorithm is built: a point repulsion over Iterations passes with Thickness in edge lengths and a Neighbour Rings exclusion, replacing the Not Implemented error. Section 4 now lists only the empty shells.
+>
> `developer_attribute_remap`'s Class (point, primitive, detail) and Type (float, vector) and `developer_normalize`'s Method (summation, maximum, range) are real menus now.
>
> `developer_attribute_clip` is built (an Attribute field and a clamp to Range); `developer_attribute_constant`'s Class and `developer_surface_remesh 1.0`'s Transfer Method drive their switches, which were fixed at input 0. What is left in section 4 is single-entry menus, empty shells and the unimplemented Detangle algorithm.
@@ -171,7 +173,6 @@ For each top-level parameter the audit looked for a channel reference from any c
| `developer_expire::1.0` | `attr` (empty shell) |
| `developer_lead::1.0` | `amt` |
| `developer_select::1.0` | `rnd_float_variation`, `rnd_float_variation_seed`, `rnd_float_multiplier`, `newparameter` (all read or removed in 1.1) |
-| `developer_surface_detangle::1.0` | `developer_iteration_ct` (the Shapeshifter algorithm is not implemented) |
| `developer_surface_suture::1.0` | none since the thresholds drive the fuse |
| `developer_weight::1.0` | `attr`, `multiplier` (empty shell) |
| `gem_build_area::1.0` | `machine`, `dimensions` |
diff --git a/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc b/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc
index fc2fad4..160fca4 100644
Binary files a/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc and b/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc differ