install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/TerminalSkills/skills/houdini" ~/.claude/skills/comeonoliver-skillshub-houdini && rm -rf "$T"
manifest:
skills/TerminalSkills/skills/houdini/SKILL.mdsource content
SideFX Houdini — Procedural 3D & VFX
You are an expert in SideFX Houdini, the industry-standard procedural 3D software used for VFX, simulations, motion graphics, game asset creation, and procedural modeling. You help artists and technical directors build procedural workflows using Houdini's node-based architecture, VEX scripting, Solaris/USD pipeline, simulation solvers (pyro, FLIP, Vellum, RBD), PDG/TOPs for task automation, and HDA (Houdini Digital Assets) for reusable tools — enabling non-destructive, art-directable pipelines that scale from indie projects to AAA and feature film production.
Core Capabilities
Node-Based Procedural Workflow
## Houdini's Philosophy: Everything is Procedural Unlike Maya or Blender where you sculpt directly, Houdini builds geometry through a chain of nodes. Change any parameter upstream and everything downstream updates automatically. ## Context Types (Network Levels) - **SOP** (Surface Operators): Geometry creation and manipulation - **DOP** (Dynamics Operators): Simulations (physics, fluids, cloth) - **CHOP** (Channel Operators): Animation, audio, motion - **COP** (Compositing Operators): Image processing - **VOP** (VEX Operators): Visual shader/expression building - **TOP/PDG** (Task Operators): Pipeline automation, batch processing - **LOP** (Lighting Operators): USD/Solaris scene assembly and rendering ## Example: Procedural City Generator (SOP) Grid → Divide (random) → Extrude (height from noise) → UV Project → Material Assign → Copy to Points (windows) → Scatter (trees on ground) → Merge
VEX Scripting
// VEX — Houdini's high-performance expression language // Runs per-point, per-primitive, or per-vertex in parallel // Wrangle SOP: Scatter points on terrain with slope-based density // Context: Point Wrangle (runs for each point) // Get terrain normal to determine slope vector nml = @N; float slope = 1.0 - dot(nml, {0, 1, 0}); // 0 = flat, 1 = vertical // Remove points on steep slopes (no trees on cliffs) if (slope > 0.6) { removepoint(0, @ptnum); return; } // Randomize scale based on position float seed = @ptnum * 13.37; float scale = fit01(rand(seed), 0.5, 1.5); // Random 0.5x–1.5x f@pscale = scale; // Assign tree type based on altitude float altitude = @P.y; if (altitude > 50) { i@tree_type = 1; // Pine (high altitude) } else if (altitude > 20) { i@tree_type = rand(seed + 1) > 0.5 ? 0 : 1; // Mixed } else { i@tree_type = 0; // Oak (low altitude) } // Color by type for viewport preview if (i@tree_type == 0) { @Cd = {0.2, 0.6, 0.1}; // Green (oak) } else { @Cd = {0.1, 0.4, 0.2}; // Dark green (pine) }
// Volume Wrangle: Custom noise field for pyro simulation // Creates art-directable turbulence float freq = chf("frequency"); // UI slider (1.0–10.0) float amp = chf("amplitude"); // UI slider (0.1–2.0) float offset = chf("time_offset") * @Time; // Animated offset int octaves = chi("octaves"); // Noise layers (3–8) // Layer multiple noise frequencies (fBm) float n = 0; float f = freq; float a = amp; for (int i = 0; i < octaves; i++) { n += a * onoise(@P * f + offset, 4, 0.5, 1.0); f *= 2.17; // Frequency doubling (slightly offset) a *= 0.45; // Amplitude decay per octave } // Write to density field f@density += n; // Temperature drives flame color (higher = brighter) f@temperature = fit(n, -0.5, 1.0, 0, 2.0);
Simulations
## Simulation Types ### Pyro FX (Fire, Smoke, Explosions) Pyro Source → Pyro Solver → Volume Visualization - Combustion model: temperature → burn → density - Shaping: disturbance, turbulence, shredding - Art direction: source attributes control flame shape and color ### FLIP Fluids (Water, Ocean, Lava) FLIP Source → FLIP Solver → Particle Fluid Surface (mesh) - Particle-based fluid simulation - Surface tension, viscosity, foam/spray/bubble whitewater - Ocean Spectrum for infinite procedural ocean ### Vellum (Cloth, Hair, Soft Body, Grains) Vellum Configure → Vellum Solver → Vellum Post-Process - Unified constraint-based solver - Cloth: garments, flags, tents - Hair/Fur: strand simulation with collision - Soft body: jelly, rubber, organic deformation - Grains: sand, snow, sugar ### RBD (Rigid Body Dynamics — Destruction) RBD Material Fracture → RBD Bullet Solver - Voronoi/Boolean fracturing - Constraints: glue, soft, hinge (break on impact) - Bullet solver for fast simulation - Debris, dust secondary effects ### Crowd Simulation Agent → Crowd Source → Crowd Solver - Thousands of autonomous agents - State machines for behavior (walk → run → fight) - Obstacle avoidance, terrain adaptation - Ragdoll on impact
Solaris / USD Pipeline
## Solaris (LOPs) — USD Scene Assembly Houdini's Solaris context works natively with Pixar's USD: Stage → Sublayer (characters.usd) → Sublayer (environment.usd) → Edit Material (override for this shot) → Camera → Render (Karma) ### Key Concepts - **Layer stacking**: Non-destructively override properties per shot/sequence - **Collection**: Group prims for material/light assignment - **Instancing**: Millions of trees/rocks with minimal memory - **Karma renderer**: Production path-tracer (CPU + GPU) - Karma XPU: GPU-accelerated, interactive quality preview - Karma CPU: Final quality, subsurface scattering, volumes ### Pipeline Integration - Import: Alembic (.abc), FBX, OBJ, glTF, USD - Export: USD, Alembic, FBX, OBJ, glTF (via ROP/FILM) - Render: Karma, Redshift, Arnold, RenderMan, V-Ray, Octane - Engine: Unity, Unreal (Houdini Engine plugin)
PDG / TOPs (Pipeline Automation)
## PDG (Procedural Dependency Graph) — Batch Processing TOPs automate repetitive tasks across a pipeline: ### Example: Generate 1000 Game Assets File Pattern (terrain heightmaps) → HDA Processor (generate terrain mesh from heightmap) → HDA Processor (scatter vegetation) → HDA Processor (LOD generation: high/med/low) → ROP Geometry (export .fbx per LOD) → Image Magick (generate thumbnails) → CSV Output (asset manifest) ### Use Cases - Batch render 500 product variations (color × material × angle) - Generate LODs for 2000 game assets overnight - Process satellite data into terrain tiles - Render all shots in a sequence across farm machines - Data visualization: process CSV → 3D chart for each region ### Farm Integration - HQueue (Houdini's scheduler) - Deadline, Tractor, Royal Render - AWS/GCP cloud rendering
Houdini Digital Assets (HDAs)
## HDAs — Reusable Procedural Tools Package a node network as a black-box tool with a custom UI: ### Example: Building Generator HDA Inputs: footprint curve, style preset Parameters: floor count, window density, facade material, roof type Output: textured building geometry with LODs ### Benefits - Share tools across team without exposing internals - Version control: HDA versioning system built in - Engine integration: HDAs work in Unity/Unreal via Houdini Engine - Non-technical users get simple parameter UI - Lock/unlock for IP protection ### Houdini Engine - Unity plugin: Drop HDA into Unity, tweak parameters, bake geometry - Unreal plugin: Same workflow, generates Unreal assets - Game teams use HDAs for procedural level generation at runtime
Python Scripting
# Houdini Python API (hou module) import hou # Create geometry programmatically geo = hou.node("/obj").createNode("geo", "my_geo") box = geo.createNode("box") box.parm("sizex").set(2.0) box.parm("sizey").set(3.0) # Add noise displacement mountain = geo.createNode("mountain") mountain.setInput(0, box) mountain.parm("height").set(0.5) mountain.parm("freq").set(3.0) # Set display flag mountain.setDisplayFlag(True) mountain.setRenderFlag(True) # Batch parameter changes with hou.undos.group("Setup Parameters"): for parm_name, value in params.items(): node.parm(parm_name).set(value) # Access geometry data geo_data = mountain.geometry() for point in geo_data.points(): pos = point.position() normal = point.attribValue("N")
Installation
# Download from https://www.sidefx.com/download/ # Editions: - Houdini Apprentice: FREE (non-commercial, watermarked renders) - Houdini Indie: $269/year (revenue < $100K) - Houdini Core: $2,495/year (modeling, animation, no simulations) - Houdini FX: $4,495/year (full, including all solvers) # Houdini Engine (for Unity/Unreal): - Free with any Houdini license - Indie Engine: $99/year # Command line rendering hython render_script.py # Python scripting hbatch -c "render /out/mantra1" # Batch render husk scene.usd -o render.exr # Karma USD render
Best Practices
- Think procedurally — Build systems that generate results, not hand-crafted one-offs; every parameter should be art-directable
- VEX over Python for geometry — VEX is multithreaded and 10-100x faster than Python for per-point operations
- HDAs for reuse — Package any reusable workflow as an HDA; version it, share it, use it in game engines
- Attribute-driven workflow — Store data as point/prim attributes; downstream nodes read attributes to make decisions
- PDG for batching — Use TOPs to parallelize rendering, asset generation, and data processing across cores or farm
- USD/Solaris for lookdev — Use Solaris for scene assembly, material assignment, and lighting; non-destructive USD layers
- Simulation caching — Always cache simulation results to disk; re-simulating is expensive, cached playback is instant
- Start with Apprentice — Free license has all features; only limitation is watermarked renders and limited resolution