top of page

Champagne

Spring 2025 VSFX-428 Final Project

​

FLIP - Iteration #2 - 05/13/25

Test 5 -

​

spiral shape velocity field advected

2 velocity scale

​

foam group vorticity > 500

viscosity 0.09

​

3 substeps

0.0019 particle separation

0.45 separation rate

0.575 grid scale

0.75 particle radius scale

​

​

Test 6 -

​​

0.5 velocity scale

​

foam group vorticity > 425

viscosity 0.09

​

3 substeps

0.0019 particle separation

0.4 separation rate

0.575 grid scale

0.75 particle radius scale

​

​

Building off of the previous FLIP simulations, I wanted to begin setting up a custom velocity field to encourage particles to spin/swirl in a more interesting way when poured. The bubbles in the reference video spin in a circular motion, so I wanted to test using a spiral to drive the velocity of the bubbles. The spinning also dissipates once the pour is complete, so If I use an advected velocity, I can keyframe the intensity of the force.

​

I start with a spiral, get a tangent attribute from PolyFrame, scatter points throughout the spiral, then spread the points out with PointJitter. This can retain the spiral motion while breaking up the uniformity. I then randomize the velocity and fit the range from -1 to 1. Last I rasterize the velocity attribute, which is called in a POP Advect by Volumes in the FLIP simulation.

Test 7 -

​​

0.8 velocity scale

​

foam group vorticity > 700

viscosity 0.1

​

3 substeps

0.0019 particle separation

0.4 separation rate

0.575 grid scale

0.75 particle radius scale

​

​

In order to add bubbles from the previously created foam group, I first isolate the group, then delete the desired percentage of the foam to use as bubbles. They should also vary in pscale and should be effected by lifespan, so I adjust these values with an Attribute VOP. For fun, I also converted the VOP network into VEX, as typically code is more intuitive for me if I need to make changes.

VEX conversion from VOPs

VOP setup from Nine Between tutorial

Now that I have the bubbles meshed, I can combine them with the original fluid. After converting the bubbles and original simulation to VDBs with a high resolution voxel size, I can convert the vdbs to polygons. 

FLIP - Iteration #1 - 05/11/25

Inside of a DOP network, I first input the Flip Object node to the Flip Solver. In this node, we can control some of the main parameters that can deal with volume loss/gain, simulation resolution and particle separation. Here, there is also one of three check boxes for adding a viscosity attribute.

​

Next, I plug the Volume Source node into the 4th input. In this node, I call the SOP path for the source points created previously, then check the "Source Particles" box.

The last input I am using for the Flip Solver in this first iteration is the Particle Velocity input. Here, I can use POP forces to help control the fluid simulation. Because FLIP is both Eulerian and Lagrangian, the simulation takes into account both voxels and particles. This allows for some unique controls, in which we can control the simulation using both volume and particle forces.

​​

In a POP Group, inside the VEXpression, I use an if-statement to create a foam group based on how turbulent the particles are. Because bubbles act differently than water, being less dense and hold their shape longer, I set the foam group to a lower density and higher viscosity.

Before the simulation, there are some final parameters / check boxes necessary to address. First are the birth / death thresholds, which tackle the issue of volume loss/gain. By increasing the birth threshold, fewer particles will spawn to account for decreasing density. By decreasing the death threshold, in the more cramped/dense areas, less particles will be killed.

​

There is also the separation rate / scale parameters, which can force particles away from each other when simulated. This does not work as well for changing the accumulated volume, but can impact the particle interactions themselves.

​

There are also a couple boxes to check, including adding ID, Age and Reap Particles.

Here was the progression of tests:

Test 1-

​​

first sim

​

2 substeps

0.0025 particle separation

0.5 separation rate

1 grid scale

1 radius scale

​

no other changes

​

Test 2-

​

adjusted source amount​

added vorticity and foam group

 

foam group -

vorticity > 400, viscosity 0.005

​

3 substeps

0.0025 particle separation

0.35 separation rate

0.55 grid scale

1.2 radius scale

​

​

Test 3-

​​​​

birth threshold 0.75

death threshold 1.5

​

foam group -

vorticity  > 500, viscosity 0.1​

​

3 substeps

0.0025 particle separation

0.45 separation rate

0.575 grid scale

1 radius scale

​

​

Test 4-

​

added drag and speed limit

added foam lifespan

​

foam group -

vorticity  > 450, viscosity 0.08

​

birth threshold 0.75

death threshold 1.5

​

3 substeps

0.0025 particle separation

0.45 separation rate

0.575 grid scale

0.7 radius scale

​

​

Setup - Collision and FLIP Source - 05/09/25

The first thing I needed to do was set up the collisions, which in this case is the champagne glass. In SOPS with some basic procedural modeling, I created a simple champagne glass driven by a line, deformed to a champagne glass profile, then revolved. Before the volume collision output, I use a ConvertVDB to convert the polygons to a volume.

​

In the FLIP solver, I will use both the surface and the volume as possible collisions. Sometimes particles can fall between the mesh using a volume collision, so using both is a common workflow.

Next, I create a DOP network and add two Static Object nodes- one for the surface collision, the other for the volume. We can use a Merge node to apply both surface and volume collisions to the simulation. The two should basically overlap, shown with the clipping blue/green collision guides below.

After setting up collisions, I set up a source using a basic sphere. Adding a Flip Source node, I set an initial velocity directing the points into the side of the glass. I also apply noise to create more variation in the stream. Using Attribute wrangles, the last thing I set for the source points is viscosity and density. At the source, the viscosity stays close to 0 and density to 1000 to act as water.

Project Overview

Approaching the final project for SCAD's particle & procedural effects class, I wanted to begin exploring Houdini's FLIP with a small scale champagne pour. Breaking the project down into several parts, there will likely be multiple layers of simulation needed. This includes the main fluid pour, bubbles, foam, and the subtle fizz/mist that comes from the foam popping.

​

Here I will list the tutorials and references I will be using throughout the process:

​

Nine Between - Introduction to FLIP

Nine Between - Carbonation

Bubblepins  - Whitewater

Mesrop Hovannisyan - Fluid Splash

​

bottom of page