CS6554 Computer Graphics 2 – Lab 5.1 – 3D Textures

Even though the requirements for the Renderer Project have already been satisfied, I decided to extend the project to apply a few other aspects of Texturing using Perlin Noise. Because of the characteristics of Perlin Noise, it can be generated as a three dimensional texture as well. Where a normal texture or image can be considered a flat sheet of color data as in wall-paper or gift-wrap, three dimensional textures can be thought of as volumes of color data more akin to materials like stone. A two dimensional texture requires some form of specified mapping algorithm to wrap the three dimensional model, but a three dimensional model can easily be mapped to a three dimensional texture through a generalized algorithm as there is no conversion from one space to another.

The following images are renders of three dimensional textures generated with Perlin Noise.

The concrete textures are simply greyscale visualizations of the turbulence produced by the noise algorithm using different seeds.

Concrete 3D Perlin Texture

Concrete 3D Perlin Texture

Concrete 3D Perlin Texture

Because a three dimensional texture is highly expensive memory-wise to maintain, memory can be conserved through preprocessing models with perlin noise then extracting slices of the texture. The slices can then be remapped as two dimensional textures to the run-time model. In the following example, slices from one of the concrete cubes have been rendered as surfaces of a cube map which can then be treated as a single two dimensional image and subsequently mapped onto only the surface of the cube during run-time.

The memory savings in this approach is considerable and can result in an order of magnitude reduction in memory requirements. The three dimensional image is 64 x 64 x 64 pixels with 3 channels per pixel at 4 bytes per channel. The memory requirement for that texture is at least 3MB. And as the size of the texture increases, the memory grows considerably to a point where a 512 x 512 x 512 can bring a standard machine to a swapping/starving halt. The two dimensional extraction reduces the above case to 64 x 64 x 3 x 4 x 6 reducing the memory requirement to 300KB.

Unwrapped Concrete 3D Perlin Texture into 2D Cube Map

The turbulence can be used to preturb data and introduce randomness. The following cube is simply a sine function applied to the 3D texture.

Sine 3D Perlin Texture

Turbulence is then applied with a few additional parameters to modulate the resultant image. The rest of these images are various results generated by tweaking parameters applied to the preturbed sine texture.

Fingerprint 3D Perlin Texture

Zebra 3D Perlin Texture

Marble or Holstein 3D Perlin Texture

Crazed 3D Perlin Texture

Comments are closed.