Ken Perlin, NYU
Fabrice Neyret,
INRIA

• Basic approach
• How it works
• Cool examples

• Controlled pseudo-random texture primitive
• Can be used for displacement

• Modify color

• Use a fractal sum
T(x) = N(x) + N(2x)/2 + N(4x)/4 ...

• Use a fractal sum of abs value:
T'(x) = |N(x)| + |N(2x)/2| ...

• Domain displacement:
color(x) = sin ( x + T'(x) )

• There is time component:

color(x) = sin ( x + T(x + time) )

• Make things "flow" better

• Pure evaluation:
Require only one place on the domain

• Swirling trick

• Noise is a sum of overlapping wavelets

• Each is a linear gradient × a dropoff kernel

Trick: rotate all the gradients over time

• Noise is a sum of overlapping wavelets

• Each is a linear gradient × a dropoff kernel

• Rotate all gradients (don't look at them)

• Small features independent of large features
• Eg: billowing
• Small features carried along by large features
• Eg: foam

• Constraint:
• Color(x) = func( x + T(x + time) )
• Only look at one domain point per noise eval

• Idea:
• As fractal sum progresses:
• Use value displacement at step i
• To create domain displacement at step i+1

• Follow along noise derivative at step i

• Move "downhill" in domain to eval step i+1

1. Eval noise for scale 2i

2. Shift domain downhill, following noise derivative

3. Iterate

• Maintain weight of how much to shift domain

• Weight = 1 : Foam

• Weight = 0 : Billowing

• Only pure evaluation needed
• A tool to use in a texturing bag of tricks
• Good for parallel / hardware accelaration:
Only need to know one domain point

• Apply to volume models, real time hardware