git.lucas.co / hou-control
SideFX Houdini customization package
git clone https://git.lucas.co/hou-control.git

commitd1675c67ee8ae0464dd4af21f741b2d230e5f909
parent82a463cdf7
authorLucas Galante <[email protected]>
date2026-09-16 14:14
developer_lead 1.1: Radius parameter, Amount blends

1.0 searched a fixed 0.05 world units around each point and replaced
the vector outright, ignoring Amount. 1.1 searches Radius average edge
lengths (nearest-neighbour spacing on a point cloud), treats an empty
Influence attribute as full influence, and blends the vector toward
the leading neighbour vector by Amount, so 0 leaves the field alone
and 1 matches 1.0's replacement. New minor version because Amount's
effect changed; 1.0 stays.

Verified: Amount 0 unchanged, 1 changes every point, 0.5 is the
midpoint, a radius shorter than an edge finds nothing, and point
clouds work.

Co-Authored-By: Claude Fable 5.1 <[email protected]>

 developer.md                                |   2 +-
 otls-audit.md                               |   3 +++
 otls/sop_lsgalante.developer_lead.1.1.hdalc | Bin 0 -> 8635 bytes
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/developer.md b/developer.md
index b9824ac..4efd656 100644
--- a/developer.md
+++ b/developer.md
@@ -83,7 +83,7 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
 - Expire
 - Gradient (Vector From Scalar): a unit vector along the slope of a scalar attribute, uphill or downhill, optionally along the surface and twisted about the normal.
 - ID
-- Lead
+- Lead 1.0 and 1.1: turns each vector toward the neighbouring vector that disagrees with it most, weighted by an influence attribute; 1.1 adds Radius in edge lengths and blends by Amount, which 1.0 ignored.
 - Measure: the Measure SOP; a primitive measurement is promoted to a detail attribute under the chosen name.
 - Metamax
 - Migrate 1.2 (Scalar Migrate, Vector Migrate): pushes an attribute's values along a per-point direction vector, by proximity or connectivity; the sender loses what the target gains.
diff --git a/otls-audit.md b/otls-audit.md
index 665c26d..76b1a70 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_lead 1.1` takes its radius from a parameter in edge lengths and blends by Amount; 1.0 had a fixed 0.05 radius and ignored Amount.
+>
 > `developer_vitality 1.1` counts into `_age0..2` to match `developer_attribute_initialize`; 1.0 stays for hips that read `_age1..3`.
 >
 > Alongside: `developer_attribute_composite` gained vector and further scalar operations (`ffd6c75`), `developer_analysis` writes its statistics into the `<attr>_info` dictionary that `developer_attribute_initialize` creates, whose range is one vector2 key (`8e87ec2`, `43ba011`). No hip in the repo used any removed type; hips elsewhere that did will load those nodes as empty placeholders.
@@ -301,6 +303,7 @@ The operator list in `developer.md` uses **Scalar** names (`Scalar Diffuse`, `Sc
 | `developer_gradient` | 1.0 | Sop | Developer | 1-1 | 8 | 0 | 0 | 0 | ok |
 | `developer_id` | 1.0 | Sop | Developer | 1-1 | 1 | 0 | 0 | 0 | ok |
 | `developer_lead` | 1.0 | Sop | Developer | 1-1 | 3 | 1 | 0 | 0 | ok |
+| `developer_lead` | 1.1 | Sop | Developer | 1-1 | 4 | 0 | 0 | 0 | ok |
 | `developer_measure` | 1.0 | Sop | Developer | 1-1 | 36 | 0 | 0 | 0 | ok |
 | `developer_metamax` | 1.0 | Sop | Developer | 1-1 | 3 | 0 | 0 | 1 | ok |
 | `developer_migrate` | 1.2 | Sop | Developer | 1-1 | 13 | 0 | 0 | 0 | ok |
diff --git a/otls/sop_lsgalante.developer_lead.1.1.hdalc b/otls/sop_lsgalante.developer_lead.1.1.hdalc
new file mode 100644
index 0000000..7585fb5
Binary files /dev/null and b/otls/sop_lsgalante.developer_lead.1.1.hdalc differ