While doing my Computer Graphics and Game Technology Master’s at the University of Pennsylvania, I focused on a set of projects that were particularly aligned with my interests. Mostly I used them as a way to improve my skills, explore new ideas and as an excuse to just have fun. These were all done between 2016 and 2017.


Procedural Computer Graphics (CIS 5660)

Angels & Men

A quick 1 week project done in three.js and WebGL. The main goal was to implement a procedural feather/wing system with curves, and I decided to have fun with it and do a very melodramatic fallen angel short demo. The song I used was Angels and Men by Juno Reactor, so it really helped cement its drama.

You can try it out here, although I think I need to fix the missing background music.

Part of the fun of this project was building a NURBS-like structure that defined the overall shape for the feather root system, and then use different signals to drive the positioning/scale and movement. Because all this was done very quickly, I remember building some curves on Maya and copying the control curve values to code directly.

I also had a lot of fun making some quick disintegration effect:


Pruitt-Igoe

Another ambitious project like my procedural music video generator, I wanted to take the time to build my own demo-like engine, ideally to get to build something for the demoscene at some point.

Initially, I wanted to use Philip Glass’s piece from Koyaanisqatsi to drive a Cthulhu inspired runic activation of mountain artifacts.

In practice, it evolved into a pretty streamlined OpenGL raymarcher. I used a lot of techniques to optimize the SDF evaluation, starting from using a procedural shell mesh that allows for a quick first iteration of distance. The terrain is fully procedural and used derivative based estimations for erosion, but unfortunately I did not have enough time to do proper lookdev.

It was well received but it is mostly just ☆vibes☆ – I’d love to come back to this at some point!


GPU Programming and Architecture (CIS 565)

GPU Pathtracer

Had the opportunity to just build a GPU pathtracer with almost no restrictions, which was a great exercise to sharpen my raytracing and GPU knowledge. Aside from the standard requirements for the raytracer, I focused on getting a really fast kd-tree evaluation and memory compactor, which allowed me to have really complex meshes early on. As extra features I also implemented a filmic tonemapper, a simple translucent BTDF and filtering/antialiasing, and arbitrary shape lens aperture, which were not required.

The origami render above uses all those features: chromatic aberrated aperture with paper-like transmissive materials.

You can read more on the repository.


Organic Mesh Growth

This was my advanced realtime graphics final project, which I worked on with Hamoudi Moneimne.

In this project, we explored a GPU-based approach for organic mesh deformation through the use of SDFs. It’s basically a set of 3D kernels that operate on SDFs in lockstep based on certain heuristics. We decided not to do retopo on each frame to reduce flickering and computation costs, which also allowed us to build this for realtime.

You can read more on Github if you’re interested in the details.

I believe this is a really fun way of dealing with mesh deformation – even if topological issues can arise quickly if the SDFs do not behave properly. We implemented a couple of base behaviors that can be combined, and the most interesting ones were

Relaxation:

Curl Advection:

Repulsion:

Curvature expansion: