Force Fields and Turbulence

Turbulence in Blender can cause serious problems, due to the fact that it is not a fluid-like turbulence field: The forces are essentially random, which means they are not divergence-free. A true fluid flow velocity field (derived from the pressure gradient) would instead always be divergence-free, meaning there are no “sinks” and “sources” of matter in the simulation. The effect of this mathematical property is that a turbulence field in Blender can easily “trap” particles or simulated vertices (cloth, hair) in a small area around an attractor point. The simulation can freeze in an awkward state or start to jitter, and un-freezing requires strong counterforces that can destabilize the simulation. With a divergence-free field the vertices can not easily be trapped and the resulting behavior is much more like that of objects following the flow of air or liquid.

A divergence-free field can be constructed from a scalar field using a curl operator. The entire procedure is described in the paper “Curl-Noise for Procedural Fluid Flow” (Bridson, Hourihan, Nordenstam 2007) http://www.cs.ubc.ca/~rbridson/docs/bridson-siggraph2007-curlnoise.pdf

Additional features described in the paper include using 4D noise for time-varying fields and the use of pseudo-advection over multiple octaves.

7 comments
  1. Interesting, especially 4D and pseudo-advection.

  2. Quite better! Improved realism!

  3. This feature is a new forcefield type, it does not touch particle code or other simulations themselves. Any multithreading has to happen on the side of the simulations, for a force field it is irrelevant.

    The force field is “just” a function. The current implementation is straightforward C code. I’m currently working on SIMD support, which should give a significant performance improvement.

    The noise field could also be used in a shader, to produce convincing pseudo-turbulence without expensive physical simulation. A CUDA implementation would then be useful. None of our physics sims currently support GPU computing, so the general purpose CPU implementation has priority.

  4. is this using cuda or is it only cpu based? It seems that multi threading is key for that sim.. so 8 cores or more are making the difference..?

  5. Thank you! :)

  6. Really awesome, thanks so much.

  7. Awesome – thanks a lot for this – finally a 4D turbulence with less problems :)

In order to prevent spam, comments are closed 15 days after the post is published.
Feel free to continue the conversation on the forums.