Thursday, February 19, 2015

Intro to Curl Noise

I gave a small talk at the recent Sydney Creative Coding meet on Curl Noise.

It was an introductory talk with the goal of explaining the basics, so those interested can go off and look at other peoples work and hopefully understand what is going on.

I have put the slides up here. Throughout the talk I took breaks for questions and showed pictures of curl and miscellaneous mathematical facts, which is why those appear.

I also wrote the following apps as demos

curlgrid - This is a basic app to explore noise/vectors/curl and particles in perlin noise
gpu curl 2D - This is a 2D version doing particle advection and curl generation on the GPU
gpu curl 3D - As above but a 3D version

All of them require openFrameworks and the ofxGui addon which should come with oF.

Some links to others work

Robert Bridson - Wrote the original paper on the topic, has some code available
Philip Rideout - More comprehensive examples and explanations
miaumiau - More discussion and cool examples in WebGL

I did only really discuss the basics so if you are interested I would strongly encourage you to go check them out.

It did take me some time to get my head around things, so if you didn't manage to pick all of it up in the ~25 minutes I was speaking for, don't worry about it. Even now I am not 100% sure the 2D case is right, appreciate any comments.

The GPU versions use a transform feedback vertex shader, you can find more info about this here.

If you are interested in the math, you can find more info here

Some other links:

Cosine approximation to the normal distribution: here
A derivation of the volume on an n-sphere: here

Questions/Comments email me or post here

You can also find me on tumblrvimeo and twitter




  1. Thank you for your presentation on Curl noise Pete. Very clear and easy to follow.

    1. Thank you, glad you found it useful and appreciate the comment.

  2. Thanks for including my nit-picking comments. :)

    Teaser: I am in the process of publishing an article presenting a noise function that computes its own analytical curl as well as its gradient. I hope to get it into JCGT (, but I'm still finishing up the code.

    You might want to google "tiling simplex flow and curl noise" some time in the not too distant future. If it doesn't end up in JCGT, some other journal might accept it, and if all else fails I will make sure to at least post it on

  3. Please disregard my ramblings above. The curl of a gradient is zero. My mushy brain and I will go hide in a corner now. That article is still coming, though.

  4. Glad to see you deleted my misinformed comment. Thanks for a much needed "marketing" of curl noise! It's not magic, and I wish more people would discover it.