
Perlin noise - bpierre
https://eev.ee/blog/2016/05/29/perlin-noise/
======
malanj
When I was in high school I used Perlin noise to create some 3D terrain. Being
young and naive I emailed Ken Perlin and asked him some questions about it. To
my surprise he responded and was super nice :-)

~~~
Kronopath
As a student at NYU working with him on one of his research projects, I can
confirm that yes, he's a pretty nice guy.

------
david-given
See also Simplex Noise, Perlin's 2001 replacement --- it extends to an
arbitrary number of dimensions, _and_ it's cheaper:

[http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise....](http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf)

------
VMG
Time to post his website again
[http://mrl.nyu.edu/~perlin/](http://mrl.nyu.edu/~perlin/)

Needs to be ported to webgl some day

~~~
kaoD
> Needs to be ported to webgl some day

There are many shader implementations of continuous noise. Most should be
WebGL compatible.

EDIT: [https://github.com/ashima/webgl-noise](https://github.com/ashima/webgl-
noise) there you go :) Includes classic noise (Perlin I guess?) and Simplex.

~~~
Retr0spectrum
There's another cool WebGL simplex demo here:
[http://alteredqualia.com/three/examples/webgl_terrain_dynami...](http://alteredqualia.com/three/examples/webgl_terrain_dynamic.html)

------
colinthompson
This is a really nice write up! The graphs really show how a noise signal is
built up of its components. Additionally, while un intentional, it also shows
how Perlin noise can exhibit "gridding" artifacts from the regular spacing at
integer boundaries. This is especially true when used to create tangents based
on the signal.

~~~
Sharlin
Yep; as described in the "Improving Noise" article, the gridding is greatly
reduced if you use the "smootherstep" function which has a continuous second
derivative in addition to first.

------
Rexxar
Fun fact: there is a C reference implementation of Perlin noise directly in
the svg specification :
[https://www.w3.org/TR/SVG/filters.html#feTurbulenceElement](https://www.w3.org/TR/SVG/filters.html#feTurbulenceElement)

------
kleer001
Ah, the classic!

There's tons of other lovely noises too. Interested in more? Check out some
SIGGRAPH stuffs from Mr. Perlin.

------
jordigh
I found the following libnoise (C++ Perlin noise lib) tutorial very helpful:

[http://libnoise.sourceforge.net/tutorials/index.html](http://libnoise.sourceforge.net/tutorials/index.html)

------
drcode
Hmm... Perlin noise is a lot more complex to generate than I was expecting.

~~~
mrspeaker
You don't win an Academy Award for Technical Achievement for Math.random()!

------
fordred
I remember implementing simplex noise in verilog a few years ago. It took me a
while to get my head around it, but eventually something just clicked, and the
results were very impressive too.

------
amelius
Can't this be done more easily by solving a differential equation and setting
some random boundary conditions?

~~~
banachtarski
No not at all. Think for a bit about what the closed form solution of the
final generated function is for any of the examples given. Then think of the
differential equation that it satisfies (with N boundary conditions for every
segment of the partition). There's no way solving that is easier than what is
done in the article. Even before doing that, there are plenty of other methods
that still aren't as efficient, which was one of the main goals of the
algorithm.

