Articles

How to Simulate a Coffee Pour for a Cafe Brand Ad in Houdini

Table of Contents

How to Simulate a Coffee Pour for a Cafe Brand Ad in Houdini

How to Simulate a Coffee Pour for a Cafe Brand Ad in Houdini

Ever spent hours adjusting fluids but end result still looks off? As an intermediate 3D artist, you know how tricky a realistic coffee pour can be, and how small details make or break the shot.

From controlling surface tension to capturing tiny splashes and foam, a convincing fluid simulation of a coffee stream involves more than a quick FLIP solver run.

This article walks you through a clear, step-by-step workflow in Houdini. We’ll focus on setting up your container, customizing the FLIP fluid, and fine-tuning collision and viscosity to achieve that balanced flow.

You’ll explore key settings to add realistic foam, adjust shading for a rich coffee tone, and prepare your scene for final rendering. By the end, you’ll have a repeatable method to simulate a dynamic pour for your next cafe brand ad.

How do I plan the shot and gather references to match a cafe brand brief?

Before diving into Houdini, clarify the cafe brand’s visual DNA. Review the brand guidelines for color palettes, typography, and packaging imagery. Note the target aspect ratio (16:9, square), resolution (4K vs Full HD), frame rate (24fps for cinematic feel), and final ad duration. This pre-production step ensures your coffee pour aligns with brand identity and broadcast specs.

Next, build a reference library highlighting desired lighting, camera angles, and fluid behavior. Include high-res stills from existing ads, competitor reels, and macro coffee pour photography. Extract key frames illustrating pour speed, splash scale, and color tone. Tools like PureRef help organize images into mood boards, while Adobe Color can sample brand hues for shader creation.

Once references are compiled, move into previsualization: block out the set in Houdini with simple geometry (cup, table, background plane). Create a Camera node matching your reference lens focal length and sensor size. Use a quick Fluid Source SOP with low particle counts to test the pour timing and camera framing. Scrub through the timeline to verify shot duration, pour entry, mid-air flow, and cup filling aligns with the brand’s storytelling beats.

  • Define core shot requirements from the brand brief (style, duration, specs).
  • Collect and catalog references for lighting setups, color tones, and fluid dynamics.
  • Extract brand color values for use in shading and post-compositing.
  • Block out camera and basic geometry in Houdini for rapid prototyping.
  • Run low-res sim tests to confirm timing and framing before full-scale simulation.

How do I set up scene scale, camera, and collision geometry for a controlled pour?

Accurate scene scale forms the backbone of a realistic coffee pour. In Houdini’s preferences under Units, choose meters to match industry standards. Model your cup and table using real-world dimensions: a standard latte glass is around 0.12 m tall. Consistent units ensure gravity, viscosity, and solver settings behave predictably.

Before simulation, freeze your geometry by converting your cup and table models into proper SOP networks. Encapsulate each object in a null node named COLLISION_IN. This naming convention lets FLIP and grain solvers automatically detect static colliders. Remember to transform each piece so its pivot sits at world origin to avoid offset issues during solvers.

Setting up your camera early helps frame the pour and influences timing. Use a camera object with a focal length between 35 mm and 50 mm for a natural perspective. Enable display flags on your camera and match its shutter timing to your simulation frame range. If you plan minor depth-of-field, assign an aperture size in the camera node rather than adding a separate DOF post-effect.

For precise alignment, reference a simple grid or plate at cup level. Use a camera locator and snap its target to the cup’s origin. This ensures the pour stream remains centered in your shot. Lock the camera’s channel transforms once positioned to avoid accidental shifts.

Creating robust collision geometry demands clean topology. Convert your cup mesh to a VDB surface: dive into your cup’s SOP chain, drop a VDB from Polygons node with a voxel size around 0.005 m. This produces a watertight collider and smooth normals, preventing fluid from leaking through thin walls or getting stuck in concave corners.

Finally, merge all collider VDBs under a single DOP Import. In your FLIP object’s collision tab, point to that merged volume, and set the collision boundary to “Outside Only.” This ensures the coffee respects the cup’s interior. Test with low-particle counts first; if you see unwanted splashes, increase the VDB resolution or adjust the particle separation in your FLIP tank for tighter solver coupling.

How do I create and drive a FLIP simulation to get a believable coffee pour?

Emitter setup and initial velocity: sourcing particles from animated geometry, using SOP velocities, and guiding flow with fields/FLIP advection

In Houdini, begin by converting your animated pour geometry—like a tilted coffee cup—into an emitter in SOPs. Use a Particle Fluid Surface or directly emit FLIP particles via a Source Particle Fluid DOP node. Import your cup’s motion as a transform input so the emitter moves with the cup. Capture its velocity by generating a v@v attribute in SOPs using the Trail SOP or Attribute Interpolate, then feed that into the DOP network to imprint initial speed on particles.

To guide splash shape, create simple velocity fields or vector volumes near the lip of the cup. In DOPs, connect a Volume Source node to inject those fields into the FLIP solver. Adjust the field’s decay and scale so the coffee stream narrows as it falls, mimicking gravity and surface tension pulling the fluid into a cohesive jet. This advects particles along user-defined paths without manual keyframing.

FLIP solver tuning: particle separation, reseeding, viscosity/surface tension settings, collision SDFs and substeps for stability

Particle separation controls resolution: lower values yield finer droplets but increase memory. Start around 0.02–0.03 for a coffee pour, then adjust based on scale. Enable particle reseeding in the FLIP Solver’s Particle tab to maintain density in thin streams. Set Reseed Threshold low, around 0.3, so new particles appear at the lip of the cup.

Under the Solver’s Viscosity tab, choose Newtonian behavior with a minimal viscosity value (0.001–0.005) to simulate coffee’s slight drag. Add surface tension by enabling the Surface Tension checkbox and tuning the coefficient to 0.1–0.2; this merges droplets and reduces spray. For robust interactions, convert cup geometry to SDF using a VDB from Polygons SOP and assign as Static Object in DOPs. Increase substeps to 2–4 to prevent clipping at high velocities.

How do I generate a renderable surface, foam/breakup, and realistic coffee shading?

Begin by meshing your FLIP simulation with the Particle Fluid Surface SOP. This node creates an oriented VDB per particle, then combines them into a smooth iso-surface. Enabling adaptivity controls polygon count while a VDB Smooth SDF SOP reduces high-frequency noise. This workflow ensures a watertight mesh that holds up under downstream displacement and retains fine details without tearing.

For foam and breakup, run a whitewater simulation via the Whitewater Solver in DOPs. Set velocity and curvature thresholds to spawn foam and bubble particles, then promote them into groups by life span and density attributes. Feed these groups into a POP Network to generate foam geometry—use metaballs or scattered spheres blended with a VDB Combine SOP. Procedurally vary each instance’s radius with noise to avoid repetition and achieve organic breakup.

Shading coffee demands a layered material in Mantra or Redshift. Use the Principled Shader to define a rich brown base color with slight subsurface scattering for translucency at thin edges. Overlay a microfoam layer driven by your foam attribute, masked only where foam particles exist. Drive specular roughness with curvature: low on peaks, high in nooks. Finally, add a subtle 3D noise bump to introduce micro-ripples and catch studio light, creating a natural glint.

  • FLIP Object → configure particle separation and velocity scale
  • Particle Fluid Surface SOP → create primary mesh
  • VDB Smooth SDF SOP → polish mesh quality
  • Whitewater Solver DOP → generate foam & bubble particles
  • POP Network → convert foam into metaballs or instances
  • VDB Combine SOP → merge volumes for smooth transitions
  • Principled Shader → assign base, subsurface, specular settings
  • Noise-based bump → add micro-detail to fluid surface

How do I render passes, composite and iterate to match brand look and delivery specs?

To nail the cafe’s visual identity, start by defining your render passes in Houdini: beauty, diffuse, specular, refraction, SSS and emission. Configure Mantra (or Karma) to output 32-bit EXR AOVs in linear space. Use a consistent naming scheme (e.g., coffee_beauty.exr, coffee_diffuse.exr). This lets your compositor treat each element independently and retain full dynamic range.

In Nuke, import your EXRs and set the project to ACEScg or Rec.709 based on the brand’s color pipeline. Apply the official brand LUT early, then composite passes using layer blending and graded masks. Use the deep EXR depth pass for realistic depth-of-field and holdout mattes for text overlays. Monitor with a calibrated Rec.709 viewer to ensure color fidelity.

  • Check specular highlights via the specular pass; tweak roughness in Houdini if hotspots misalign.
  • Adjust coffee subsurface scatter by isolating the SSS pass and tuning scale/intensity curves.
  • Use vector passes to add motion blur in comp—this offloads time from re-rendering.

Iterate by exporting a draft comp to the art director, gather notes on contrast, saturation and shot pacing. Back in Houdini, tweak light intensities or shader parameters, then re-render only the affected AOVs. Keep iterations fast by leveraging Houdini’s HQueue or embedded Farm tools. Final deliverables should follow the brand’s spec sheet: resolution, codec (ProRes 4444 or DNxHR), frame range and color space metadata.

ARTILABZ™

Turn knowledge into real workflows

Artilabz teaches how to build clean, production-ready Houdini setups. From simulation to final render.