This is a technique I decided to embark upon as a result of my Kelso Train Project. It came time to render the desert floor, and it just looked wrong without the desert sage bushes which always cover the desert floor.

The render above is an early test of the method and has approximately 3000 pre-rendered objects in it. The ground surface is a polygonal mesh with true elevation data from the United States Geological Survey applied Maya's Artisan tool.

The problem:

How can one efficiently render thousands of sage bushes on a desert floor? Whatever technique is used, the true 3d appearance of the bushes must be maintained as a camera swoops along the floor viewing the bushes from all angles, including directly above. The only simple attributes of this situation are that the lighting and objects themselves are static; they don't need to appear to move.

The solution: Pre-Render each object. On a per-frame basis, point a plane towards the camera with a texture applied to it which corresponds to what the object would look like from the camera's perspective. Ensure the alpha channel allows the floor texture to be visible through the pre-rendered shadow. Other names for similar methods include 'Impostors', 'Offset Sprites', and 'Spriticles'. I call mine 'vSprites'.


Below is another example. This Maya scene has over 8000 desert sage shrubs in it - though I think under 1000 are visible in this shot. This took about 2 minutes to render with high anti-aliasing and motion blur. The bushes look a bit too lined up - I'd not added a good random placement when I did this test. :-)


Below is the exact same frame, from a different camera's perspective. I've added a stand in for the camera so you can see that all the pre-rendered object faces have been pointed to the camera with unique textures.


More technical details on vSprites...