Inoise - Integrated Perlin Noise

Noise is such a common function in shader writing that we take it for granted. Unfortunatly as with all periodic functions its prone to aliasing. While most of the text books recomend frequency clamping, it is also possible to anti-alias noise analytically by intergating it. Though it's quite tricky none of the the maths involved is paparticularly difficult, and the results can be signifigantly better than other techniques under the right circumstances.

Anyway to save you the time of figuring it out for yourself, I've written a DSO shadeop for PRMan called Inoise which takes a position and filter width in either 1 or 2 dimmensions and returns a float. (f=Inoise(u,du) or f=Inoise(u,v,du,dv))

For testing purposes the DSO also includes a function "inoise" (lower case) which point samples the same noise. This is almost identical to Ken Perlin's code found in the book texturing and modeling. Inoise is based on this code, and should behave in a similar fashion apart from the aliasing behaviour.

I presented a sketch on Inoise at Siggraph 2001 during the Shading session. Also check out John Haddon's sketch on vector based textures in the same session (which I co-authored, though all the work and hence credit is really John's).


Source code and demo files for Inoise. This is set up for IRIX/PRMan but is adaptable to other platforms.

A Win32 dll for Inoise, as building dso shapeops on windows is particularly tricky.

The sketch as published in the Siggraph 2001 Abstracts and Applications.

Powerpoint slides from the Siggraph presentation.

Ian Stephenson.
DCT Systems
NCCABournemouth University