EMAIL: (now )
NAME: Michael Shevlin
TOPIC: Epic Proportions
TITLE: Daybreak in the Ancient Forest
TOOLS USED: POVTree, LParser, Triangles, Plant Studio, Crossroads 3D, Gimp
RENDER TIME: 3h 15m 10s
HARDWARE USED: AMD Athlon XP 1700+, 512 MB RAM


Another day begins as the first rays of sun filter through the ancient redwood forest.  Some of these trees are so old that they were saplings during the peak of the Roman empire.  It is not uncommon for these trees to grow to be over 300ft tall and over 20ft wide; they are the tallest trees on earth.

My initial ideas involving epic proportions all seemed to involve catastrophe or disaster of some sort, but I really didn’t want to create an image like that for this round.  I wanted to do an outdoor scene, and that eventually led to the idea of redwood trees, which are undoubtedly huge.  ‘Epic’ was no good without the appropriate ‘proportions’, though.  Of course, I could (and did) put things in the foreground to indicate size, but I wanted some sort of symbolic contrast, too.  To that end, I spoiled my pristine outdoor scene with a city far off in the distance. As the perspective suggests, the rest of the living world is much, much bigger than the little niche carved out by humanity.  Unfortunately, so few of us take the time to realize, appreciate, and enjoy that fact.


Since this image was completely dependent upon the redwoods, I tackled them first; they’re isosurfaces.  More or less they’re cylindrical with some twisty sine-waves and noise added to make the bark, with some bell-shaped curve being thrown in by the base to flare the trunk by the ground.  Those trees are so tall that essentially all of their canopy would be off the top of the screen, which made my modeling job easier.

After having repeatedly met with failure to generate reasonable random terrain, I ended up making a couple height fields using one- and two- dimensional bell-shaped functions and a little noise.  Those little y=exp(- x^2) functions are indispensable when trying to procedurally generate natural looking curvy surfaces.  The landscape is split into a foreground height field that extends all the way down to the lake, and a background height field that continues on to the horizon.  The lake itself is a mess of CSG between the two height fields.

The smaller spruce trees in the foreground were made using POVTree, and weigh in at nearly a quarter million triangles each.  They’re all identical save rotation and scale, though, so they don’t cause that big of a memory hit. I figured it would be a bit of overkill to use even a simple tree mesh for the background, so I wrote a macro to make fake trees from three triangles intersecting at 120 degree angles.  20,000 fake trees were made into a mesh, and 18 of those meshes, offset randomly from each other, covered the background nicely.  A similar technique was used to cover the area to the left of the lake.

The smaller bushes were made with the maketree macro by Gilles Tran.  The ferny foliage was generated with LParser, exported as a .dxf file, and converted into a mesh with Crossroads 3D.  The redwood sorrel (creeping groundcover with pink flowers) was modeled in Plant Studio and exported directly to Povray, discarding everything but the foliage and flowers which were gathered as individual meshes.  In order to get the patch shape on the ground, random positions were determined using polar coordinates where theta=rand and r=rand^2.  This worked nicely to make a patch of small plants, but tended to pile larger ones (like the ferns or nettles) up too much in the middle.  It turned out to be difficult to model the relatively simple nettles (broad leaf plants), so I ended up creating a mesh of a pair of leaves and their petioles with the old MS-DOS triangles program by David Sharp A little tweaking and CSG made for a reasonable looking plant.  After all that, the scene still seemed like it needed more greenery.  I was tired of figuring out how to model plants, so I looked for some pre-made models.  The remaining purple and yellow flowering plants are public domain models from Varian’s Dreammodels and 3dplants, respectively.

In order to get a more realistic forest floor, I wrote a macro to generate patches of 200 randomly placed triangles (i.e. pine needles) in a mesh, which is duplicated 15,000 times to cover the foreground.  Since I was using real objects to cover the forest floor, I was able to get away with a relatively simple ‘ground’ texture on the height field itself since the floor is nearly completely covered with debris.  The rocks are relatively simple isosurfaces.  The city in the background was generated with Chris Colefax’s city generator.  Considering the amount of detail required for a little spot in the background, it was probably overkill.  The downtown area was generated as one big piece and then I generated a bunch of blocks of smaller buildings which are randomly placed around downtown.  The clouds are 8 stacked planes, based somewhat loosely off Rune S. Johansen’s stacked-plane fast sky. 

After all that, I still had problems with establishing the scale of the big trees in the foreground, with no familiar reference.  I ruled out humans immediately, since that went against the concept of the image.  Animals I could only do with a high-quality public-domain model, which after several evenings’ worth of Google searching I concluded did not exist.  I finally settled on a few butterflies over the flowers, since I could make those with simple CSG and an image map.  With the butterflies in the scene, though, I had to use my artistic license to scale the objects a little so everything looked reasonable; otherwise the small details in the foreground would completely be lost compared to the size of the big trees.

The most challenging aspect of this image was trying to model all sorts of natural objects like plants, trees, and rocks, while only having access to free software.  Many, many thanks go out to all of those individuals who write such software, because without it, none of this is possible.  A secondary challenge in this scene was memory constraints; even with 512 MB of RAM, I had to be very selective of the modeling techniques used to avoid running the computer out of memory, thrashing, and as a result, unacceptably long render times.  copies incur very low memory overhead.  I’d never have been able to make this scene, for instance, with half a million CSG objects.

Finally, I had some serious issues with lighting the scene correctly.  wanted a sunrise or sunset scene so I could get some dramatic shadows, but I didn’t want to be looking at the sun or else the smaller trees would become dark silhouettes.  This resulted in an interesting southwest view; the sunrise still imparts a little blush to the scene, even though you can’t see it directly.  Also, with the sun still low on the horizon, I ended up with bottom-lit clouds.  At first, the shadows in the tops of the clouds looked odd, but observing the real things convinced me that it was indeed realistic.  The nature of plants and trees, particularly pine trees, is that they cast a lot of shadow on themselves, and it took a lot of tweaking of the light source and of indirect lighting via radiosity to avoid an image that wasn’t too dark.  I also had to strike a balance between realism and visual appeal, since a mix of strong shadows and bright sunlight is too contrasty for any reasonable image.

Gena Obukhov and Tom Aust, POVTree:
Gilles Tran, Maketree macro:
Laurens Lapre, LParser:
David Sharp, Triangles:
Kurz-Fernhout Sooftware, Plant Studio:
Keith Rule, Crossroads 3D:
Varian’s Dreamview, Flowering plant:
3Dplants, Flowering plant model:
Rune Johansen, Fast sky:
Chris Colefax, City generator:

Home / Raytracing / Daybreak in the Ancient Forest Description
Contact Information
Last modified 6 May 2007
Copyright © 2007 Michael Shevlin