This is about Ken Perlin/'Perlin Noise'. From the Wikipedia page on Perlin Noise:
> Perlin noise resulted from the work of Ken Perlin, who developed it at Mathematical Applications Group, Inc. (MAGI) for Disney's computer animated sci-fi motion picture Tron (1982). In 1997, he won an Academy Award for Technical Achievement from the Academy of Motion Picture Arts and Sciences for this contribution to CGI.
Edit: also, if you'd like to see something more recent from him, I'd recommend this talk: https://www.youtube.com/watch?v=4YnVhTyrYbo [SIGGRAPH Asia 2011 - Featured Speaker, Ken Perlin] —interesting stuff, and he's an engaging speaker.
This function works surprisingly well in practice.
IIUC, it's a hash function defined over 3D space with tunable gradient between points.
The cool thing about the the marble vase example is that marble texture continues on the inside. So if you look on the inside of the vase the texture will still be there. automatically [http://cims.nyu.edu/~perlin/doc/vase.html]
Here's an example I made [lots of copy pasta btw :)] when learning this to get a wood texture [a simple application of Perlin noise, btw :)]. If you cut through the wood, the texture will still be there.
This was used by Flipboard for their Duplo algorithm which creates plausible layouts for web content. They used Perlin Noise to create variations between pages to create an 'organic' sense to the algorithmically generated layouts.
Love his work and his current research project ChalkTalk. Dynamic sketches with knowledge embedded in it will completely change how we learn and communicate. Check out his talk : https://youtu.be/nHBAGke3eCU if interested!
That's kind of like saying the random() function made a billion dollars for Notch, though. What made the money was the whole game, not just one algorithm used.
I believe the comment is intended to point out to HN readers that this algorithm was central to the game, and since the game made a large amount of money, then this algorithm served (at least in part) as a basis for Notch's monetary rewards. I do not believe the comment was meant to suggest that this one algorithm by itself made money, as certainly any reasonable reader would understand that it is the whole game that made money. It is unlikely that the commenter was suggesting that you could, for example, sell a Perlin noise function for a billion dollars, or even generate any revenue directly from the noise function itself, absent a compelling game around it.
The commenter was, I believe (and I say this without having any inside information as to his or her thought process) employing a technique in which the full range of details surrounding an event are ignored in favor of one aspect (here, the Perlin noise function) on which we want to focus.
But at the same time it seems to casually reduce Notch's effort to "used perlin noise". He didn't need perlin noise per-se; there are countless of other terrain generation techniques. But perlin noise, in part, made minecraft what it is today, that's true.
Sure, and the choice of coefficients was as important to the terrain generation as the noise function itself. But the terrain generation was absolutely crucial to Minecraft's success and in the early versions provided almost all of the game's depth and novelty. Without interesting and infinitely varying landscapes to explore, early Minecraft would have had much narrower appeal.
I beg to differ. It was already gaining a decent cult following before Infdev. I would have kept playing it if it didn't implement perlin noise, and while it wouldn't be as popular I don't know if it was crucial to its success. It's a bit Lego and a lot Infiniminer, those two aspects were key to its initial success. Infinite procedural terrain just made it that much better.
Out of personal curiosity, are you a fan of the game yourself?
Fun fact: since Perlin noise basically provides a smoothly varying scalar gradient over a space, it's trivial to extend it to higher dimensions (including variance through time), and to use it to generate things like vector fields when you need smooth but random motion or other effects.
Also fun to toy with different interpolation and noise generation algorithms.
It's a wonderfully simple idea and great fun to play around with!
My simple gamer (ie every texture is 2D) brain had a bit of trouble coming to terms with continuous 4D textures, and I think it was talking about how Perlin noise could be continuous that made the idea stick eventually.
So I would like someone to correct my understanding if possible
Reading the Wikipedia explanation (ok, I have been ill recently) I see a process that given say a 2D grid, can assign for each cell in the grid a single number, that number is derived from a function applied to each of its corner nodes.
The function basically assigns a random number around the node (i.e. 360 degrees) and then merges that random with the distance to the point, and then merge that with all four points auchbthat one cell now has one number that is affected by distance, it's neighbours and randomness
I think that pretty clearly gives a smoothed map that will not have the junpiness of random map placements
Your description is accurate, but the most important part to know is that the random values on the lattice are used as the derivatives of the noise function. The noise function itself is then an itegral of those derivates. By putting the derivatives at the lattice points, the grid structure underneath becomes far less visible. If you used the random values directly, and just interpolated those using a spline, you get a 0-value derivative at exactly every lattice point, and you end up seeing the grid structure in the result, it becomes glaringly apparent. Using Perlin noise, the minima and maxima are offset randomly from the grid, making the overall function feel much more natural.
It's useful any time you need some natural looking randomness in a texture. Perlin noise is standard in pretty much all 3d rendering software for films, and it's becoming quite common for games.
The turbulence part of this is when you take a whole stack of Perlin noises at different frequencies, i.e., different grid sizes, and sum them. It's more expensive of course, but this is how to get extremely realistic feeling noise, it gives you medium and high frequencies. And it further hides any grid artifacts.
I used Perlin noise as a wind function to animate bushes & trees in the animated movie Madagascar. Perlin actually works really well for windy looking motion because of the way it's derviatives work. I tried a whole bunch of other noise functions, and Perlin was the only one that worked well.
Another fun application of Perlin noise is fake fluid dynamics. If you take the curl of a Perlin noise field, you get a nice turbulence function that has no divergence. Fluids are usually approximated as being incompressible, and that's part of what makes fluids look fluid. Curl of Perlin can give you a nice fluid-looking turbulence. Curl of any noise is divergence-free, of course, but Perlin works well and looks better than others.
Perlin noise is actually more expensive to evaluate than a real fluid simulation. The fun/important part is that Perlin is static, so there's no simulation and you can render your frames out of order and in parallel. With a fluid simulation, each sim frame depends on the previous one. Fake curly noise is also easier to set up and tune than a fluid sim.
I and others have used this technique on lots of films for quick turbulent smoke, fog, and particulate effects.
Thank you for your replies - I will try writing my own perlin generator for something.
I am taking a break from HN for a few weeks, and would not have replied but I just wanted to say the ability to ask a question and get back "yeah I used this technique on that movie you saw" is something no other forums provide. It's awesome.
A few years ago I ported some efficient perlin noise generation into javascript to play with it. Here's a really simple visualisation of what perlin noise actually looks like:
(This is actually a 3d simplex noise function, where the z axis is mapped to time. Simplex noise is a variant on perlin noise. Perlin noise is also in the repo but I don't have a demo of it online.)
The 'improved noise' mentioned in the page is, I believe, more commonly known as 'simplex noise'[1], as it is mathematically based on manipulating n-dimensional simplicies. If you're interested in noise and using it well, his presentation 'flow noise'[2] is quite educational.
This was something I always wanted to look into, and I did a while ago. I added options to visualize grid, vectors and make it moving to show the intuition people around. I think it helps discussion a lot. (there might be errors in implementation or it might be completely off if my memory failing me)
In 1997 I received a Technical Achievement Award from the Academy of Motion Picture Arts and Sciences for work I had done on procedural texture. For example, the NYU Torch on the right is made entirely from procedural textures (except for the text along the bottom). The flame, background, and metal and marble handle are not actually 3D models - they are all entirely faked with textures. A hi-res image of a marble vase I made using this technique can be found here. A bunch of other texture images I created can be found here.
I then improved it, and wrote a paper about that. You can play with interactive demos of the improved version here.
You can play with designing noise-based textures yourself with a really nice interactive Java Applet created by Justin Legakis. Also, the interactive fractal planet demo on my home page is made using these techniques.
It seems that my techniques found their way into the various software packages, such as Autodesk Maya, SoftImage, 3D Studio Max, Dynamation, RenderMan, etc., that folks use to make the effects for feature films, which is way cool. Movies look better now, and I guess that makes me a good American.
Here's what the award actually says:
To Ken Perlin for the development of Perlin Noise, a technique used to produce natural appearing textures on computer generated surfaces for motion picture visual effects.
The development of Perlin Noise has allowed computer graphics artists to better represent the complexity of natural phenomena in visual effects for the motion picture industry.
> Perlin noise resulted from the work of Ken Perlin, who developed it at Mathematical Applications Group, Inc. (MAGI) for Disney's computer animated sci-fi motion picture Tron (1982). In 1997, he won an Academy Award for Technical Achievement from the Academy of Motion Picture Arts and Sciences for this contribution to CGI.
https://en.wikipedia.org/wiki/Perlin_noise
Edit: also, if you'd like to see something more recent from him, I'd recommend this talk: https://www.youtube.com/watch?v=4YnVhTyrYbo [SIGGRAPH Asia 2011 - Featured Speaker, Ken Perlin] —interesting stuff, and he's an engaging speaker.