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.

### Like this:

Like Loading...

*Related*

##
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,

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?

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.

Oh, I was talking about re-normalizing the noise output range [-1, 1]. If positions are offsets, the maximum output at [0.5, 0.5] no longer applies.

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 =)

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