Monday, July 24, 2006

Raytracer is Finished. Awesome.

The past 3 weeks have been awesome, fierce, super insanely intense, and full of the most interesting and most important computer programming I have done over my entire undergrad career.

First, here is my Final Scene. (You can click on it to see it bigger.)



I wrote a huge set of 10 major objectives over the past 3 weeks, plus I did several extra optimizations and a few more extra objectives and features.

I'd estimate at minimum approximately 10 hours of thinking, reading, researching and (mostly) programming, per day. At most, I'd say 14 or 16 hours. I've been going to bed at about 4:30, 5:30, 6:00am every single night for the past 3 weeks. Crazy!

So in total, I'd say this was about 3 weeks * 12 hours per day (on average), minus about 2 days break (one where I went to Toronto, another being a couple of evenings where I took the night off) = approximately 252 hours!!!!!!!!!!!!!!!!! :)

Hehe I'd say this is actually a decent estimate... oh man that's nuts. I have really been working every waking moment on this, and I've been sleeping less and less over the past 3 weeks. I figured it was at least 200 hours, haha I guess more like 250. Wow, that's totally nuts. :) But man... this was SOOOO AWESOME!!!!!!!!!!!!!!!

Anyway for those technical folks in the crowd, I'll be posting my Raytracer Manual to my website quite soon, along with example images of all the major features.

Here are a list of the Objectives I did, and a list of extra Objectives and Features I added.
  • Uniform Spatial Subdivisions (Grid Creation, WCS Axis-Aligned Bbox Transformations and Voxel Traversal): The Raytracer will use Uniform Spatial Subdivisions as a method to increase efficiency. This requires 3D grid creation, bounding box code for for all implemented primitives and Voxel Traversal using a 3D version of DDA.
  • Multi-processing and Analysis: The Raytracer will run a number of processes, greater or equal to 1, which maximizes computational speed. This number will be determined by a set of Raytracing experiments, and will be documented in the analysis.
  • Adaptive Anti-aliasing: Anti-aliasing is carried out on the scene to remove jaggies.
  • Refraction: Snell's law is used to compute the angle of transmission and secondary rays are cast on intersection with translucent objects to produce refraction effects.
  • Glossy Reflections: Objects may have a glossy reflection material applied.
  • Solid Texturing and Procedural Texturing using Noise: Textures can be applied to primitives, including checkerboard and procedurals using Perlin noise.
  • Texture Mapping: Texture mapping has been implemented.
  • Phong Model using Vertex Normal Interpolation on Triangles: Vertex Normal Interpolation is used to create smoother surfaces.
  • Area Light Support and Soft Shadows: Planar light sources are implemented and extra shadow rays are used to produce soft shadow effects.
  • Final Scene: A final, unique scene is created with techniques from Fine Arts. This scene will demonstrate the features of my Raytracer.

My extra objectives and optimizations were:
  • Fresnel Reflectance: Better glass simulation
  • Animation: Animated ball and exploding glass teapot (in total, 380 frames rendered.) The Animation uses some of John Lasseter's principles of Animation as described in class.
Several extra rendering optimizations
In addition to my objectives Uniform Spatial Subdivisions and Multiprocessing, I also did:
  • Voxel-Polygon Sub-Mesh Optimization
  • Shadow Ray Voxel Optimization
  • Optimal Grid Size Calculation
  • Makefile Optimized Build Settings
What a project!!!!!!!!!!!!!!!!!!! I am sooooooooooooooooooo glad it's done and handed in. Wow this was the hugest and craziest thing I have done in University, by FAR the most fun and important and wow... I just loved it.

Please keep an eye on the blog here for the launch of a new Raytracer section on my Website.

No comments: