Modifications to Classic Perlin Noise

I have been working with analytical noise derivatives lately and it turns out the analytical derivative of classic perlin noise can get rather involved.

Ken Perlin solved this problem in simplex noise by using radial kernel summation rather than interpolation to combine the gradient results.  It occurred to me this idea can be applied back to classic perlin noise and as a result here’s two modifications to classic perlin noise.

Classic Perlin Surflet Noise

The first modification is simply the replacement of interpolation with radial kernel summation as done in simplex noise.  The result is a noise which looks almost identical but has an easily computable analytical derivative.

Classic Perlin Surflet Offset Noise

After applying the first modification I realized we can now jitter ( randomly offset ) the gradient points to help break the fixed grid structure of classic perlin noise.

An animated gif comparing these changes with the original can be seen here.  An example implementation can be found here.

About briansharpe

Computer games and graphics programmer interested in procedural modeling and texturing techniques. Current Work: Weta Digital. Work history: Sidhe Interactive, Sony London (SCEE), Pandromeda,
This entry was posted in Uncategorized. Bookmark the permalink.

5 Responses to Modifications to Classic Perlin Noise

  1. Really nice idea, the classic perlin noise with surflets looks like a simplex noise with fewer instructions (tested on 2d). For 2d, I have used (1-t)^4 for the spherical kernel instead of ^3, as It was looking a bit more sharper.

    Also, about using random offsets for isotropic noise, It means that normalization will be slightly off, no?

    • briansharpe says:

      Hi Alexandre.
      In 2D we have 4 surflets which effect a grid cell, at positions 0,0 0,1 1,0 1,1. Offset means to repostion those surflets somewhere else. The normalized gradient vector associated to each surflet stays the same.

  2. voxelizr says:

    Your GLSL noise collection offers really outstanding performance compared to the alternatives I looked into. Just amazing work. Hope you’re still working on that procedural modeler — thanks for sharing your hard work on GitHub and your insights here. Greatly appreciated, I was about to give up on realtime GPU noise and revert to textures before I found this. Enjoy your trips and greetings from another codetrotter in SE Asia =)

    • briansharpe says:

      Thanks Philipp. Actually I’m back in New Zealand now, earning money for my next trip away (which I think will be Asia too). Have fun on your trips. Brian

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s