

But later I found it was already invented by Ivan DeWolf in 2005 3. At first I thought this method was new and named it Bitangent Noise, since it’s tangent to both the level surface of field $\phi$ and field $\psi$.

One day when I was looking over some vector calculus materials and expecting some clues to optimize my noise generator, I occasionally found some identities that are particularly interesting: In practice we usually need 4d noise (3d position + time), which makes things worse, because the higher the dimension, the more expensive to calculate. While mathematically simple and elegant, curl noise is not very cheap to generate. So to get a divergence-free vector field, you can firstly generate 3 random scaler fields, then calculate the gradient of each, and finally compute the curl from those gradients, now the result is divergence-free by construction. If you don’t know the curl noise, its core idea is based on this identity: $\nabla \cdot \nabla \times \equiv 0$, i.e. Later I also tried to reproduce that effect (github project), though the result is not as good as smash’s masterpiece.
Fluid noise generator. generator#
The most widely used divergence-free noise generator is called Curl Noise 1, I first knew it from smash’s great article 2 about the making of the blunderbuss demo, in which the fluid effect impressed me deeply.
Fluid noise generator. how to#
The following image ( video) shows a particle system that is updated using bitangent noise, and here is a shadertoy example shows how to use bitangent noise to make a smoke ball.ĭivergence-free noise is an ingenious technique that is extremely suitable for driving particles to move like real fluid motion. The implementation is a single shader without any other dependencies, and both HLSL and GLSL codes are provided for your convenience. This article describes a method called “Bitangent Noise” which can generate divergence-free noise efficiently.
