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

commit5cdca276c489d18e1d5f6a7bde225d6f21b78f5f
parentfc28db85ce
authorLucas Galante <[email protected]>
date2026-09-16 14:21
developer_attribute_combine: the Weights scale their attributes

Weight 0 and Weight 1 were never read. Each attribute is now multiplied
by its Weight before the operation, in all eight type-pairing
wrangles. Defaults of 1 leave existing instances unchanged, so the
version stays 1.0.

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

 developer.md                                        |   2 +-
 otls-audit.md                                       |   3 ++-
 ..._lsgalante.developer_attribute_combine.1.0.hdalc | Bin 24445 -> 24543 bytes
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/developer.md b/developer.md
index c975977..49afdf3 100644
--- a/developer.md
+++ b/developer.md
@@ -100,7 +100,7 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
 
 ### Developer/Attribute
 - Attribute Clip
-- Attribute Combine (Combine)
+- Attribute Combine (Combine): combines two weighted attributes, float or vector, with an operation, or mixes a vector from their components.
 - Attribute Composite (Scalar Composite, Vector Composite): folds an operation across weighted attributes: set, add, subtract, multiply, divide, minimum, maximum, average, difference, screen, mix, cross, dot, distance, angle, project, length, normalize.
 - Attribute Constant (Constant)
 - Attribute Initialize (Scalar Initialize, Vector Initialize): one tab per float, vector or integer attribute; creates it from a constant or a source attribute with optional noise variation, plus an `<attr>_info` dictionary holding its range and any zeroed age attributes.
diff --git a/otls-audit.md b/otls-audit.md
index 064bf73..51bfb74 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_attribute_combine` multiplies each attribute by its Weight before the operation.
+>
 > `developer_analysis` gained a working Class Edge (edge-length statistics into `edges_info`) and Element folder (change, direction and previous value against the second input); the audit's Analysis rows are updated.
 >
 > `developer_select 1.1` reads the random Variation, its seed and Multiplier, builds Random Vector and drops the `newparameter` placeholder; `developer_surface_suture` fuses points past Fusion Threshold within Distance Threshold; `developer_time` and `developer_time_ramp` honour the start of Range.
@@ -158,7 +160,6 @@ For each top-level parameter the audit looked for a channel reference from any c
 | node | unreferenced parameters |
 |---|---|
 | `developer_attribute_clip::1.0` | `range` |
-| `developer_attribute_combine::1.0` | `input_0`, `type_0`, `weight_0`, `x_0`, `y_0`, `z_0`, `input_1`, `type_1`, `weight_1`, `x_1`, `y_1`, `z_1` |
 | `developer_attribute_constant::1.0` | `class` |
 | `developer_attribute_remap::1.0` | `class`, `type` |
 | `developer_charge::1.0` | `release`, `amount` |
diff --git a/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc
index 1ddfa07..aa423e5 100644
Binary files a/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc and b/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc differ