Skip to content

bcokert/presentation-sexy-noise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hello, my name is Brandon, and today I'm gonna talk about Noise, specifically Sexy Noise.

So what is Sexy Noise? Well, the Noise I'm referring to is the generation of random-like behavior similar to many natural phenomena. The distribution of trees, terrain elevation, water channels, etc. Sexy Noise then, is just generated noise that looks good.

So what's Noise good for anyways? All kinds of things. In one dimension we can use it parametrically, such as animating a models x,y,z coordinates through time. In two dimensions, can do things like terrain generation, randomized textures, or normal maps, among many others. In three dimensions, you can generate 3d textures for MRI imaging, or model the path that water might carve through a limestone cave. In four dimensions and higher you get into physical modeling like quark probability fields, sound modeling, and fancy sciency stuff.

But in all these cases, what makes noise good? How can you tell? It really comes down to gut feeling. Sexy noise looks good. Ugly noise does not. Sexy noise looks natural, ugly noise looks artificial. Sexy Noise is diverse, ugly noise has repeated patterns. Sexy noise is clear of sharp artifacts, Ugly noise is covered in them. Sexy noise is curvy and smooth, ugly noise is jagged and spastic.

So how do we get Sexy Noise? For the most part there have been few formal methods defined, as most shops used to create their own methods. But there are a few that stand out.

The first and most simple method is just random generation - for each dimension, pick a random number, then connect the dots. It's quick, easy, and almost always looks like garbage. Random noise doesn't account for smooth transitions. It doesn't take into account nearby topology when generating new features - in fact it's pretty much unusable for terrain generation. Post processing just makes it look like smooth garbage. In the early days of noise generation, every company had their own custom noise generation techniques, which shared various subsets of the above problems.

In 1982, a more popular method was created that became extremely common - the midpoint displacement algorithm, and it's most popular variant, the diamond-square algorithm. Midpoint displacement was an attempt to provide a recursive solution to noise, so you could get more and more detail by just letting it run longer, as well as ensuring smooth feature transitions. Combined with some well picked parameters and pre-/post- processing, high frequency change could also be mitigated, and pattern repetition was virtually non-existant. Perhaps the most important feature was it's speed - it was so fast it could be used in real time, making it great for video games and texture modeling. However it had some problems - it was tough to remove artifacts, tended to produce several creases, and it was hard to make specific features like rivers or mountains appear.

In come Ken Perlin. While working on the 1981 version of Tron, he became frustrated with the machine-like look of current texture generation methods, which led to him developing Perlin Noise in 1983. Perlin Noise was meant to look random, but significantly reduce artifacts and provide much more control than existing methods. Rather than recursively breaking down an initial structure like the midpoint algorithm, Perlin Noise generated a random noise grid of vectors, which could be scaled arbitrarily. Actual noise was computed with a linear combination of these vectors, and thus had infinite resolution - the size of the grid determined not the quality of the result, but the degree of control over the generation. A single plane of terrain could be generated by a 1x1 grid or a 1000x1000 grid, the former resulting in low frequency rolling changes, and the latter with high frequency mild changes. By 1988, Perlin Noise was the de-facto standard for visual noise, being used heavily by Pixar, SoftImage, RenderMan, Dynamation among many others. The resulting quality was so good that Perlin eventually received an Academy Award for Technical Achievement in 1997.

Though Perlin Noise was a godsend for the movie industry, it still had it's flaws - primarily speed. It was too slow to generate in real time, especially for higher dimensional physical problems, as it scaled exponentially in the number of dimensions.

As a result, several other noise methods became widely used, frequently for video games. Simplex Noise, a refinement of Perlin Noise that took a slight hit to configuration and simplicity for a significant speed increase, became the second most popular method. Brownian noise, another popular method, is more a catch all for any method that takes an existing algorithm, like Perlin Noise, Diamond Square, Sinusoid, etc., runs them at various frequencies called octaves, and blends them together. It tends to gain the benefits of the underlying methods while subduing most of the negatives. Fractal generation, which uses some pre-defined pattern, is not really noise, but is commonly supplemented by it.

About

The slides for a lightning talk I gave at Hootsuite in July 2015

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •