To simulate a milk splash into coffee in Houdini, treat the effect as a product shot rather than an open-ended fluid experiment. Lock the camera and impact timing, work at real-world scale, build dependable collision volumes, and shape the splash primarily through the milk source’s diameter, velocity and angle. A staged FLIP workflow then lets you approve the main crown and ripples before spending time on tendrils, droplets, mixing and foam.
This advanced workflow covers the complete production path: vessel preparation, fluid sourcing, FLIP solver decisions, attribute-based milk and coffee separation, caching, surface reconstruction, liquid shading and failure diagnosis. The objective is not maximum turbulence. It is a controllable splash with a strong silhouette, readable material contrast and enough fine detail to survive meshing, motion blur and final-resolution rendering.
Plan the Coffee Splash Before Building the FLIP Network
The final camera, edit and silhouette determine how much simulation detail the shot needs. Establish the delivery frame rate and frame range, then identify three events: first contact between milk and coffee, the peak of the crown or airborne splash, and the point at which the surface begins to settle. These markers provide concrete targets for the source animation and cache range.
Lock the camera and hero action
Choose the camera before refining the fluid. A long lens at a shallow angle can make the crown and airborne droplets readable with limited perspective distortion. A higher, near-orthographic product view emphasizes the coffee surface, milk pattern and cup design. A wider lens reveals more of the pour and saucer, but it also exposes collision errors, incomplete vessel geometry and missing secondary detail.
Describe the hero action in one sentence—for example: “A narrow milk stream strikes the coffee, forms a compact crown, throws several droplets above the rim and resolves into a pale swirl.” This prevents the simulation from becoming a collection of competing effects. Decide whether the shot is primarily about the continuous pour, the impact crown, the surface ripple, the milk-and-coffee transition or a carefully controlled silhouette around the cup.
Block the cup, saucer, emitter and camera with simple geometry, then preview them at the final output resolution. Fine breakup that looks impressive in the viewport may disappear under motion blur or depth of field. Conversely, one oversized droplet can become a distracting shape in the finished composition.
Match real-world scale and analyze reference
Model the cup, liquid depth and milk stream at plausible dimensions. FLIP behavior depends on the relationship between scene scale, gravity, particle separation, collision thickness, source velocity, viscosity and surface tension. Scaling the vessel after tuning the solver can make the same setup feel sticky, explosive or unnaturally slow.
Study reference for features the camera can actually resolve:
- the diameter and continuity of the incoming stream;
- the width, height and thickness of the impact crown;
- the delay between contact, sheet formation and breakup;
- the number, scale and trajectories of visible droplets;
- the wavelength and decay of surface ripples; and
- the way pale milk initially remains coherent before dispersing into coffee.
Connected sheets, rims and tendrils are more important than a cloud of random particles. Reference from other liquid-heavy advertising workflows, such as fruit CGI with juice splashes, can also help distinguish purposeful hero shapes from background breakup.
Separate physical simulation from art direction early. The stream, impact depression, crown and displaced coffee should normally emerge from one coherent FLIP solve. Selected droplets, foam and small silhouette adjustments can be added later, provided they retain the timing and direction established by the primary event.
Prepare the Cup, Coffee Volume and Milk Source
A render-ready cup is not automatically a reliable FLIP collider. Maintain separate render and simulation branches: the render branch can retain porcelain bevels, manufacturing details and fine saucer geometry, while the simulation branch should be simple, watertight and easy to inspect.
Build dependable collision geometry
Create a simplified collider for the cup’s interior wall, base and rim, plus any saucer or tabletop area that airborne droplets might reach. Check for open boundaries, non-manifold edges, overlapping shells and inconsistent normals before generating the collision representation. A cup can appear closed in the viewport while still producing an ambiguous signed-distance field.
For a static vessel, a clean collision SDF is generally easier to diagnose than a dense render mesh. Visualize the volume used by the solver rather than assuming the conversion succeeded. The interior cavity must remain open to the fluid while the walls and base form a continuous barrier.
Judge collision resolution and padding relative to particle separation. Excessive padding makes the liquid float away from the porcelain. Too little thickness can allow fast particles to cross the wall, particularly around a narrow rim. Features smaller than the effective particle and volume resolution cannot be expected to collide reliably.
If the cup or saucer moves, supply dependable collider velocities. An animated surface without matching velocity information may inject or remove momentum incorrectly. Test moving collisions with a low-resolution particle drop before adding the milk source; this isolates collider problems from sourcing and solver behavior.
Initialize the coffee as a volume
The coffee should be a closed initial fluid region, not a thin surface patch. Give it enough depth to absorb the incoming momentum without immediately exposing the cup base. Set the fill level below the rim with sufficient headroom for the displaced volume, crown and first outward wave.
You can derive the coffee region from the cup interior and trim it at the desired height, or model a separate closed volume for more control over the meniscus. Inspect the resulting source at the intended particle separation. Holes, isolated fragments and a poorly resolved boundary can produce an uneven initial particle distribution before the impact even begins.
Design a controllable milk emitter
Use a tube, swept curve or shaped source volume whose cross-section matches the intended pour. A blunt emitter tends to inject a plug of fluid, while an extremely narrow source may be lost through coarse particle sampling or reseeding. Keep source diameter, orientation, velocity and activation timing as independent controls.
The velocity field matters more than the emitter’s visual orientation. A vertical tube with substantial lateral velocity behaves differently from a diagonal source whose velocity follows its axis. Define the downward and lateral components explicitly, and inspect the velocity vectors before simulating.
Begin with a continuous, clean source and a controlled activation ramp. Once the impact works, introduce restrained variation through source shaping, velocity modulation or a slightly irregular cross-section. Starting with noisy emission makes it difficult to determine whether an unwanted splash came from the source or the solver.
Run a coarse verification cache before adjusting fine fluid properties. Confirm that:
- Emission starts without a hidden first-frame burst.
- The source does not intersect the rim or begin inside the collision volume.
- The stream reaches the intended point on the coffee surface.
- The displaced coffee remains inside the vessel.
- Animated colliders transfer the expected motion.
- The main splash direction is correct through the render camera.
Represent milk and coffee in one coherent fluid
For most beverage advertising shots, the practical approach is a single interacting FLIP fluid with attributes identifying the initial coffee and incoming milk. Both liquids share one velocity and pressure solve, producing a coherent free surface without the complexity of maintaining two independent interfaces.
Assign a source mask or scalar attribute—such as milkmask—to milk particles and initialize it to zero for the coffee. Preserve and advect it through the simulation for diagnostics, meshing and shading. Also retain useful attributes such as v, id and an authored age value where the workflow supports them.
This mask is an artistic and diagnostic label, not a complete physical mixing model. Reseeding, interpolation and surface reconstruction can soften or disrupt it. Check attribute behavior at every cache boundary rather than assuming custom data will survive automatically.
A more elaborate multi-fluid setup may be justified when the liquids require markedly different behavior or a persistent interface. It also adds sourcing, solver and meshing complexity. For a short milk-and-coffee impact, one FLIP solve with controlled attribute blending is usually more robust. Similar material-separation decisions appear in cocktail CGI with layered liquids, although a coffee splash generally needs a faster transition from separation to mixing.
Simulate and Shape the Primary Splash
Build the first simulation around timing and silhouette, not maximum particle count. The stream should create a readable depression, crown and outward wave without turning the full coffee volume into uncontrolled spray.
Tune impact energy at low resolution
Source diameter, velocity, angle and emission rate are the main controls over impact energy. A faster or thicker stream carries more momentum. A near-vertical impact tends to concentrate the crown, while a shallow angle produces stronger lateral flow and an asymmetric wave.
Change one factor at a time and cache short wedges around the impact. Expose these controls on the source asset or shot-level interface:
- source activation and deactivation frames;
- stream diameter and taper;
- impact position and angle;
- initial velocity magnitude and direction;
- coffee fill depth; and
- fluid properties that materially affect breakup.
Shape the response in stages. First establish the contact frame and depression. Next tune the crown height and thickness. Then evaluate the outward-moving ripple and settling motion. This order prevents secondary spray from hiding a weak primary impact.
Set particle separation and substeps deliberately
Choose particle separation from the smallest feature that must survive: perhaps the crown rim, a hero tendril or a prominent airborne droplet. Reducing separation increases particle count, memory use, collision cost and meshing time. It may also reveal collision gaps or alter breakup, so a high-resolution run is not simply a smoother version of the preview.
Use enough substeps to resolve the fastest source and collision events. If the stream moves a large fraction of its diameter—or crosses a thin collision feature—in one frame, missed contacts and unstable pressure behavior become more likely. Raising substeps can improve temporal sampling, but it cannot repair an incorrectly scaled scene, an intersecting emitter or an under-resolved collider.
A reduced time scale can help diagnose instability, but changing it also changes how forces and source animation are sampled. Treat it as a test and art-direction control rather than a substitute for a sound setup.
Balance reseeding, viscosity and surface tension
Reseeding can maintain particle coverage when sheets stretch and separate. Aggressive reseeding, however, may alter custom source attributes, homogenize the particle distribution or remove useful isolated droplets. Compare short tests with different reseeding behavior before committing to the hero cache.
Use viscosity as a shaping parameter. More viscosity can preserve a continuous milk stream and reduce chaotic breakup, but too much produces heavy strands and suppresses the crown. Surface tension can pull sheet edges into rims and encourage droplet formation; excessive tension creates rounded blobs and collapses thin tendrils prematurely.
These controls are scale-dependent and should be tested in the final scene rather than copied from an unrelated setup. A thick-fluid workflow such as a Houdini honey pour simulation may use similar tools, but its viscosity and breakup targets differ substantially from milk entering coffee.
If the entire coffee body erupts, reduce source momentum or emitted volume before adding arbitrary damping. Check the fill depth, impact position and scale as well. The desired result is usually a localized crown followed by controlled ripples, not a uniformly energetic surface.
Evaluate the silhouette through the render camera
Review each version against a simple cup and neutral liquid shader through the approved camera. A crown that reads clearly in a side viewport may sit entirely behind the cup rim. A modest sheet can become the shot’s defining shape when seen at a grazing angle.
Use temporary visualizations to understand the particle motion:
- color particles by
milkmaskto track the incoming fluid; - isolate high-velocity particles to inspect energetic breakup;
- group particles above the coffee surface to evaluate airborne motion;
- use
idto follow individual particles between frames; and - display age or source proximity to separate new emission from displaced coffee.
Preserve some milk identity in the stream, crown highlights and selected tendrils, but allow the impact zone to become mixed. A perfectly hard white boundary looks graphic; erasing the mask immediately makes the action difficult to read. The transition should be designed for the shot duration and camera scale.
Add Tendrils, Droplets, Mixing and Foam
Secondary detail should reinforce the main splash rather than cover it. Separate hero forms that belong to the primary surface from smaller background breakup that can be generated or adjusted after the main FLIP cache.
Keep hero droplets connected to the primary simulation
Large droplets near the impact, the crown rim and any tendrils that cast important shadows should normally remain part of the main FLIP solve. Their trajectories arise from the same velocity and pressure field as the crown, which helps the event feel connected.
Before creating a secondary pass, determine where missing detail was lost. A droplet may never have existed in the particle cache, or it may have been removed during meshing, smoothing, motion blur or final-resolution sampling. Adding more particles will not fix an overly aggressive surface filter.
Generate controlled secondary breakup
For smaller droplets, derive candidate points from the approved particle or surface cache. Filter them using combinations of velocity, curvature, height, age and distance from the impact. These masks can drive a POP pass, instancing system or narrowly targeted secondary FLIP source.
- Velocity: favor energetic crown and tendril regions while excluding the calm coffee surface.
- Curvature: target narrow ridges and sharply bending sheets where breakup is plausible.
- Height: separate visible airborne droplets from low particles hidden behind the rim.
- Age: prevent secondary particles from persisting as a cloud after the splash settles.
- Impact distance: keep dense breakup near the contact zone and sparse detail elsewhere.
Inherit v, material masks and a stable seed from the primary cache. Give hero droplets and background spray separate density, scale and lifetime controls. If the secondary pass competes with the crown, reduce its emission area or use a camera-aware mask instead of shrinking every droplet uniformly.
Control milk mixing without a hard material seam
Transfer the milk mask from particles to the reconstructed surface or to supporting volumes. Use smooth ranges rather than binary thresholds, which tend to flicker as particles move and the surface topology changes. If necessary, combine the source mask with distance from the impact, fluid depth and age to create a stable art-directed transition.
Think in terms of three regions: milk-dominant, coffee-dominant and mixed. The mask can blend color, absorption, scattering and roughness without creating separate geometric surfaces. Controlled diffusion or temporal fading can soften the distinction after impact, while the incoming stream retains a clearer milk identity.
Treat foam as a surface layer
Foam rarely needs to become another fully simulated fluid. Derive a foam mask from recent impact, high curvature, air-exposed ridges or strong surface motion. Use it to drive points, procedural patches, shallow displacement or a material contribution attached to the moving surface.
Vary foam scale, age, orientation and opacity, and remove it from submerged or calm areas. Avoid a uniform field of identical spheres. The foam should provide scale and breakup around the impact without flattening the material distinction between milk and coffee.
Cache and Version the Simulation for Production
Once timing and silhouette are approved, turn the setup into a reproducible handoff. Cache particles before meshing so the surface can be rebuilt without rerunning the simulation. Preserve the custom attributes needed for mixing, foam and diagnostics.
Record the following information with every meaningful version:
- Houdini version and relevant solver configuration;
- source and collider asset versions;
- frame range and preroll;
- particle separation and grid scale;
- substep and reseeding choices;
- source velocity, diameter, angle and activation range; and
- the attributes written to the cache.
Use a staged cache strategy:
- Blocking cache: coarse particles for contact timing, camera and collision validation.
- Energy wedges: short variations of source velocity, diameter or angle.
- Resolution test: a limited frame range around impact at the intended particle separation.
- Hero particle cache: the approved full-range simulation with all required attributes.
- Mesh versions: independently numbered reconstructions for smoothing, droplet retention and shading tests.
Keep flipbooks or lightweight viewport previews alongside the caches. A low-resolution result is useful for timing, but it is not a reliable predictor of final sheet thickness or droplet survival. Revalidate collisions, reseeding and breakup when particle separation changes.
Reconstruct a Clean Fluid Surface
Use a Particle Fluid Surface SOP or an equivalent VDB-based workflow to convert the approved particles into a continuous mesh. Relate the particle influence and voxel scale to the cached particle separation. A broad influence closes holes but rounds the crown and merges nearby droplets; a narrow influence preserves detail but can leave a granular, unstable surface.
Inspect the mesh in motion
A reconstruction that looks excellent on one frame may collapse thin bridges or flicker on the next. Review the full impact range and compare the mesh directly with the particle cache. Pay particular attention to the crown rim, tendril roots, detached droplets and contact area near the cup wall.
Use connected-component filtering to remove accidental fragments, but distinguish noise from intentional droplets by size, position and camera visibility. A global component threshold can erase every small airborne element. Camera-aware masks or separate thresholds for the main body and aerial region provide more control.
Balance cleanup and detail retention
Mild SDF filtering can remove voxel noise and particle-scale lumpiness. Excessive smoothing makes sheets look inflated and turns droplets into soft beads. Too little filtering produces unstable highlights, faceting and noisy motion-blurred silhouettes.
Use targeted cleanup for liquid that has crossed the cup wall, accumulated below the base or formed an unintended bridge at the rim. Do not erode the entire surface to repair a local collision artifact. If the particle cache itself contains a major leak, correct the collider and resimulate rather than hiding the failure in the mesh.
Check for coincident surfaces between the liquid and cup interior. Overlap can cause dark seams, z-fighting, noisy refraction and misleading contact shadows. Maintain a plausible contact relationship without creating a conspicuous gap.
Validate the surface at final output resolution with motion blur and depth of field enabled. Fine features that occupy less than a pixel may only add flicker. Preserve details that support silhouette, scale and material readability; remove those that create unstable noise without contributing to the shot.
Shade and Light the Milk, Coffee and Foam
Use separate shading logic for the porcelain, coffee, milk-dominant regions and foam, even when milk and coffee share one geometric surface. The source mask should control a material blend rather than create an abrupt assignment boundary.
Build scale-aware liquid materials
Milk typically needs a light, scattering response with enough surface reflection to define thin sheets. Excessive transmission makes it resemble clear syrup, while excessive subsurface scattering can erase the edge highlights that reveal the crown. Tune scattering and absorption at the scene’s actual scale.
Coffee benefits from a dark, warm response with readable reflections and restrained roughness variation. Avoid high-frequency procedural noise that crawls during animation. Use the transferred mixing mask to blend the material properties of coffee, milk and intermediate regions rather than relying on a flat particle color.
Foam can use a lighter, more diffuse material with irregular thickness and controlled translucency. Whether represented by micro-geometry, points or a surface mask, it should remain attached to the liquid motion and avoid intersecting the main surface visibly.
Use product lighting to reveal the splash
Light for contours rather than uniform brightness. Large soft sources can create continuous specular bands along the milk sheet, while narrower highlights define crown edges, tendrils and droplets. Adjust source size and placement while viewing the animated result; a light that works on the cup may flatten the fluid.
Test reflection, refraction, motion blur and depth of field together. A thin droplet may vanish because it lacks geometric thickness, falls outside the focus plane or carries no resolvable highlight—not because the simulation failed. Inspect normal, depth, specular, transmission and motion-vector passes before changing the FLIP setup.
Troubleshoot Common Milk Splash Failures
Diagnose the pipeline in order: source and collider, particle simulation, reconstructed mesh, then shader and render. If particles are correct but the mesh is not, changing the solver wastes time. If the mesh is sound but the beauty render looks flat, focus on material and lighting decisions.
Liquid leaks through the cup
Visualize the actual collision SDF and inspect it for gaps, reversed regions and an under-resolved rim. Confirm that the source does not begin inside the collider. Compare particle separation with wall thickness and collision resolution, then increase resolution only after verifying the geometry.
For animated vessels, inspect collision velocities as well as positions. If only the mesh appears outside the cup, reduce surface bridging or apply targeted mesh cleanup rather than modifying the particle solve.
The splash is weak or delayed
Check the source velocity vector, impact angle, emission rate and frame of contact. Confirm that the coffee is not too far below the source and that the stream reaches the intended location. A visually fast source can still deliver little useful momentum if it strikes at a shallow angle or misses the center of the fluid body.
The impact is explosive
Reduce source momentum or emitted volume before applying damping. Inspect the fluid depth, impact point and scene scale. An emitter intersecting the coffee or collider can inject an initial burst, and a narrow collision feature may redirect energy unnaturally. Add substeps when temporal sampling is the problem, not as a general cure.
The liquid looks sticky or gelatinous
Compare lower-viscosity and lower-surface-tension tests with the source and camera unchanged. Excessive viscosity suppresses crown formation; too much surface tension rounds sheets into blobs. Coarse particle separation can produce a similar heavy appearance by eliminating narrow connections, so inspect resolution before attributing everything to fluid properties.
Droplets disappear
Locate the stage where they are lost. If they are absent from the particle cache, inspect separation, reseeding and source energy. If particles exist but the mesh omits them, adjust reconstruction influence, filtering and component pruning. If the mesh contains them but the render does not, check camera scale, motion blur, depth of field, thickness and highlights.
The surface flickers or looks unstable
Review particle coverage, reconstruction voxel size and temporal consistency. Overly narrow particle influence can expose frame-to-frame gaps, while aggressive smoothing may cause thin features to appear and disappear. Evaluate the mesh in sequence and preserve stable hero forms selectively instead of maximizing detail everywhere.
Milk and coffee do not mix convincingly
Inspect the source mask at the particle, volume and mesh stages. A hard threshold creates clean bands; excessive diffusion removes the milk identity too quickly. Blend properties across milk-dominant, mixed and coffee-dominant regions, and let the transition respond to impact timing, depth and motion. If the mask was lost during reseeding or caching, shader adjustments alone cannot reconstruct coherent mixing.
For final approval, compare representative frames from the coarse FLIP preview, hero particle cache, diagnostic mesh and shaded render. This stage-by-stage review identifies whether a failure belongs to sourcing, simulation, reconstruction or lighting—and keeps expensive resimulation reserved for problems that genuinely originate in the fluid solve.