HBO Face Swap

Currently working on this project for the AI startup ARTISSN. We were hired by HBO to work on a documentary in which we have to swap the face of someone for an AI generated one. This has involved using Google's media pipe for face detection, Blender APIs in order to get a generalized mesh representation of the face and then training a model via Modal that can output new faces given renders and lighting coefficients for each frame. Currently, each individual image is believable but they are inconsistent frame to frame. We are trying to solve this by adding a temporal element to the loss function. We are also researching better blending and post-processing methods.

Path Tracer

This project implements a physics-based renderer that simulates realistic light transport across a scene, using Monte Carlo Integration and Hemisphere Sampling to model recursive light bounces and create physically-accurate reflection and refractions with Total Internal Reflections. Multiple BRDFs including Lambertian diffuse, glossy, and perfectly specular are implemented to accurately model how light interacts with various surface types.

Finite Element Method

For this project, I used the Finite Element Method (FEM) to create physics simulations of meshes deforming. This method involved discretizing shapes as a certain number of tetrahedrons, each with deformable properties. The math involved using a stress and strain tensor (the latter resulting from the former) and applying it to every tetrahedron in the mesh. External forces, such as collision with the ground plane lead to stress, thereby creating internal forces, or strain as a result. While the code ran in openGL, I exported the data into Blender to render it with Cycles which gave a very nice result.

As Rigid as Possible Surface Modeling

For this project, I implemented as rigid as possible surface modeling. This method is essentially an optimization problem that deforms a mesh "as rigidly as possible" given the constraints of a few vertices being set as anchors that can be manipulated freely by the user. As you can you see from the demos, the meshes are able to be deformed by clicking and dragging vertices, but they are able to maintain their form to some degree. This process consisted of solving a sparse linear matrix to find the best fit positions for every vertex in the mesh.

Mesh Geometry Processor using Half-Edge Data Structures

For this project in CSCI 2240 Advanced Computer Graphics at Brown University, I developed a C++ application that transforms OBJ file meshes into a half-edge data structure, allowing for manifold mesh geometry processing. The applications implements triangular mesh manipulations of Loop Subdivision and Bilaterial Mesh Denoising. For the Bilateral Mesh Denoising component, I implemented vertex normal calculations by averaging adjacent face normals, and applied displacement filtering that preserved important geometric features while smoothing noisy areas of the mesh. Operations were optimized to achieve linear time complexity O(n) relative to mesh size.

Bilateral Mesh Denoising

Loop Subdivision

Procedural Environment Generator

This was my final project for my Computer Graphics course. Using OpenGL, my group (the Lil Nasy Xers) and I created a procedural environment generator that takes in a few different obj files (which can be modeled in any 3D software) and instances them along a path. We used the side winder maze algorithm to generate the path. In our demo, we generate a city using different variations of buildings and a park model, but the beauty of the algorithm is that it can take in any obj files in order to create any scene. I am currently using it to generate a server room for a 3D animated film that I have in the works.

mRNA Translation Simulation

A fully automated simulation of the cellular process of mRNA translation. I made this for the game "Emergence" during my time interning at Adroit Studios. The physics and functionality was coded in Unity and then brought into Blender to render a cinematic. I begin explaining the process at 1:45 in the video below.

Ray Tracer

Ray tracer that I coded completely from scratch for my Computer Graphics class. The program parses a scene file to determine what shapes are in the scene. It then sets the position of each shape using matrix transformations and checks if rays shot, from the camera origin, through each pixel on the screen intersect with the shapes using implicit equations.

Economic/City Builder Simulation

This project was coded in JavaFX. It simulates a fully automated and functioning economy made up of people who work jobs, rent out apartments and buy goods. If you watch the demo video you'll see workers getting paid to build buildings for companies and slowly a small city is built. The animations are made using a series of 2D images.