In collaboration with prof. Andries van Dam we redesigned the Introduction to Computer Graphics course at Brown University.
I significantly contributed to designing and implementing coursework, labs, and lectures for the updated Introduction to Computer Graphics course at Brown University.
10 labs were created for the course. Two are currently available as samples. Some are featured in the book Computer Graphics, Principles and Practice (3rd edition), in which I am credited as a contributor.
The hallmark project of CS123 is a standard recursive ray tracer which supports several types of primitives, texture mapping, shadows, point/area/directional lighting, and specular highlights. I implemented a basic raytracer and several enhancements, including support for arbitrary meshes, anti-aliasing, multi-threading, texture scaling and filtering. In addition, I implemented a kd-tree to accelerate the intersection tests.
C++ Source code available upon request
As a student in CS224, we built upon Milton to implement photon mapping. Milton was implemented by Matt Jacobs and Travis Fischer, two other students from Brown CS, and it contains a scenegraph, ray tracer, and an implementation of Metropolis Light Transport (MLT).
C++ Source code available upon request
Painterly-style "Graftal" rendering engine extension.
C++ Source code available upon request
Mesh based image deformations (Bilinear, triangulation using barycentric coordinates, and perspective). Support for warping from an arbitrary quadrilateral or triangular mesh to another, arbitrary quadrilateral or triangular mesh. (Java)
Constraint satisfaction solver to create 3D mesh from splines. Implementation based on the paper: FiberMesh: Designing Freeform Surfaces with 3D Curves (Nealen, Igarashi, et. al.)
C++ Source code available upon request
In a joint project with my roommate, Paul Sastrasinh, we extended the CS123 ray tracer to perform uni and bi-directional path tracing. This was an interesting experiment and it enabled us to render all kinds of interesting scenes.
We extended Polaris to work on a distributed computing cluster. Polaris compiles and runs on both Brown''s Oscar HPC cluster (over 200 nodes) and the NICS Kraken cluster (over 9000 nodes) which is one of the most powerful supercomputers in the world. Polaris could be used to render extremely detailed scenes and high-resolution images by rendering a single frame in parallel. It can also be used to render video clips by rendering multiple frames in parallel.