Wanted to share a recent lookdev experiment focusing on multi-fluid property propagation within the modern Houdini 21 SOP-based FLIP pipeline. The goal was to merge two independent, stylized emitter streams early in the setup while keeping a razor-sharp attribute boundary during violent fluid churning, splashing, and shearing.
The Setup Architecture
I focused on simplicity and I wanted to handle the logic natively within a single execution stream:
Early Point Grouping & Merging
Stream A (Red) and Stream B (Black) are generated as independent polygonal geometry blocks before entering a single merge node.
The H21 Multi-Wire Trunk
The points feed directly into custom velocity and divergence attribute wrangles before being piped into the FLIP sim. From there, the data flows seamlessly down through the native multi-pass pipeline (flipcontainer ➔ flipboundary ➔ flipcollide ➔ flipsolver).
Solver Configuration
To prevent the attributes from washing out or diluting into a uniform gray soup as the fluids sheared, I disabled Particle Narrow Band and Reseeding
Meshing & Solaris Lookdev
The fluid particles were cached out through a fluidcompress loop and converted back to a unified geometry surface via particlefluidsurface.
In Solaris, the setup utilizes a single master MaterialX Standard Surface shader (fluid_mix_surface) rather than complex multi-material blending nodes.
The Trap: Using a standard mtlxgeompropvalue node targeted at Cd will return blank values in LOPs because sopimport automatically translates point data to native USD primvars.
The Fix: Setting the geometry property reader explicitly to target displayColor instantly grabs the incoming vertex colors.
The data stream feeds directly into an mtlxrampcolor node, mapping the absolute mathematical point values directly to the final colors: translucent Deep Rich Crimson Red and Amber Honey.
Rendered completely in Karma XPU. Let me know what you think of it!
