Raytracer
Class | Instructor | Date | Language | Ta'ed | Code |
---|---|---|---|---|---|
CS 3451 Intro To Graphics | Greg Turk | Spring 2012 (Expanded substantially as Personal Project) | Java/Processing | No | Code N/A |
CS 7490 Advanced Image Synthesis | Greg Turk | Spring 2016 | Java/Processing | No | Github Repo |
My ray tracer implementation also started as an assignment in a class I took, the undergraduate Computer Graphics course at Tech, and included the usual functionality from a Whitted-style ray tracer, such as shadow rays, reflection, spheres, triangle polygons, and point lights. I figured out and implemented many functions beyond the scope of the assigment, including :
Refraction (based on Fresnel Equations)
Cylinders
Generalized Guadric Surfaces (defined by 10 coefficients)
Quads and Meshes of Triangles or Quads
Texture Mapping on the outside and inside of surfaces/meshes.
Using Inverted Transformation Matrices to direct rays for each object (so a file with OpenGL style transformations mapping objects in space can be easily rendered)
Anti-Aliasing
In Spring Semester 2016 I took Greg Turk's Advanced Image Synthesis class, and expanded my ray tracer to include the following :
Distribution Ray Tracing
Area Lights
Depth of Field effects
Motion Blur
Fisheye Lens
Orthographic Projection
Spotlights (shadows are soft at edges)
Iterative Refinement (render only some evenly-spaced fraction of pixels as large tiles, and then iteratively get finer resolution until every pixel is displayed)
Acceleration via Bounding Volume Hierarchies
Perlin-noise and Worley-noise based Textures
Photon Mapping
I first became aware of ray tracers in the late 80's, when I was a student "the first time", and I've always been fascinated by them, so given the opportunity to actually implement one, I was very motivated, and still love working on it. High on my list of ideal jobs would be working in some capacity with ray tracers.