FLIP Fluids Addon: A liquid fluid simulation tool for Blender


(Redfirm) #565

@RLGUY is it possible to do the calculations through the network render? we have about 50 pc’s and we want to use your software for a huge production and we are wondering if this is possible?

(RLGUY) #566

This won’t be possible with our simulation implementation. The FLIP simulation calculations are not highly parallelizable and the way we have designed and implemented the method would not be suitable for computing over a distributed network.

However, rendering should work over a distributed network as long as the simulation cache files are accessible and the addon is available to load the simulation data into Blender.

(RLGUY) #567

I was hoping to get a new version out today but was not able to finish up everything I wanted to by the end of the week. Didn’t want to release some half-finished content that could potentially break the addon. I’ll be pushing this back a week and I will definitely release something next Friday!

The sheeting/gap-fill feature is coming along nicely and from tests so far, it looks like it’s doing quite a good job at filling in those gaps similar to the outline in the last pic. I’ll have more about this and some animations to post on Monday.

and just a quick update on development!

Blender 2.80 Rendering Crashes

Good news! The bug that is causing render crashes in EEVEE (T60094) has been confirmed and the task has been assigned. Perhaps this means that it will be fixed soon.

Blender 2.80 Missing features

We have recently added support for features that were missing in our support for 2.80. All of the features in 2.79 are now supported in 2.80. We’ll be adding these to an update next friday.

FLIP Fluids Toolshelf Menu

In Blender 2.7x this was located on the left side. This is now located on the right side of the viewport in Blender 2.8. Toolshelf menus in Blender 2.8 can be opened with the hotkey ```n` ``.

Grid Display and Particle Debugging

These features have been added and are accessible through the Debug Panel.

Custom viewport drawing is much faster in Blender 2.8

FLIP Fluids object organization in outliner

In Blender 2.79, fluid meshes were children of the domain object and were contained in the domain hierarchy. Blender 2.80 removes functionality to organize objects in a parent/child hierarchy and has replaced this with a new ‘collections’ system which is similar to a filefolder/directory organization.

FLIP objects and meshes are now organized in FLIPFluids and FLIPMeshes collections:


Surface Tension

The experimental surface tension feature has some known issues with instability and simulation errors at high surface tension values. These simulation instabilities look like small pops/explosions (Example 1, Example 2). For the next upcoming week my main priority will be experimenting with some new simulation techniques to hopefully get the surface tension feature ready for a more stable release.



I really appreciate all the support you’ve been giving us.

I’m in a bit of a pickle. Do you have a place where we can download previous versions of FLIP Fluids?
While the flip_fluids_addon- is nice, the project I was working on back in December was using a version like flip_fluids_addon-1.0.4a but it was an experimental build which also had the feature where an obstacle could add more whitewater influence.

When I bring my project into the latest built, my wonderful client approved water flow no longer wraps around my cliffside obstacle like it used to. When I load it up in a Blender app with flip_fluids_addon-1.0.4a it works fine, but I’m lacking the “Whitewater Influence” obstacle feature that I desperately need.

Please, can you help me get this version back?
If it helps, I purchased from Blender Market.

Thanks as always.

(RLGUY) #569

No problem! I am uploading older_flip_fluids_versions.zip to the Blender Market product downloads and this should be ready for download within the next hour.

Sheeting Effects

We will soon be adding sheeting effects features to the addon which will be available in an experimental release on Friday (Feb 1st)! Fluid sheeting fills in gaps and holes between separating fluid particles to help preserve thin liquid sheets and splashes. Check out these tests created while developing this feature: Facebook Video or Twitter Video or gfycat.

With Sheeting:

Without Sheeting:

(Redfirm) #570

any idea when we can expect the thin object update ? @RLGUY

(RLGUY) #571

There was a small update on Dec 24th that included the improved support for thin obstacles. The next update will be available tomorrow and part of this update will include a bug fix for an Out of Range error caused by the new thin collision handling and also some simulator tweaks to improve collisions with moving obstacles.

(Pavel_Blend) #572

I have a question.
Why was the FLIP method chosen for this add-on?
What are its advantages and disadvantages over other methods (for example, SPH)?
And how does the FLIP method work (in short)?
What is the voxel grid used for?
Why it was impossible to do only particles?
I’m just curious.

(Redfirm) #573

@RLGUY quick question. when using an inflow. the rising of the water stops once the inflow object is underwater. i actually want to place this at the bottom and make it fill a cup for example. how can i achieve this?

(prestonparty) #574

I may be wrong but, I think if you check ‘constrain fluid velocity’ on the inflow object settings it will keep emitting while submerged

(Redfirm) #575

I tried, but when it reaches the top of the inflow object. it stops rising.

edit: it seems to be doing something. i am going to do a test build and give an update
2nd edit : does not work!

(RLGUY) #576

The ‘Constrain Inflow Velocity’ option on the Inflow object can be used, but there are some extra steps that you will need to make this work. See this section in the ‘Constrain Inflow Velocity’ documentation for how to do this: Constrain Fluid Velocity: Creatinga submerged pipe that fills a tank.

Good questions! This article gives a nice overview on differences behind different fluid simulation methods and also some history: The Science of Fluid Sims. I’ll be quoting some of this article to answer some these questions.

Why was the FLIP method chosen for this add-on?

The FLIP method was chosen just because I was interested in writing a FLIP simulator. The simulator used to just be a hobby project, but ended up becoming what it is now.

I started studying fluid simulation in school and my first simulator was a simple SPH program that was not very good. I wanted to write a better simulator that made the fluid less compressible and that led me to starting an Eulerian grid-based simulator. The Eulerian simulator was not very accurate and that led me to implementing the grid-based FLIP simulation method. and that is the point I became very interested in FLIP.

What are its advantages and disadvantages over other methods (for example, SPH)?

I am much more experienced in the FLIP method compared to the SPH method, so some of this could be incorrect. I have only studied simple SPH methods and am not very familiar with how modern SPH simulations work. Both simulation methods have pros and cons.

A benefit of SPH is that you are not confined to a domain. Fluid can travel and splash anywhere without adding very much computation time. FLIP needs a limited domain size in order to store the grids which are memory heavy.

FLIP generally requires less substeps per frame:

A great advantage of the FLIP solver over say a Particle / SPH fluid sim is how many times you need to evaluate the maths per frame. For a SPH solution to look good the program needs to evaluate it multiple times per frame - a sort of temporal anti-aliasing. The maths needs to be run 10 to 100 times more per frame to work. (Although for some very fast moving colliders, people do start to find it useful to ‘subframe’ evaluation FLIP models also, or you can miss an interaction inside the fluids). If you do not sub-sample per frame in the case of a SPH solution, particles appear to just fly off or explode away from the fluid.

If not enough substeps are computed for SPH, the fluid can look compressible/bouncy as particles spring back and forth against eachother.

SPH tends to have a consistent total volume over a long simulation while FLIP simulations have a bias towards losing volume (but can also increase volume). This is because FLIP particles have no concept of size/volume and due to numerical error over time, particles will tend to overlap and decrease fluid volume.

Why it was impossible to do only particles? What is the voxel grid used for?

For the FLIP simulation method, particles do not have a size/volume unlike SPH.

In the SPH method, it is simulated from the point of view of the particles. Particles bump into and interact with other particles to create the fluid motion.

In the FLIP method, simulation is from the point of view of a changing velocity flow field that pushes around particles. The velocity field data is stored and on a grid because this makes the math very accurate. Particles are only used to track where the liquid exists. Particles also store velocity data and transfer velocity information to and from the grid. Particles can also store other types of information such as viscosity, temperature, density, color that can be useful for simulation features.

And how does the FLIP method work (in short)

The FLIP simulation is based on a Navier-Stokes fluid physics equation. Solving this equation does not just produce a simple number, it produces a velocity flow field that relates to how fluid moves physically.

{\displaystyle {\frac {\partial \mathbf {u} }{\partial t}}+(\mathbf {u} \cdot \nabla )\mathbf {u} -\nu ,\nabla ^{2}\mathbf {u} =-\nabla w+\mathbf {g} .}

The FLIP simulation method solves the equations through a series of steps. Here is how a typical frame or substep is run in a FLIP simulator:

  1. Initialize or add particles to the domain - Also initialize each particle with a velocity value
  2. Transfer particle velocities to the velocity field grid - This is called the velocity advection stage. Fluid particles add their velocities to grid nodes with a strength based on how far they are located from a grid node. This averages out to a good representation of the current fluid velocity of the particles.
  3. Add forces - Add forces such as gravity to the velocity values on the grid
  4. Apply viscosity - If viscosity is in the simulation, solve the viscosity equations to alter the velocity field
  5. Pressure Solve - This stage is also know as ‘Pressure Projection’. This solves the fluid pressure equation to make the fluid velocity incompresible. The pressure equation is solved if for every voxel, the velocity of fluid flowing into the voxel is equal to the velocity of fluid flowing out of the voxel. This is quite a huge and complex equation to solve since fluid voxels are all linked together in a network with each voxel being connected to its 6 neighbour voxels. Altering the velocity in one cell to be incompressible affects its neighbours and in turn can end up affecting all other voxels. All voxels need to be solved simulatneously to be consistent with each other.
  6. Update particle velocities - Now that the velocity field has viscosity and is incompressible, the new velocities are transferred back to the particles by interpolating on the grid. There is an equation to update velocities and it is based on the difference between the unaltered velocity and the altered velocity field after forces/viscosity/projection.
  7. Advect Particles - Using the velocity field, move the particles through the grid.
  8. Mesh Particles - If a triangle surface mesh is needed, this is a good point where you can convert the particles to a mesh. Another good point in the simulation is between step 1 and 2.

After step 8, it loops back to step one.

Hope this answers your questions well and let me know if you have any questions!

(Tedri Mark) #577

Getting this error with blender 2.90.43 and the feb1 release with the sheeting demo:


(Tedri Mark) #578

Oops my bad - I uninstalled the old version, and didn’t restart blender before re-installing the new one :flushed:

(RevDr) #579


Not sure what the rules are on double posting, so including a link to the other thread here on my sabbatical
Baptism project.

Thought it would be worth adding a link to the other thread here as it contains 14 different FlipFluid sims.

Will try and do a break down of a shot in the next week or two.


(prestonparty) #580

Loved when the animations went underwater! Very nice water effects with the light coming through. Did you merge the flip fluids with the ocean modifier somehow?


I have a couple of questions if you don’t mind

Do I have to apply all modifiers on a mesh before using it as an obstacle?

is there any plans to use collections as a way to assign types? example, i have a mesh with multiple pieces, instead of going through every single piece and assigning it as an obstacle, i just put them in a collection and assign the collection as an obstacle.

Sorry if this question has been asked before

(RLGUY) #582

Hey, I don’t mind at all!

You do not have to apply the modifiers before you start baking the simulation. The meshes will be exported to the simulator using the render settings/geometry in the modifier stack.

There is not a way for you to select a collection and add it as a simulation type. You can select a group of objects in the outliner or the viewport and use the ‘FLIP Fluids’ toolbox menu to add all objects as a type:


Note: we only recently added support for this menu in Blender 2.80 and you will need to use the latest FLIP Fluids version ( for this menu to show up. In 2.80, the hotkey to open this menu is ‘n’.

Hope this helps!


Oh i forgot about the toolbox menu, thanks

(RevDr) #584


The ocean layer is rendered separately and then the two composited together - you can see an explanation of how I did that somewhere in this thread. I did it a slightly more sophisticated way in the Baptism video than I did for my proof of concept test earlier last year.

The Ocean is using my own shader combining different Ocean Modifier ‘tiles’ - to reduce the tiling look. I’ll explain more down the line, and will probably release something, but that will probably be for 2.8, which I havn’t started using yet!