Procedural Texture Synthesis

Preview:

DESCRIPTION

Procedural Texture Synthesis. Patterns from Algorithms. Procedural Synthesis. The basic problem: Worlds are big . To create models and textures for even fairly small worlds takes ages, if you do it by hand. Idea: write down the rules of the world, and a program can create the content. - PowerPoint PPT Presentation

Citation preview

Procedural Texture Synthesis

Patterns from Algorithms

Procedural Synthesis

• The basic problem: Worlds are big.– To create models and textures for even fairly small

worlds takes ages, if you do it by hand.

• Idea: write down the rules of the world, and a program can create the content.

• Philosophy of algorithmic synthesis: proceduralism.

[World of Warcraft, 2004-2010]

[Oblivion, 2006]

Procedural Texture

• Simplest form: function evaluation– T(x,y) = ?

• Instead of accessing texture memory, directly compute the texture value

• Pro: saves memory, bus• Con: need the algorithm– and, need a shader, but normally would have that

anyway

Proceduralism vs Reuse

• Reuse: simple repetition of models, textures

• Proceduralism: new models, textures by rerunning algorithm with different inputs– trivially, different random seed

Sophisticated reuse

• Use small pieces – reuse not so obvious– "Lego blocks"

• Modular design: blocks are big (e.g., section of tunnel) – might be OK in industrial fiction

• "divine corpse" for monsters, architecture• Penrose tiles, Wang tiles for texture, terrain– Reuse with rotation, less apparent– city setting: regular layout

Texture Synthesis Primitives

• Building blocks for textures:– noise– Perlin noise– Voronoi cells– many others

• Rosalind Picard: "a society of models"

Texture Basis

• "basis functions" for texture• primitive functions used as foundation for specific

functions aimed at specific effects• Perlin noise: "the function that launched a thousand

textures"

Noise

• Simple and straightforward:– N(x,y) = random(range)

• Introduces much-needed randomness• But:– lacks coherence– cannot be sensibly subsampled, supersampled

Perlin Noise

• Ken Perlin, 1985

• random 4-vector at each node on an integer lattice:{a,b,c,d}[x][y][z]

Noise[x][y][z] = d[x][y][z] if x,y,z are integersotherwise, interpolate ax+d, by+d, cz+d using spline

2t^3 – 3t^2

DNoise

• Noise() is a scalar• Can get vector-valued function (for bump

mapping, say) by taking the gradient of Noise()

Multiresolution Noise

• Different signals at different scales• Fractals: clouds, mountains, coastlines

1/2 1/4 1/8 1/16 sum

Multiresolution Noise

• aka "turbulence"• FNoise(x,y,z) = Σ((2-i)*Noise(x*2i…))

• Extremely common formulation – so common that many mistake it for the basic noise primitive

Attributes of Perlin Noise

• Reproducible• Coherent• Continuous in first derivative• Arbitrary resolution

• Used as input to other functions

Perlin Marble

• texture = cos(x + a*Noise(x,y))– or, texture = cos(x + a*Turb(x,y))

• properly renormalized, of course!• purple/white color map• value of parameter a says how noisy the

marble is

Cellular Texture

• “Worley texture”, Worley 1996• Based on the Voronoi diagram: partition of

plane according to nearest point• Use nth-order distances (closest, second

closest…) as basis

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

v1

v3

v2

v4

v1

v2

v3

v4

Combining distances

• Having normalized distances, can combine– say D1, D2, D3, D4

• Take (say) 2*D1 – D3• Linear transformation given by 4 coefficients:– C1D1 + C2D2 + C3D3 + C4D4

• manipulate coefficients to obtain effects

Recommended