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

developer.md (8.4K)

  1 # Shapeshifter - Developer Plugin Design Document
  2 
  3 Version 0.1 | Author: Lucas Galante | December 2025 (operator list updated September 2026)
  4 
  5 ## Overview
  6 
  7 Developer operators combined in SOP solver and DOP contexts in Houdini. Creating lifelike elements in digital containers.
  8 
  9 ## Data Types
 10 
 11 ### 1. Live Data
 12 Fluid data which runs like a stream through the simulation.
 13 
 14 ### 2. Derivative Data
 15 Data calculated anew every frame based on live data.
 16 
 17 ## Regions
 18 
 19 After making the GEM mold operators, there is more experience with treating a model as a composite of distinct parts and overlapping attributes. Regions in a model are like organs -- they fit together physically and programmatically.
 20 
 21 Living models host mechanisms which influence their status. Morphogen gradients demonstrate how distribution of matter on one scale can influence form on another scale.
 22 
 23 A living model's boundaries are predictable before they exist -- they require an environment supplying real elements, but information about where those elements will go is present ahead of time.
 24 
 25 ## Operator Categories
 26 
 27 ### Pre-Simulation
 28 The embryo or seed is created. Initial selections, value assignments, and attributes are introduced. Sets the characteristics and landscape of the simulation before it runs.
 29 
 30 ### Simulation Attribute Operators
 31 Operate on simulation attributes that persist from the end of one frame to the beginning of another.
 32 
 33 ### Development Attribute Operators
 34 Composite simulation attributes into development attributes. Development attributes are cleared each frame and must be reconstructed. They tell the surface development operators how the surface will change.
 35 
 36 ### Surface Development Operators
 37 Read development attributes and use that information to transform the mesh or volume. Position and normal are changed; other attributes are untouched.
 38 
 39 ### Meshing Operators
 40 Adjust topology of geometry to keep primitives and points proportional to surface area.
 41 
 42 ## Geometry Classes
 43 
 44 ### Points
 45 The majority of nodes operate on point attributes. The keystone is the develop and remesh node pair.
 46 
 47 ### Vertices
 48 No well-defined use cases yet.
 49 
 50 ### Primitives
 51 Waiting for a clear use case.
 52 
 53 ### Detail
 54 Global attributes useful for storing statistics and analyses.
 55 
 56 ## Attribute Categories
 57 
 58 ### Scalar and Vector
 59 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).
 60 
 61 ### Surface
 62 Operators that use input attributes to alter geometry topology.
 63 
 64 ### Volume
 65 Operators that modify volumes in tandem with mesh geometry. Not yet fleshed out.
 66 
 67 Looking ahead: Volumes can be reservoirs of value. Vector directs value to flow inside geometry (Shapeshifter Core) or away from the surface (Shapeshifter Miasma).
 68 
 69 ## Operators
 70 
 71 Names are the tab-menu labels without the "Developer" prefix; the file in `otls/` is `sop_lsgalante.developer_<name>.<version>.hdalc`. Grouped by tab-menu submenu. Where an operator replaced earlier ones, the old names follow in parentheses.
 72 
 73 ### Developer
 74 - 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.
 75 - 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.
 76 - Bleed (Scalar Bleed): decays a float, integer or vector attribute toward zero by a per-frame amount.
 77 - Charge
 78 - Concentrate (Scalar Concentrate, Vector Concentrate): sharpens a float, integer or vector attribute against its neighbours, globally, by distance or by connectivity.
 79 - Cull
 80 - Develop
 81 - Diffuse (Scalar Diffuse, Vector Diffuse): smooths a float, integer or vector attribute toward its neighbours, by distance, connectivity or a global goal.
 82 - Embryo: the seed geometry, a sphere or the second input, used as is or scattered and hulled, then relaxed and subdivided.
 83 - Expire
 84 - 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.
 85 - ID
 86 - 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.
 87 - Measure: the Measure SOP; a primitive measurement is promoted to a detail attribute under the chosen name.
 88 - 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.
 89 - 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.
 90 - 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.
 91 - Region Center
 92 - Release
 93 - Rotate (Vector Rotate): rotates a vector attribute about an axis attribute or a constant axis by an angle in degrees.
 94 - 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.
 95 - 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).
 96 - Submute Begin / Submute End
 97 - 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.
 98 - 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`.
 99 - Weight (Scalar Weight, Vector Weight)
100 
101 ### Developer/Attribute
102 - Attribute Clip: clamps a float or vector attribute to a range.
103 - Attribute Combine (Combine): combines two weighted attributes, float or vector, with an operation, or mixes a vector from their components.
104 - 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.
105 - Attribute Constant (Constant): a float or vector attribute holding one value, on points, primitives or the detail.
106 - 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.
107 - Attribute Promote
108 - Attribute Remap (Scalar Map, Scalar Ramp): fits a float or vector attribute on points, primitives or the detail from one range to another, optionally through a ramp.
109 
110 ### Developer/Surface
111 - Surface Adapt
112 - Surface Detangle (Detangle): resolves self-intersections with the Detangle SOP, or with a point repulsion that pushes non-neighbouring points apart to a thickness.
113 - Surface Open
114 - Surface Remesh 1.0 and 1.1 (Remesh)
115 - Surface Subdivide (Subdivide)
116 - Surface Suture: resolves collisions against the previous frame and fuses points that keep colliding within a distance.
117 
118 ### Developer/Time
119 - Time: a detail attribute running 0 to 1 across a frame range.
120 - Time Analysis
121 - Time Ramp: the same through a ramp.
122 - Time Switch
123 
124 ### Developer/Volume
125 - Core
126 - Volume Miasma: converts the input surface to a VDB; a first step for value leaving the surface.
127 
128 ### Not built
129 Ideas from the first draft with no node behind them: Energize, Edge Analysis, Analyze Change, Region (only Region Center exists).