Peter Eastman
For this project, I implemented a variety of procedural solid textures.
These textures use noise functions to alter many different surface
properties, including the ambient and diffuse colors, transparency,
reflection coefficient, and surface normal. The textures are based on the
noise functions of Perlin (Siggraph 1985, pp. 287-296) and Worley
(Siggraph 1996, pp. 291-294).
Perlin's noise function uses a randomly chosen spline interpolation
function to define a function in three dimensional space which varies
smoothly on a specified length scale. Typically, many "octaves" of this
function are added together, each one with a length scale half that of the
previous octave, to create a fractal noise pattern.
Worley's noise function places randomly chosen "feature points" with a
specified density throughout three dimensional space. He then defines a
function F1(r) as the distance from the point r to the nearest feature
point. Similarly, he defines F2(r) as the distance to the second nearest
feature point, and Fn(r) as the distance to the nth nearest feature
point. As with Perlin noise, multiple octaves of these noise functions
can be summed to obtain useful fractal patterns.
The sky texture in both images uses fractal Perlin noise to modulate the
ambient color. Noise values below a certain threshold correspond to clear
sky, while higher noise values are mapped to varying cloud densities.
The ocean water and cliff face are both bump mapped based on the fractal
version of Worley's F1 function. This creates a complex pattern of sharp
ridges on many length scales, similar in shape to ocean waves.
The marble texture on the columns is created by using Perlin noise to
modulate the phase of a sine wave. This distorts the sine wave into a
complicated pattern of swirls which resemble turbulence.
The colored mosaic pattern is created using Worley's functions. F2-F1 is
used to define the gaps between stones, while each stone is colored based
on the identity of the nearest feature point. F1 is used to bump map the
stones, giving them a rounded appearance.
The leaves climbing up the columns are created by using the F2 function.
Values below a cutoff are green and opaque, while values above the cutoff
are transparent and colorless. In addition, the texture is bump mapped
with F2 to give shape to the individual leaves.
The dolphin was modelled by hand using Pixels3D on the Macintosh, based on
photographs of bottlenosed dolphins.
The splash consists of 300 tiny spheres. I wrote a Matlab script to
generate the points according to a reasonable, radially symmetric
distribution, and output them as an Inventor file.
The water in the pool was generated by adding together various sine waves,
plus a small amount of random noise, to create a hightfield. I then wrote
another Matlab script to output the heightfield as an Inventor file.
The images were raytraced with a maximum ray tree depth of six. They were
antialiased by tracing four rays per pixel, one through a random position
in each quadrant.