Ariel Fluid Simulator
A PIC/FLIP fluid simulation with OpenVDB and Houdini integration
A frame from a "dambreak" scenario simulation. Simulated using Ariel, meshed via OpenVDB/Houdini, rendered with my own Takua Render.
Overview

Ariel is an experimental fluid simulator I wrote from scratch to explore the popular PIC/FLIP fluid solver algorithm and to evaluate OpenVDB. Ariel supports arbitrary animated meshes as fluid starting volumes and as solid obstacles, and supports exact fluid-solid boundary finding through an integrated raycasting engine. Meshing can either be done natively in the simulator through OpenVDB, or through Houdini integration via Partio. This project is written entirely in C++.

This project has been under active development since 2013, although it is something more of a sandbox/hobby compared to the amount of focus I put into my main renderer project.

Features

PIC/FLIP: The core solver method used is the industry standard PIC/FLIP method. Supports solving using only PIC, only FLIP, or combining both as a weighted sum for PIC/FLIP. Supports particle resampling after particle advection for better fluid reconstruction.

Memory Efficient Grids: Ariel supports both native float arrays and OpenVDB as underlying data structures for storing grid information in the solver. Native float arrays are faster to access but use more memory and are therefore suitable for smaller simulations that require fast simulation times. OpenVDB grids are slower to access, but are more memory efficient and support sparse storage, allowing for extremely large scale simulations.

Animated Meshes: Starting fluid volumes and solid obstacles can be specified through animated OBJ meshes. Fluid volumes can be added and subtracted from the simulation at any point in time, as can solid obstacles.

Live Preview: The simulator comes with an OpenGL viewer complete with interactive camera and built in screen recording and debugging tools.

Raycast Solid-Fluid Boundaries: Instead of finding solid-fluid boundaries through level sets, Ariel incorporates a modified version of Takua Render's fast intersection engine for finding precise solid-fluid boundaries by raycasting fluid particles against the scene's solid obstacles. This method allows for extremely precise fluid-solid boundary reconstruction and meshing.

Houdini Integration: Ariel can interface with Houdini through OpenVDB volumes and can also write particle and simulation data directly to Houdini's native BGEO format through Partio. As a result, Ariel can either complete the entire simulation pipeline from particles all the way through meshing, or can complete only select portions of the simulation pipeline and offload to Houdini for functionality such as meshing.

Build Toolchain: Ariel is written using C++11 and is multithreaded using Threaded Building Blocks. Ariel builds on OSX using the native Clang/LLVM included with Xcode and on Windows using Visual Studio 2013. Ariel uses CMake for build file generation.

Selected Images and Videos

Another frame from a "dambreak" scenario simulation. Simulated using Ariel, meshed via OpenVDB/Houdini, rendered with Vray.
A "dambreak" scenario simulation in a glass box. Simulated using Ariel, meshed via OpenVDB/Houdini, rendered with Vray. Soon to be re-rendered using Takua Render.
Same "dambreak" scenario above, but in particle view. Approximately a million particles on a 128x64x64 grid. Whiter particles indicate faster velocity and lower density, while bluer particles indicate slower velocity and higher density.
"Waterfall" scenario with fluid added to the simulation over time on a 64x64x64 grid. Whiter particles indicate faster velocity and lower density, while bluer particles indicate slower velocity and higher density.
Acknowledgements

The beginnings of this project were overseen by Professor Doug James as part of his Computational Motion course at Cornell University. Friends Harmony Li, Dan Knowlton, and John DeCorato were invaluable sounding boards for various ideas.

Project Blog Posts

Progress updates for this project were posted to my development blog, Code & Visuals. The following posts detail the development of this project. Posts are listed starting with the most recent:

Resources

In the process of building my simulator, I drew upon the following papers and articles. They are listed in no particular order.

Animating Sand as a Fluid: The original PIC/FLIP graphics simulation paper by Zhu and Bridson.

OpenVDB: An open source hierarchical volumetric data structure and toolkit by Dreamworks Animation.

OpenVDB SIGGRAPH 2013 Course Notes: Useful presentations and notes on using OpenVDB and OpenVDB in industry.

VDB: High-resolution Sparse Volumes with Dynamic Topology: Ken Museth's original 2013 paper presenting OpenVDB.

Partio: An open source particle file format wrangling library by Walt Disney Animation Studios.

Fluid Simulation for Computer Graphics: The go-to reference book for fluid simulation, by Robert Bridson.