SideFX Houdini customization package
git clone https://git.lucas.co/hou-control.git
otls: Diffuse, Concentrate, Migrate and Bleed handle integer attributes
An integer attribute used to take the float path and be truncated on
write, so a lone 1 vanished and anything above 1 was clamped. Each
node now tests the attribute's type: an integer is an unbounded count,
computed in float and written back rounded, never clamped to 0..1.
Diffuse moves it by Rate times its distance from the neighbour
average (Global: a tenth of Gain of its distance from Goal), since the
float step of Rate/50 rounds to nothing. Concentrate's Global pushes
it by a tenth of Intensity of its distance from Cutoff, at least one
unit. Migrate sends whole units so the total stays integral. Bleed
rounds, so a small count only bleeds when the amount removes at least
half a unit. Float and vector paths are untouched; same versions.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
developer.md | 10 +++++-----
otls/sop_lsgalante.developer_bleed.1.0.hdalc | Bin 6847 -> 7022 bytes
otls/sop_lsgalante.developer_concentrate.1.0.hdalc | Bin 11580 -> 11797 bytes
otls/sop_lsgalante.developer_diffuse.1.0.hdalc | Bin 10101 -> 10505 bytes
otls/sop_lsgalante.developer_migrate.1.2.hdalc | Bin 15517 -> 15699 bytes
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/developer.md b/developer.md
index 518f71f..443f0fe 100644
--- a/developer.md
+++ b/developer.md
@@ -56,7 +56,7 @@ Global attributes useful for storing statistics and analyses.
## Attribute Categories
### Scalar and Vector
-One set of attribute operators serves both. Each reads the attribute's size at cook time: a float is treated as a value in 0..1 and kept there, a vector is handled componentwise, or by its length and direction where that is the natural reading (Concentrate's Global method, Align, Bleed). The separate Scalar and Vector operator families that existed until September 2026 were merged, and the vector-only operators were merged by function (see Operators).
+One set of attribute operators serves all three. Each reads the attribute's size and type at cook time: a float is treated as a value in 0..1 and kept there, an integer is an unbounded count computed in float and written back rounded (Migrate sends whole units so totals stay integral), a vector is handled componentwise, or by its length and direction where that is the natural reading (Concentrate's Global method, Align, Bleed). The separate Scalar and Vector operator families that existed until September 2026 were merged, and the vector-only operators were merged by function (see Operators).
### Surface
Operators that use input attributes to alter geometry topology.
@@ -73,12 +73,12 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
### Developer
- Align (Vector Conform, Vector Direct, Vector Unify): steers a vector attribute toward a list of targets in order: local average, global average, a constant, another attribute, or the surface tangent.
- Analysis (Scalar Analysis, Vector Analysis): writes min, max, sum, average, ratio and spread of a point attribute into its `<attr>_info` dictionary, or of the mesh's edge lengths into `edges_info`; the Element folder compares against the previous frame.
-- Bleed (Scalar Bleed): decays an attribute toward zero by a per-frame amount.
+- Bleed (Scalar Bleed): decays a float, integer or vector attribute toward zero by a per-frame amount.
- Charge
-- Concentrate (Scalar Concentrate, Vector Concentrate): sharpens an attribute against its neighbours, globally, by distance or by connectivity.
+- Concentrate (Scalar Concentrate, Vector Concentrate): sharpens a float, integer or vector attribute against its neighbours, globally, by distance or by connectivity.
- Cull
- Develop
-- Diffuse (Scalar Diffuse, Vector Diffuse): smooths an attribute toward its neighbours, by distance, connectivity or a global goal.
+- Diffuse (Scalar Diffuse, Vector Diffuse): smooths a float, integer or vector attribute toward its neighbours, by distance, connectivity or a global goal.
- Embryo: the seed geometry, a sphere or the second input, used as is or scattered and hulled, then relaxed and subdivided.
- 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.
@@ -86,7 +86,7 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
- 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: running minimum and maximum of an attribute across a frame range, as detail attributes; can read the range's end frame from outside the solver.
-- 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.
+- Migrate 1.2 (Scalar Migrate, Vector Migrate): pushes a float, integer or vector attribute's values along a per-point direction vector, by proximity or connectivity; the sender loses what the target gains.
- Normalize (Scalar Normalize, Vector Normalize): rescales a float attribute by its sum, maximum or range to a target, or makes a vector attribute unit length.
- Region Center
- Release
diff --git a/otls/sop_lsgalante.developer_bleed.1.0.hdalc b/otls/sop_lsgalante.developer_bleed.1.0.hdalc
index b737284..0c2bdd9 100644
Binary files a/otls/sop_lsgalante.developer_bleed.1.0.hdalc and b/otls/sop_lsgalante.developer_bleed.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_concentrate.1.0.hdalc b/otls/sop_lsgalante.developer_concentrate.1.0.hdalc
index fe521b3..5918d3a 100644
Binary files a/otls/sop_lsgalante.developer_concentrate.1.0.hdalc and b/otls/sop_lsgalante.developer_concentrate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_diffuse.1.0.hdalc b/otls/sop_lsgalante.developer_diffuse.1.0.hdalc
index 7eea581..9f771df 100644
Binary files a/otls/sop_lsgalante.developer_diffuse.1.0.hdalc and b/otls/sop_lsgalante.developer_diffuse.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_migrate.1.2.hdalc b/otls/sop_lsgalante.developer_migrate.1.2.hdalc
index 68d8f0e..7a72cb9 100644
Binary files a/otls/sop_lsgalante.developer_migrate.1.2.hdalc and b/otls/sop_lsgalante.developer_migrate.1.2.hdalc differ