Aperiodic Texture Mapping
This research attempts to solve the problem of covering large surfaces with
homogeneous surfaces. Typically you have a small sample of a certain look
(e.g., "grass") that you want to map onto some surface ("a golf terrain").
Assume we have a procedure that generates the texture (convolution, solid
texture, or what not). Now you can either generate the texture at each point
of the surface using that procedure (cheap in memory but very costly in
time), or you can precompute a large texture and map it at rendering time
(cheap in time but expensive in memory). The method that I propose is
a tradeoff between these two extremes. I precompute only a finite number
of tiles, whose copies are then tiled aperiodically onto the surface. Compare
this with mapping a single texture with "torus-like periodic boundaries"
(generated typically using the FFT) onto a surface. The image on the
left is the periodic mapping, while the right one was generated using
our aperiodic tiles. Click on the pictures to get bigger versions.
The one on the left clearly looks too "artificial", while the one on the right
has a more "natural" look to it. Some people I have shown these pictures to
told me there were hidden patterns on the picture on the right (line-like
structures). Then again people see faces in clouds and hear 666s on old records.
By letting the textures evolve over time periodically (aperiodicity is
impossible in 1D says the theory), we can generate evolving texture
on arbitrarily large surfaces and over arbitrarily long time periods. All this
using only copies of a finite number of tiles.
Here are some examples. Please run all the animation in a continuous
loop to appreciate the time-periodicity.
Sea
This animation contains 3600 copies of our (time evolving) tiles.
Caustics
An evolving water surface creates light patterns on the sides and bottom
of a pool. These patterns are called caustics. If the water surface is aperiodic
then so are the resulting caustic patterns. For each of our tiles we generate
the corresponding caustic maps for both sides and bottom. Then we apply
the our tiles to map the entire pool.
Here are the resulting texture maps for one frame.
The next example shows a full ray-traced scene with our pool.
Having trouble seeing the caustics ? Well here is a closeup.
Now the question is: how many basic tiles do you need to tile the plane
aperiodically with their copies ?
This is actually a neat mathematical problem. For square tiles, the answer
is, "you can do it theoretically with 13, but using 16 is easier". No one
knows if one can do better. When the problem was first posed people
actually believed that it was impossible to tile the plane aperiodically from
a finite number of square tiles. Then someone came up with a counter example
involving a huge (but finite number) of tiles. Then over the years this
number has been brought down to 13. (I am using 16 by the way).
This research was inspired by many talks I had with
Mike van de Panne while I was at the Dynamic Graphics Project of the
University of Toronto. He first brought to my attention the
problem of texture mapping aperiodically. The research just followed
from many trips to the local math library and spending many hours
hacking away and learning new rendering packages (OpenGL and Radiance).
This research is described in ERCIM Research Report
R046
Back to my research page