Rendering and simulating implicit surfaces 
A final project for 6.837: Graphics taught by Wojciech Matusik and Justin Solomon. 

paper, code 



This was a simple exploration into 3D simulation. All of the geometry in these scenes is implicit and the the objects are rendered using path tracing. Collision detection is performed by assuming the surfaces are springs, and to compute these forces I randomly sample points on the surface. Unfortunately, these springs need to be quite stiff to prevent objects from intersecting and stiff springs can become unstable during simulation. This is what causes the jittery effect in the movies below. 

I also implemented a layered range tree for this project which is a spatial data structure that allows for $O(k + \log^2 n)$ range queries. This is very useful for collision detection but in hindsight it was overkill - the bottleneck is ray tracing.