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