Andrew's Raytracer for Natural Scene Rendering

Winter 2004 CS488 Final Project
Andrew Clinton

For my final project, I created a raytracer suited to rendering natural scenes. This demanded a number of very interesting extensions to the core raytracer, including subdivision surfaces, procedural textures, displacement mapping, tree generation, and enhanced ray tracing features such as area lights and focal blur. Most of the features are demonstrated below with example images.

The project was inspired by recent work devoted to ray tracing displacement maps, as well as the desire to capture the complexity of nature in computer generated scenes.

Reflection/Refraction

Fresnel Reflection

Fresnel reflection adds additional reflective contributions at grazing angles.

Focal Blur

Left image shows focal blur with 5 samples per pixel. Right image shows focal blur with 100 samples per pixel.

Area Lights

Circular area lights are like a fluorescent tube in a circular shape.

Procedural Textures

Row 1: Perlin noise, Fractal Perlin Noise, Gradient
Row 2: Checker, Radial, Worley Cell (Voronoi)
Row 3: Fractal Voronoi, 4-colour Perlin, 4-colour Voronoi

Texture Combiners and Bump Maps

Textures can be combined arbitrarily using a texture interpolant and keyed maps. Here two Perlin textures are blended using a Perlin texture interpolant.

Subdivision Surfaces

Subdivision surfaces implement the Loop scheme with controllable number of patches and maximum subdivision level.

Displaced Subdivision Surfaces

Displacements are derived from the value of a procedural texture.

Displaced Cow

The subdivision surface can be derived from an arbitrary input mesh. Here a cow model is subdivided and displaced using the Voronoi texture.

Procedural Tree Modelling

Trees are constructed recursively according to a subset of the Weber and Penn tree model.

Final Scene

Final Scene (High Quality)

This version was rendered a day after the project deadline. If you choose to do a raytracer project, make sure you allocate time for rendering! :)