This page provides a tutorial for simulating water pouring on a cosmetic bottle. Simulated using Chaos Phoenix for 3ds Max.
This is an intermediate level tutorial. Even though no previous knowledge of Phoenix is required to follow along, re-purposing this setup to another shot may require a deeper understanding of the host platform's tools, and some modifications of the simulation settings.
The instructions on this page guide you through the process of setting up a simulation of water pouring on a cosmetic bottle that generates many of liquid splashes. We also take advantage of the new VoxelShader helper to create whitewater in the liquid.
This simulation requires at least Phoenix 5.0 and V-Ray 5, Update 2.3. You can download official Phoenix and V-Ray from https://download.chaos.com. The scene can be rendered in both V-Ray 5 and V-Ray 6, but due to some differences between the two versions, some of the materials will render slightly different. To achieve the exact same end result as in the tutorial, you will need to use V-Ray 6. You can download your desired Phoenix and V-Ray versions from the downloads page.
If you notice a major difference between the results shown here and the behavior of your setup, please reach us using the Support Form.
The Download button provides you with an archive containing the scene files.
Scale is crucial for the behavior of any simulation. The real-world size of the Phoenix Simulator in units is important for the simulation dynamics. Large-scale simulations appear to move slower, while mid-to-small scale simulations show a lot of vigorous movement. When you create your Simulator, inspect the Grid rollout where the real-world extents of the Simulator are shown. If the size of the Simulator in the scene cannot be changed, you can cheat the solver into working as if the scale is larger or smaller by changing the Scene Scale option in the Grid rollout.
Go to Customize → Units Setup and set the Display Unit Scale to Metric Centimeters.
Also, set the System Units so that 1 Unit equals 1 Centimeter.
The final scene consists of the following elements:
- A Phoenix Liquid Source;
- A Phoenix Liquid Simulator;
- A V-Ray Physical camera;
- Two V-Ray Lights for lighting;
A Box001 geometry used as emitter in the Liquid Source;
- Box002~004 geometries as colliders or deflectors;
A Cosmetic_bottle geometry;
- A Cosmetic_cap geometry;
- A VoxelShader helper;
Select the front side of the Box001, and set those polygons' face IDs to 2. This limits the fluid emission to only one side of the box.
Add a Noise modifier to make the fluid emission more dynamic. Adjust its settings:
- Set its Scale to 27.0, and enable the Fractal option
- Set the Strength to XYZ: [ 1.5cm, 1.5cm, -1.5cm ]
- Enable Animate Noise
Put three extra boxes around Box001, the liquid emitter. Box002 and Box003, which are situated at the sides of the emitter, play an important role for making the liquid stream thicker at its edge. Box004 serves as a deflector under the emitter.
As a rule of thumb, liquid looks more realistic and visually appealing when it is colliding with something.
Go to the Time Configuration and set the Animation Length to 90 so that the Time Slider goes from 0 to 90.
This tutorial consists of many steps. To keep it concise, focus only on the Phoenix related steps. Feel free to use the camera and light settings in the provided sample scene.
For reference, below are the light and camera settings.
Go to Create Panel → Cameras → V-Ray and create a VRayPhysicalCamera.
The exact position of the Camera is XYZ: [ 125.3, -22.45, 2.0 ]
The exact position of the Camera Target is XYZ: [ 11.45, -15.0, 2.0 ]
In the Sensor & Lens rollout:
Set the Film gate to 36.0mm
Set the Focal length to 80.0mm
- In the Aperture rollout:
Set the Film speed to 300.0
Set the F-Number to 2.4
Set the Shutter Speed to 300.0
- In DoF & Motion Blur rollout:
Enable Motion blur
- In the Color & Exposure rollout, set the White Balance to Neutral
From Create Panel → Lights → V-Ray → VRayLight, create two VRayLights in the scene. Rename them to VRayLight-L and VRayLight-R respectively.
The exact position of the VRayLight-L is XYZ: [ 144.0, -135.0, 50.0 ]
The exact position of the VRayLight-L Target is XYZ: [ 94.5, -4.0, 0.0 ]
Set the Length to 81.0cm; Set the Width to 72.0cm
Set the Multiplier to 30.0
Change the Color to light blue of RGB (108, 146, 255)
The exact position of the VRayLight-R is XYZ: [ 144.0, -135.0, 50.0 ]
The exact position of the VRayLight-R Target is XYZ: [ 94.5, -4.0, 0.0 ]
Set the Length to 200.0cm; Set the Width to 200.0cm
Decrease the Multiplier to 10.0
Leave the Color to the default white color
Attach a VRaySoftbox map to the map slot. Enable the Radial Vignette option of the VRaySoftbox
The background color options are located at Rendering→Environment→Background Color. Instead of the default pure black, set the color to a slightly higher value of RGB(1,1,1). This adds some touch of film photography to the shot.
Anatomy of the Water Splash
The image here is from the final render of this tutorial.
The frame is from the beginning of the animation, before the water touches the bottle. You can see the liquid takes on a tongue shape at its end. The two edges of the water splash are thicker than the middle.
The cosmetic bottle is around 54 cm high and 22.4 cm wide. It is roughly 3 times larger than a regular cosmetic bottle. Usually small scale simulations require more simulation steps, which means more processing time, this is why in this case we use a larger bottle. Alternatively if you wish to work with small scale models, you can always adjust the Scene scale option inside of the Phoenix simulator settings.
As the water pours on the bottle, the bottle flips and you can see strongly rebounding splashes. Whitewater shading is also visible, as well as some droplets on the bottle.
Go through the steps of this tutorial to see how to build these features.
Let's create a Liquid Simulator. Go to Create Panel → Create → Geometry → PhoenixFD → PhoenixFDLiquid.
The exact position of the Simulator in the scene is XYZ: [ 5.25, 31.0, 61.0 ].
Open the Grid rollout and set the following values:
- Scene Scale to 1.0
- Cell Size to 0.3 cm
- Size XYZ: [ 59, 172, 130 ] - the Simulator size is large enough to cover only the Box001 for liquid emission
- Enable Adaptive Grid - the Adaptive Grid algorithm allows the bounding box of the simulation to dynamically expand on-demand
- Enable Max Expansion and set its size to X: (0, 238), Y: (371, 0), Z: (409, 0) - this saves memory and simulation time by limiting the maximum size of the simulation grid
Open the Output rollout and enable the Particle Velocity, Particle ID, Grid Liquid, and Grid Velocity. Set the Special channel to Vorticity Smooth.
Any channel that you intend to use after the simulation is complete, needs to be cached to disk. For example, Velocity is required at render time for Motion Blur, so it needs to be cached to disk.
Be sure to set the Special channel to Vorticity Smooth. The Vorticity Smooth channel represents the blurred length of the curl of each voxel or in other words the whirling motion of the fluid. We will use it for whitewater shading in a later step of the tutorial.
You can use either Vorticity or Vorticity Smooth for the whitewater effect. But the Vorticity Smooth is a better choice in this case, since it give less voxel artifacts in the rendering.
Add Liquid Source
Add a Liquid Source from Helpers → Phoenix FD → Liquid Source.
The Liquid Source is a Phoenix helper node. It determines which objects in the scene the Simulator emits from, how strong the emission is, etc.
Add the Box001 geometry to the Emitter Nodes list.
Once the emitter is added, set the Outgoing Velocity to 200.0cm.
Set the Emit Mode to Surface Force. This will make the object emit only from its surface area.
Set the Polygon ID to 2.
The Phoenix Source in 3ds Max can use Polygon IDs as a 'mask' - emission happens only from faces with a given ID.
In this scene, we set the Polygon ID parameter to 2. This forces the Liquid Source to emit only from the polygons with an ID of 2.
At this stage, you don't need to simulate the full length of the animation. You only need a sample. Go to the Simulation rollout and set the Stop Frame to 30.
Press the Start button to simulate.
Go to the Preview rollout, and enable Show Mesh. Disable all other Voxel Preview channels, so they don't interfere.
Smooth the Mesh
Select the Simulator, and go to the Rendering rollout. In the Mesh Smoothing section, increase the Smoothness to 5.0. Enable the Use Liquid Particle option. Set the Particle Size to 1.0.
The Mesh smoothing reduces the roughness of the liquid mesh. The higher the Smoothness value, the smoother the result, but the mesh will require more time to calculate.
Enabling the Use Liquid Particles option overcomes the limitations of the basic smoothing without particles, which can flicker in animation and cause small formations in the mesh to shrink.
Particle Size is used to make the liquid thicker or thinner. In this case we are making a small scale liquid effect with stronger surface tension look, thus we increase the Particle Size to make the liquid thicker.
Here is a preview animation of the simulation so far. You can see the liquid mesh is too noisy. The mesh is torn and chaotic.
Increase Steps Per Frame
To make the liquid look less noisy and smoother, select the Simulator, and go to the Dynamics rollout. Increase the Steps Per Frame to 4.
With the new settings, run the simulation again.
Here is the simulation at this step. Now the liquid mesh is much smoother.
Increase Surface Tension
Water is a Newtonian fluid, so you need to adjust the surface tension settings to make it more realistic.
With the Simulator selected, go to the Dynamics rollout, and in the Surface Tension section:
Increase the Strength to 0.4
Set the Droplet Formation to 1.0
Decrease the Droplet Radius to 2.0
Run the simulation again.
When increasing the Surface tension strength - it will make it harder for the liquid surface to split and will hold the liquid particles together. With high Strength, when an external force affects the liquid, it would either stretch out into tendrils, or split into large droplets.
Droplet Formation toggles between the liquid forming tendrils or droplets. When set to a value of 0, the liquid forms long tendrils. When set to a value of 1, the liquid breaks up into separate droplets. The size of the droplets can be controlled by the Droplet Radius.
The Droplet Radius controls the radius of the droplets formed by the Droplet Formation parameter, in voxels.
This is the simulation up to this step.
With the new Surface Tension settings, the flow appears thicker and the morphology is more suitable for a Newtonian fluid.
Increase Motion Velocity Effect
To make the pouring water bounce stronger when hitting the bottle, adjust the cosmetic geometries' Motion Velocity Effect.
Select both the Cosmetic_bottle and Cosmetic_cap. Right click and select Chaos Phoenix Properties. Increase the Motion Velocity Effect to 6.0.
Run the simulation again.
The Motion Velocity Effect allows you to control the impact of a moving object over the fluid. The higher the value is, the stronger the fluid reaction to the body's movement is.
Now the rebounding liquid splashes are stronger as the cosmetic bottle flips. This makes the shot more dramatic.
To allow liquid to stick on the bottle, go to the Dynamics rollout of the Simulator. Enable the Wetting option. Set the Sticky Liquid to 0.6.
Here is a preview animation of the simulation.
Although Wetting is enabled, barely any droplets adhere on the surface of the bottle.
Select the Liquid Simulator, and go to the Dynamics rollout. Set the Default Viscosity to 0.03.
You need at least a little Viscosity in order for the Sticky Liquid to produce a connecting force between the WetMap particles at the geometry surface and nearby liquid particles. That's why we set the Viscosity to 0.03.
Here is a preview animation of the simulation.
Now the droplets temporarily adhere to the bottle.
Animate Time Scale
To make the shot more cinematic, let's add a bullet time effect to the liquid. As Phoenix allows animation of the Time Scale parameter directly, you can just set key frames to the Time Scale.
To simulate the full length of the simulation, enable the Timeline of the Stop Frame.
Time Scale specifies a time multiplier that can be used for slow motion effects.
Beware when you tweak the Time Scale with Particle/Voxel Tuners in the scene. Time Scale different than 1 will affect the Buildup Time of Particle/Voxel Tuners and the Phoenix Mapper. In order to get predictable results you will have to adjust the buildup time using this formula: Time Scale * Time in frames / Frames per second
Go to Graph Editors/Track View → Curve Editor and set key frames to the curve of the Simulator's Time Scale. Setting keyframes to the Time Scale gives the animation a period of bullet time effect. Each frame and value is shown in the screenshots. All keyframes are set to Tangents to Linear.
Run the simulation again.
Here is a preview animation of the simulation.
Now the bullet time effect makes the shot more interesting. However, when time slows down, the droplets aggregate and grow larger in an unrealistic way.
Animate Step Per Frame
During the bullet time effect, it is unnecessary for the Steps Per Frame option to have a high value. Animate Steps Per Frame according to the keyframes of the Time Scale.
The Steps Per Frame option is located in the Dynamics rollout of the Simulator.
Go to Graph Editors/Track View → Curve Editor and set key frames to the curve of the Simulator's Steps Per Frame (SPF) parameter. Set the SPF keyframes so the Simulator makes less calculations during the bullet time effect. Each frame and value is shown in the screenshots. All key frames are set to Tangents to Linear.
Run the final simulation.
Here is a preview animation of the simulation. Now the size of the droplets is consistent throughout the animation.
This part of the tutorial focuses on the water material for the liquid.
Create a V-Ray Material. Assign it to the PhoenixFDLiquid Simulator. Set the Diffuse color to black.
Set the Reflection and Refraction colors to white. Set the IOR to 1.333, which is the physically accurate Index of Refraction of water.
Keep the Max depth to its default value of 8 for both Reflection and Refraction.
To slightly blur the specular highlights, produced by the light source in the scene, reduce the Reflection Glossiness to 0.85.
When the Reflection and Refraction colors of a V-Ray material are set to white, and the IOR is set to 1, this creates a completely transparent material. This is because the Index of Refraction of clear air is 1.
Here is a rendered image with the water material applied to the Simulator. With the black background, it is hard to see the water in the shot. Usually with fast moving liquid, whitewater should be visible within it.
In this case, the 22nd frame is rendered. However, you can render whichever frame you like.
Adding Whitewater Shading
Go to Create Panel → PhoenixFD and create a VoxelShader helper in the scene.
The Voxel Shader node is used to shade Fire/Smoke simulations and meshes in a single Simulator. Phoenix has multiple rendering modes that can be divided into two types: Volumetrics and Surfaces. The volumetric modes are used for fire and smoke. 3ds Max materials can't be used to shade volumetrics because they don't have a surface. Instead their shading is described in the Volumetric Options tab.
Unlike the volumetric modes, in surface modes the Simulator behaves just as any regular geometry - 3ds Max materials can be applied to the Simulator and there is no need for a dedicated shader.
As the liquid simulator does not use the Smoke channel, we can use it to output Special channel data - in this case the Vorticity Smooth.
The Voxel Shader then can read the vorticity smooth data from the liquid simulator and render it as smoke. This way we can achieve the whitewater shading in the liquid water.
Special channels can also be read by the Grid Texture and used for rendering.
Select the Voxel Shader. In the Modifier Panel, add the PhoenixFDLiquid Simulator to the Voxel Grid source. Switch the Sampler Type to Spherical.
Click on the Volumetric Options button.
The Sampler Type determines the blending method between adjacent grid voxels. The default Linear type linear blending occurs between neighbor voxels to smooth out the fluid's look. Sometimes this mode may unveil the grid-like structure of the fluid. And the Spherical type uses special weight-based sampling for the smoothest looking fluid. That's why we set the Sampler Type to Spherical.
In the Volumetric Render Settings of the VoxelShader helper:
- Set the Fire Based on option to Disabled as we won't need any fire.
- Set the Smoke Color to Constant Color. Set the color to white.
- Switch Scattering to Ray-traced (GI only) - this will give us a bit better light scattering for the smoke.
- Decrease Light Cache Speedup to 0.1.
Higher values of Light Cache Speedup decrease render time but they might create flickering in the render. That is why the value is reduced to 0.1. You can change the value of Light Cache Speedup depending on your scene.
Select the Simulator, and go to the Preview rollout. Disable Show Mesh, and enable the Special option, under Voxel Preview. By doing so, Phoenix visualizes the Vorticity data in the viewport.
Here is a rendered image with the Voxel Shader in the scene. A cloud of smoke with no definitive boundaries now covers the liquid.
Select the VoxelShader helper. Go to the Modifier Panel, and add the PhoenixFDLiquid Simulator to the Cutter Geometry source. Enable the Cutter Geometry option.
When enabling the Cutter Geometry option, rendering will occur only inside the selected geometric object's volume. This way we can trim off the volumetric cloud outside of the liquid mesh.
Here is a rendered image after the last step. The whitewater appears too strong.
Select the VoxelShader helper, and go to the Volumetric Render Settings. Switch the Smoke Opacity type to Based on Smoke.
To reduce the effect of whitewater, adjust the curve of the Smoke Opacity as shown. The Opacity diagram allows you to use the smoke channel and remap it through the Opacity Curve to get the rendered opacity. In this case, the curve remaps the input smoke value to a smaller value. For example, when the input value is 7.5, the output will remap to 0.3. Besides, the curve is tweaked in S-shape making the whitewater looks more contrasty.
Note that the highlighted in blueish-green region shows the smoke data range for the current timeline frame. When you scrub the timeline, this area changes as the grid content changes. In this case we have smoke ranging from 0 to around 7.6.
Alternatively, instead of manually creating the Smoke Opacity curve yourself, you can load the render preset file from the provided example scene files here. Otherwise, skip this step.
Note that loading a preset file overwrites all your current render- and preview settings!
To load the render preset file, press the Render Presets button. It is located under the Rendering rollout of the VoxelShader node. Select Load from file, and open up the VoxelShader_RenderPreset.tpr file.
V-Ray Frame Buffer
Open the V-Ray Frame Buffer, and use theCreate Layer to add layers for Lens Effects, White Balance, Exposure and Filmic tonemap.
Render the final image using the V-Ray Frame Buffer with the color corrections and post-production effects set to:
Blending - Overwrite: 0.70
Type - Hable
Shoulder strength: 1.00
Linear strength: 0.79
Linear angle: 0.48
Toe strength: 0.53
White point: 20.00
Highlight Burn: 1.00
Magenta - Green tint: 0.125
The Filmic tonemap layer simulates the film's response to light within the VFB.
Feel free to use other values for the post-production effects, depending on your preferences.
Here is the final rendered result.