Work with Bifröst Liquid

Liquid simulations can be used to create all types of fluid effects including open water, fast moving, turbulent liquids, as well as semisolids such as lava, mud, and gels.

A liquid can also be guided by a polygon mesh or low resolution simulation to generate controlled splashes, boat wakes, and more. The steps for setting up guided liquid simulations are different than typical liquids. See Guide a Bifröst simulation of a liquid surface.

Get started with liquids

Here is a quick overview of the main steps for creating a liquid simulation.

  1. Select one or more polygon mesh objects to act as emitters.

    The selected meshes will all use the same emitter properties (continuous emission, density, and so on), but you can add other emitters later. See Work with Bifröst emitters.

  2. Select Bifrost Fluids > Create Liquid.
  3. In the main liquid properties, you might need to adjust Gravity, Density or Surface Tension if the scene was not modeled to a scale of 1 centimeter = 1 meter. See Bifröst simulations and scene scale.

    Leave Master Voxel Size at a high value for now.

  4. Play back a few frames and adjust Master Voxel Size if necessary. You should use a value that's small enough to give a good sense of the overall effect in relation to the size of other objects in the scene, but still high enough for fast, low-resolution previews.

    Note that the simulation updates with new settings only after you return to the first frame (by default, frame 1).

  5. Make sure that the emitter properties are set as desired. For example, leave Continuous Emission off if your liquid source is a nozzle or jet. Turn it on if you want to fill an area with liquid or create a single drop of liquid.

    If desired, you can paint Density and Expansion Rate to have them vary across an emitter's surface. See Paint Bifrost attributes.

  6. Determine the proper consistency of the liquid by adjusting Viscosity. The appropriate Viscosity value is dependent on the default Bifröst scale of 1 cm = 1 m. When simulating water and similar low-viscosity liquids, you should set this value to 0 to avoid unnecessary computation. Increase it for heavy liquids and semisolids. See Bifröst Viscosity attributes.
  7. Add any other objects that you want to use to control the simulation.
    • Add colliders to direct the liquid flow or to generate splashes, waves and churn in the liquid.
    • Add motion fields to to control the liquid's velocity, for example, to make water gush from a fire hose. .
    • Add killplanes or kill fields to reduce memory and computation if particles move outside of the camera's view.
  8. Play the scene to preview the simulation. See Preview a Bifröst simulation.
  9. Adjust attributes and preview again until you are satisfied with the overall motion at low resolution. In particular, some attributes in the main liquid properties that you might to tweak or enable include:
    • Adaptivity attributes so they better suit the scale and resolution requirements of the simulation. By default Bifröst liquid simulations are adaptive, meaning that high resolution liquid only appears at the surface of the liquid or near colliders. See Control spatial adaptivity.
    • Refine Nearby Fluids depending on the amount of detail you need near collider meshes. See Bifröst ColliderProps attributes.
    • Erosion if particles "surf" across the liquid surface, or stick to the underside of colliders. See Bifröst Erosion attributes (liquid only)
  10. When satisfied with the overall motion, you can increase Master Voxel Size for more detail in the simulation. See Bifrost Resolution attributes.
  11. If desired, add foam and spray effects by emitting foam particles from the liquid. Foam emission is based on the amount of churning, curvature, and velocity at and below a liquid's surface. See Work with Bifröst foam.

    To decrease simulation time, consider creating a user cache of your liquid simulation before adding foam. See Create a Bifröst user cache.

  12. When done, you can render the result. This depends on the renderer that you are using, so consult the documentation for your renderer. If desired, you can also: