Noise | Course Overview Jim Whitehead

Slides:



Advertisements
Similar presentations
DFT/FFT and Wavelets ● Additive Synthesis demonstration (wave addition) ● Standard Definitions ● Computing the DFT and FFT ● Sine and cosine wave multiplication.
Advertisements

Procedural Textures Jian Huang, CS594, Fall 2002 This set of slides references slides used at Ohio State and “Texturing and modeling” by Ebert, et. al.
COMPUTER GRAPHICS CS 482 – FALL 2014 OCTOBER 6, 2014 TEXTURE MAPPING TEXTURES BUMP MAPPING ENVIRONMENT MAPPING PROCEDURAL TEXTURING.
Spline Functions – An Elegant View of Interpolation Bruce Cohen David Sklar
EARS1160 – Numerical Methods notes by G. Houseman
Image processing. Image operations Operations on an image –Linear filtering –Non-linear filtering –Transformations –Noise removal –Segmentation.
Chapter 4 Digital Multimedia, 2nd edition Vector Graphics.
Procedural Modeling L-Systems Procedural Terrain Procedural Behavior Based on the slides from Spring 2007.
Texture Mapping from Watt, Ch. 8 Jonathan Han. Topics Discussed Texture Map to Models Bump Maps, Light Maps Environment (Reflection) Mapping 3D Textures.
Twelve painting with procedures. Overview Making shaded images with procedures Making a more elegant language Making textures with noise functions.
Eighteen painting with procedures. Review [bitmap-from-procedure procedure width height] Returns a bitmap width pixels by height pixels Obtains colors.
Perlin Noise CS4300. The Oscar™ To Ken Perlin for the development of Perlin Noise, a technique used to produce natural appearing textures on computer.
10/21/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Terrain Dynamic LOD.
David Runyon Lauren Stana Kelsey Vaughn Molly Shelestak.
Noise Based Texture Noise Based Texture CMPS260 Presentation Guoping Xu Mar. 05, 2003.
Advanced Texturing Methods Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Monday, December 8, 2003.
1 Texture. 2 Overview Introduction Painted textures Bump mapping Environment mapping Three-dimensional textures Functional textures Antialiasing textures.
Procedural Textures.
Noise and Procedural Techniques John Spitzer Simon Green NVIDIA Corporation.
V. Space Curves Types of curves Explicit Implicit Parametric.
2D/3D Shape Manipulation, 3D Printing Shape Representations Slides from Olga Sorkine February 20, 2013 CS 6501.
COURSE: JUST 3900 INTRODUCTORY STATISTICS FOR CRIMINAL JUSTICE Instructor: Dr. John J. Kerbs, Associate Professor Joint Ph.D. in Social Work and Sociology.
CO Games Development 1 Week 12 Interpolation, Path Smoothing & Splines
Noises & Turbulences. Why Noises? One of the most popular procedural technique Very few things in nature are regular Great variety of noises exists The.
Create Procedural Textures with Perlin Noises
Real-Time Rendering Cody Tankersley.  Term Project Overview ◦ Desired Shaders  What is noise?  A Little History….  Noise Functions ◦ Some Implementation.
Interactive Graphics Lecture 10: Slide 1 Interactive Computer Graphics Lecture 10 Introduction to Surface Construction.
Chapter 2: Frequency Distributions. Frequency Distributions After collecting data, the first task for a researcher is to organize and simplify the data.
Population Based Optimization for Variable Operating Points Alan L. Jennings & Ra úl Ordóñez, ajennings1ajennings1,
Basic Theory (for curve 01). 1.1 Points and Vectors  Real life methods for constructing curves and surfaces often start with points and vectors, which.
Machine Vision Edge Detection Techniques ENT 273 Lecture 6 Hema C.R.
An Image Synthesizer- Perlin Noise. Outline Noise Introduction Noise Algorithm Noise Texture Example.
Filters– Chapter 6. Filter Difference between a Filter and a Point Operation is that a Filter utilizes a neighborhood of pixels from the input image to.
Part II – Photorealistic Rendering (1) Texture (4) CPSC 591/691.
Today’s Lecture Neural networks Training

Environmental Remote Sensing GEOG 2021
© University of Wisconsin, CS559 Spring 2004
Evolutionary Algorithms Jim Whitehead
3.1 Clustering Finding a good clustering of the points is a fundamental issue in computing a representative simplicial complex. Mapper does not place any.
FOURIER THEORY: KEY CONCEPTS IN 2D & 3D
Deep Feedforward Networks
Game Design, Development, and Technology
We propose a method which can be used to reduce high dimensional data sets into simplicial complexes with far fewer points which can capture topological.
Spatial analysis Measurements - Points: centroid, clustering, density
Instance Based Learning
Linear Filters and Edges Chapters 7 and 8
Perlin Noise CSU540.
painting with procedures
Basic Rendering Techniques
Machine Learning Basics
Convolutional Networks
3.1 Clustering Finding a good clustering of the points is a fundamental issue in computing a representative simplicial complex. Mapper does not place any.
Background: Lattices and the Learning-with-Errors problem
Computer Vision Lecture 4: Color
Fitting Curve Models to Edges
Shading CMSC 435/634.
Jeremy Bolton, PhD Assistant Teaching Professor
© University of Wisconsin, CS559 Spring 2004
Algorithm An algorithm is a finite set of steps required to solve a problem. An algorithm must have following properties: Input: An algorithm must have.
Objective of This Course
Sampling Gabor Noise in the Spatial Domain
Probabilistic Map Based Localization
Dr. Jim Rowan ITEC 2110 Vector Graphics II
Introduction to Parametric Curve and Surface Modeling
Computer Vision Lecture 19: Object Recognition III
Intensity Transformation
Dr. Jim Rowan ITEC 2110 Vector Graphics II
Introduction to Artificial Intelligence Lecture 22: Computer Vision II
Last Time B-splines Project 3 was made available
Presentation transcript:

Noise | Course Overview Jim Whitehead UC Santa Cruz School of Engineering courses.soe.ucsc.edu/courses/cmps265/Spring14/01 ejw@cs.ucsc.edu 31 Mar 2014

Computer generation Assume that there exists: One or more instances of some “thing” (level, music, robot, map, NPC, texture, etc.) … That meets a desirability guideline Might be expressible as a fitness function Might be human-guided, I’ll know it when I see it The “things” are comprised of sub-parts, and each sub-part typically has one or more ways it can vary Sometimes discrete choices Other times, a continuous range of possibilities Example: small shed: has four walls, can vary width & height, location of door, type of roof (flat, peaked, slanted, etc.)

Variation space Each type of variation can be viewed as an axis in an abstract N-dimensional variation (or search) space Shed example: shed length, shed width, shed height, shed door location, shed rooftype Creates a 5-dimensional space Algorithmic creation of “things” can be viewed as a process of finding desirable instances within the variation space

Generative approaches There are different ways of finding good instances in the variation space: Random (noise) Pick instance randomly Combine shapes and continuous functions (parametric design) Path-specified (grammars) Explore only along certain paths in variation space Hill climbing with semi-randomness (evolutionary techniques) Create population of instances, then select best ones, generate semi-random new ones from existing instances Constraint based (answer set programming) Explicitly state desired qualities of instances

Noise A noise function is a kind of random number generator. Random number generator (typical): i = random() No parameters, returns random number in a range With noise, return random number for a point I = noise(x) I = noise(x,y) I = noise(x,y,z) That is, a noise function maps from Rn to R You input an n-dimensional point with real coordinates, it returns a real value

Why do we care about noise? Noise has many applications Texture generation for a wide range of materials World map generation Cloud generation Randomness in game systems Perlin noise examples Experiments with Perlin Noise (sphere, lights, explosion) http://www.clicktorelease.com/blog/experiments-with-perlin-noise Perlin Noise map generation http://www.playmycode.com/build/edit/4931 Shader demos of various materials https://github.com/ashima/webgl-noise/wiki

Problem with simple random noise A simple approach for procedurally creating a texture is: Map a random number to each (x,y) coordinate noise(x,y) = random() Random number generators often have a limited range (e.g., [0,1]) Control maximum value by multiplying by an amplitude value a * noise(x,y) Problem Results don’t have any coherence to them. Just a jumble of values. Not appealing. Doesn’t look like anything, really.

Desirable noise qualities Ideally, a noise function will (informally): Give the appearance of randomness Be controllable, hence capable of generating many materials Have random variations of roughly the same size, roughly isotropic Quick to execute More formally: Be a repeatable pseudorandom function of its inputs Have a known range, often -1 to 1 Not exhibit obvious periodicity or regular patterns. If pattern does repeat, do it on long time scales Be stationary – should be translationally invariant Be isotropic – should be rotationally invariant

Different families of noise functions Lattice noise Value noise Gradient noise Perlin noise Simplex noise Value-gradient noise Lattice convolution noise Cell noise (Worley noise) Sparse convolution / spot noise

Lattice noise Uniformly distributed random number at each point noise(x,y,z) = random() Interpolate for values in-between lattice points For value noise: Linear interpolation: looks “boxy”, has lattice cell artifacts Use cubic interpolation instead (2nd derivative is continuous), such as cubic Catmull-Rom spline Can also use quadratic and cubic B-splines

Perlin Gradient noise Start with a lattice of random values (each point is P) For each lattice point, also create a random gradient vector, G Compute the inner product G . (P-Q) This will give the value at P of the linear function with gradient G which is zero at grid point Q Or, the projection of the gradient vector along the direction vector to P In n dimensions, compute this product for all 2n neighbors Now, interpolate between them

Noise Straight noise Make objects look dirty or worn Using gradient of noise to vary surface normal, can create bumpy appearance For more advanced effects, need to combine noise at multiple frequencies Source: Ken Perlin, http://www.noisemachine.com/talk1/20.html

Sum 1/f(noise) noise(p) + ½ noise(2p) + ¼ noise(4p) ... Creates nice cloudy atmosphere effect Source: Ken Perlin, http://www.noisemachine.com/talk1/21.html

Amplitude/frequency view Amplitude: difference between min and max values Wavelength is distance from one red dot to next Frequency = 1/wavelength Source: Hugo Elias Noise page

Amplitude & frequency variation Amplitude is halved as frequency doubles

Sum together to create 1/f(noise) Source: Hugo Elias noise page: http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

Sum1/f(|noise|) Instead of a fractal sum of noise, use a fractal sum of the absolute value of noise: |noise(p)| + ½ |noise(2p)| + ¼ |noise(4p)| ... Source: Ken Perlin, http://www.noisemachine.com/talk1/22.html

Sin(x + sum 1/f( |noise| )) Use turbulence texture from the previous slide Do a phase shift in a simple stripe pattern. Stripe pattern itself is created with a sine function of the x coordinate of surface location:  sin( x  +  |noise(p)| + ½ |noise(2p)| + ...) Source: Ken Perlin, http://www.noisemachine.com/talk1/22.html

Terrain generation Can map noise values to height map values Overlay a texture See: http://catlikecoding.com/unity/products/numberflow/terrain-demo/

Simplex noise Instead of interpolating among hypergrid neighbors, simplex noise divides space into simplices (n-dimensional triangles) Advantages: Simplex noise has a lower computational complexity and requires fewer multiplications. Simplex noise scales to higher dimensions (4D, 5D) with much less computational cost, the complexity is  for  dimensions instead of the  of classic noise. Simplex noise has no noticeable directional artifacts (is isotropic). Simplex noise has a well-defined and continuous gradient everywhere that can be computed quite cheaply. Simplex noise is easy to implement in hardware. Source: http://en.wikipedia.org/wiki/Simplex_noise

Noise pros/cons Noise is useful for generating a wide range of textures Via interesting mappings, can be used as a smooth source of randomness in a wide range of situations Most useful in content generation situations where a wide range of outputs are acceptable I.e., there are few constraints on the generated artifacts Those constraints that exist are baked into the noise algorithm Once there are many constraints, or many areas of unacceptability, or need wide variation, start needing more control