Low-viscosity liquids
FLIP-leaning, APIC transfer, light pressure iterations. Splashes, pours, droplets — surface tension on, vorticity confinement to recover lost curl.
Undine Beta · NVIDIA RTX · CUDA 12 · Windows
A CUDA-accelerated FLIP / PIC / APIC liquid solver for Blender, built to run on your NVIDIA RTX GPU. Iterate at realtime speeds on water presets where you used to wait minutes per frame, then add Whitewater FX as a separate one-way visual layer for spray, foam, and bubbles without changing the primary solve.
Needs an NVIDIA RTX (CUDA) GPU Windows-only during the beta
// origin
Blender can model, sculpt, and render with the best of them — yet liquid simulation always felt a step behind. The realtime techniques already existed elsewhere: APIC transfer, exact strain-rate viscosity, GPU multigrid pressure, sparse bricks. Blender was simply missing a solver that brought them together.
Undine grew out of that gap. The goal was never another offline baker that makes you wait minutes per frame and guess at the timing — it was a solver you can actually iterate with, where a tweak shows up on the next viewport playback instead of the next sitting.
So that idea runs through the whole design: a custom C++20 / CUDA 12 core, a Python addon that never blocks the simulation loop, and a debug panel that tells you the truth — CFL, residual, divergence — before you commit to a bake.
It is still a beta, but the direction is clear: Undine has the potential to become the definitive fluid addon for Blender.
— the Undine project
// solver core
A solver is only as good as the numbers it lets you read. Undine surfaces all of them — every transfer, every iteration, every substep retry.
flip_ratio: lean PIC for honey, lean FLIP for thin water.C matrix that preserves angular momentum across long advections — vortices stop dying after 20 frames.THICK_EXACT) over an opt-in pro_strain_rate exact-viscosity backend, plus Newtonian / Bingham / Herschel-Bulkley rheology for yield-stress and shear-thinning. THICK_EXACT is numerical, not material memory. Real viscoelastic memory (VISC-PRO) and paste forces are separate, experimental, CPU-first routes.√N avoids spinning iterations against numerical noise.ω = ∇×v, normalize, restore lost rotation. Recovers small-scale curl without injecting energy..velocities automatically — Lagrangian, sourced from the solver's own field. Enable Motion Blur in your renderer; the blur is already physically aligned with the sim.# water fast-path · measured, same scene, same hardware
# ~60k particles · 1.5×1.5×1.4 m · 3 cm grid · no collider
backend CPU GPU
ms / frame 171 49
fps 8.3 23.6
pcg iters/sub ~137 ~18
──────────────────────────────
numerics identical (CPU ≡ GPU)
speedup 2.9×
# RTX 5090 · Ryzen 9 7950X · 64 GB · Windows 11
// streamflow
Streamflow turns the simulation into a live stream. As substeps complete on the GPU, particle frames flow into Blender's playback without ever leaving the device until you ask for them. You scrub, tweak, and re-run in seconds — not in the next sitting.
Pick the rhythm: Streamflow Points for a cheap live point cloud, or Mesh Every Frame for lockstep meshing using the preset visible in the Meshify tab. The runtime contract guarantees the preset you see in the panel is the preset that ran — no silent fallbacks to a faster-but-cruder profile.
final_hero / final_ultra presets
// whitewater fx beta
Whitewater FX (Beta) is a modular system separated from the main solver. It generates secondary particles for spray, foam, and bubbles as a disposable one-way visual layer. The primary FLIP/APIC particles remain the water that participates in P2G, pressure, G2P, viscosity, the primary cache, and Meshify.
In the viewport, Whitewater runs through a realtime path parallel to Streamflow. It reads primary particles from GPU memory when available, applies emission and transfer budgets, publishes secondary payloads only when ready, and degrades by decimation or frame skip if the budget is exceeded.
For final quality, Production Bake generates versioned whitewater cache after an approved particle/Streamflow cache. The cache carries render attributes for Geometry Nodes or instancing; it does not feed forces, volume, pressure, viscosity, or the primary Meshify surface back into the simulation.
<run>/whitewater/frame_XXXXXX.gpfb cache with kind, age, radius, velocity, and id attributes
// materials
Undine includes an advanced route for fluids that do not behave like water: thick honey, chocolate, toothpaste, frosting, and creams that should keep ribbons, ridges, strands, and folds for longer.
It stacks four opt-in layers — solver quality, rheology, viscoelastic memory, and collider contact — as a numerical path, not a silent replacement for old scenes.
Viscosity & VISC-PRO reference →FLIP-leaning, APIC transfer, light pressure iterations. Splashes, pours, droplets — surface tension on, vorticity confinement to recover lost curl.
Fast → Balanced → PRO Lite → THICK_EXACT. PRO Lite is a weighted implicit solve; Thick Exact selects the exact pro_strain_rate route for final bakes. Numerical quality, not material memory — and CPU/host only.
Newtonian, Bingham, or Herschel-Bulkley. Real yield-stress hold-shape and shear-thinning/thickening with apparent-viscosity clamps and temporal anti-flicker. Newtonian stays the default.
Opt-in Maxwell/Oldroyd-B memory with a smooth yield↔elastic hold-shape coupling — chocolate folds and toothpaste crests that hold. Experimental, CPU-only, OFF by default; with it off the job is byte-identical.
Paste forces can add controlled fluid-fluid cohesion, SDF adhesion, and simplified wetting near walls, nozzles, and free surfaces. They are clamped per substep and measured explicitly.
State-based contact response: normal damping, tangential friction, and no-slip. Slip capture lets material slide on impact and grip once it settles, without gluing the fluid or killing splash.
Viscoelastic memory and paste behavior start as CPU/host reference routes. GPU/resident support is unsupported or experimental until parity, stability, and fallback diagnostics are proven.
// performance
Undine runs fluid simulation on the GPU (NVIDIA CUDA). On the water fast-path the solver is around 2× faster than the equivalent CPU path on the same scene and the same hardware — and the numerical health is identical, so the GPU does not trade accuracy for speed. These are measured figures, not estimates.
Water scene, ~60k particles, 1.5 × 1.5 × 1.4 m domain, 3 cm grid, no collider. RTX 5090 · Ryzen 9 7950X · 64 GB · Windows 11. Steady-state average, warm-up frames discarded.
These are GPU water fast-path numbers. Absolute FPS depends on particle count and grid resolution — larger scenes are slower in absolute terms, as in any solver, though the GPU advantage holds or grows with scale. Advanced features — PRO Exact viscosity, viscoelastic memory (experimental), and local colliders — run on CPU and are slower; see the viscosity docs.
The GPU-resident pipeline keeps being optimized. One change in progress is a fully device-resident pressure solver, which would enable CUDA-graph capture and cut per-frame latency further. Expect continued performance gains through the beta.
// diagnostics
Every substep exposes CFL, Poisson residual, mean and absolute divergence, active cell count, brick state, retry chain step, and CPU↔GPU match. If a scene is going to blow up, you see it while previewing, not four hours into the bake.
[GPU PROF] per-stage timings, exportablecode=4 max_iters → FP64 → MG → CPUdense_only · velocity_pages · demoted reason// who it's for
Iterate secondary fluid timing without blocking the main render. The Alembic ships with per-vertex .velocities: correct motion blur on the first render, no auxiliary AOVs, no Geometry Nodes scaffolding.
Live client reviews. Tweak viscosity, gravity, surface tension or emission and the next playback shows it — not the next meeting. Streamflow keeps the viewport honest.
Small teams that can't afford an 8h overnight bake just to find out the timing was wrong. One GPU, one license, one Blender instance — the whole pipeline fits on a workstation.
// beta
Early access pricing for artists who want to use Undine while it is still moving fast. Includes the 0.0.x beta release and updates through 1.0 at no extra cost.
Beta requires an NVIDIA RTX (CUDA) GPU and runs on Windows only. macOS and Linux are not supported yet.