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

commit5916f489d69813b0ac5eede9aade8348a8303ad8
parent730e12c74b
authorLucas Galante <[email protected]>
date2026-09-17 16:20
developer_visualize: draws a solver's Vis tabs anywhere in the chain

A new node that reads the Vis tabs of the Developer Solver it points
at (default ../../.., the solver from inside its chain) and does the
drawing on the geometry passing through: Color tabs composited into
Cd with the solver's base, bounds, ramps, blends and opacities, and
the visualizer detail attribute set so the solver's marker
visualizers draw. The path is resolved on the node itself through a
hidden opfullpath parameter, since a relative path read from a wrangle
inside resolves against the wrangle.

Developer Solver's default chain now has one wired in before OUT, so
every node inside the chain can show the attributes as they are at
that point by taking the display flag, and the solver no longer
composites at its own output; it only adds the marker reference when
nothing in the chain has. Same version: the Vis tabs are unchanged,
and the change to what the output carries applies only to new
instances (an existing chain has no Visualize node until one is
added).

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

 developer.md                                     |   3 ++-
 otls-audit.md                                    |   3 +++
 otls/sop_lsgalante.developer_solver.1.0.hdalc    | Bin 26612 -> 25701 bytes
 otls/sop_lsgalante.developer_visualize.1.0.hdalc | Bin 0 -> 8363 bytes
 4 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/developer.md b/developer.md
index 443f0fe..aa393d2 100644
--- a/developer.md
+++ b/developer.md
@@ -92,8 +92,9 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
 - Release
 - Rotate (Vector Rotate): rotates a vector attribute about an axis attribute or a constant axis by an angle in degrees.
 - Select 1.0 and 1.1: creates a float or vector attribute from a constant, another attribute, a dot or cross product, or a random draw; 1.1 reads the random Variation and Multiplier and builds Random Vector.
-- Solver: runs the per-frame chain on the previous frame's geometry; its Visualize tabs composite float and integer attributes into Cd through ramps, several at once, and draw vector attributes as markers (this replaced the Panel node in September 2026).
+- Solver: runs the per-frame chain on the previous frame's geometry; its Vis tabs describe how float and integer attributes are composited into Cd through ramps, several at once, and how vector attributes are drawn as markers; the drawing is done by Visualize nodes in the chain (this replaced the Panel node in September 2026).
 - Submute Begin / Submute End
+- Visualize: draws a Developer Solver's Vis tabs on the geometry passing through, composited Cd and the marker reference; a new solver has one wired in before OUT, and more can be placed anywhere in the chain.
 - Vitality 1.0 and 1.1: age counters for an attribute; 1.1 writes `_age0..2` to match Attribute Initialize, 1.0 wrote `_age1..3`.
 - Weight (Scalar Weight, Vector Weight)
 
diff --git a/otls-audit.md b/otls-audit.md
index b82ab08..df7022c 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_visualize` (2026-09-17) does the drawing for a solver's Vis tabs wherever it sits in the chain; a new `developer_solver` has one before OUT and no longer composites at its own output.
+>
 > `developer_panel` is removed (2026-09-17): its tabs live on `developer_solver`'s Visualize folder, where Color tabs are composited into `Cd` by a wrangle after the simulation (several at once, with blend and opacity) and Marker tabs keep a Houdini marker visualizer on the solver node.
 >
 > `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.
@@ -336,6 +338,7 @@ The operator list in `developer.md` uses **Scalar** names (`Scalar Diffuse`, `Sc
 | `developer_time_analysis` | 1.0 | Sop | Developer/Time | 1-1 | 2 | 0 | 0 | 0 | ok |
 | `developer_time_ramp` | 1.0 | Sop | Developer/Time | 0-0 | 3 | 0 | 0 | 0 | ok |
 | `developer_time_switch` | 1.0 | Sop | Developer/Time | 1-2 | 4 | 0 | 0 | 0 | ok |
+| `developer_visualize` | 1.0 | Sop | Developer | 1-1 | 1 | 0 | 0 | 0 | ok |
 | `developer_vitality` | 1.0 | Sop | Developer | 1-2 | 1 | 0 | 0 | 0 | ok |
 | `developer_vitality` | 1.1 | Sop | Developer | 1-2 | 1 | 0 | 0 | 0 | ok |
 | `developer_volume_miasma` | 1.0 | Sop | Developer/Volume | 0-1 | 0 | 0 | 0 | 1 | ok |
diff --git a/otls/sop_lsgalante.developer_solver.1.0.hdalc b/otls/sop_lsgalante.developer_solver.1.0.hdalc
index f7a78c4..2fdc704 100755
Binary files a/otls/sop_lsgalante.developer_solver.1.0.hdalc and b/otls/sop_lsgalante.developer_solver.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_visualize.1.0.hdalc b/otls/sop_lsgalante.developer_visualize.1.0.hdalc
new file mode 100644
index 0000000..7eae534
Binary files /dev/null and b/otls/sop_lsgalante.developer_visualize.1.0.hdalc differ