Null-Scattering MIS Volumetric Path Tracer

Physically-Based Volumetric Path Tracer for the GPU written in C++ and CUDA. Developed in a group of 2.

  • Implements unbiased heterogeneous volumetric Multiple Importance Sampling based on (Miller et. al 2019)
  • Capable of rendering multiple GBs of volumetric data at interactive rates
  • Handles interactions between participating media and surfaces
  • Uses the OpenVDB and NanoVDB libraries for storing and accessing volumetric data
  • Vulkan Real-Time Ray Tracing with ReSTIR

    Real Time Ray-Tracing application built using Vulkan RT and the NVIDIA nvvk library.

  • Implements the ReSTIR (Bitterli et. al 2020) algorithm to improve real-time convergence
  • Weighted reservoir resampling, temporal reuse, and spatial reuse
  • Renders soft shadows and illumination from thousands of animated mesh lights with emission maps
  • Also uses weighted reservoir resampling for diffuse global illumination
  • CUDA Path Tracer

    Physically-Based Path Tracer for the GPU written in C++ and CUDA.

  • Multiple Importance Sampling
  • OBJ Loading with BVH (CPU constructed, GPU traversed)
  • GPU optimzations like stream compaction, material sorting, and first bounce caching
  • Forward+ and Cluster Deferred Rendering Engine

    Advanced rasterization pipeline in WebGL featuring Forward+ and Cluster Deferred optimizations

  • Accelerated shading of 1000s of dynamic point lights in real-time via light clustering
  • Features Octahedral encoding of normals for efficient Gbuffer compaction
  • Cook-Torrance BRDF shader with roughness and metallic parameterization
  • GLSL Path Tracer

    Physically-Based Path Tracer for the GPU written in C++ and OpenGL. Utilizes QT GUI functionality for interactably setting camera parameters including depth of field.

  • Multiple Importance Sampling
  • Torrance-Sparrow (GGX) Microfacet Model including Conductors and Dielectrics
  • Texture Mapping for Albedo, Normals, Emission, and Roughness
  • Thin-Film Interference BSDF
  • Procedural Fantasy Map Generator

    Procedural Fantasy Map Generator tool built in Unity and utilizing the (Wave Function Collapse) algorithm. Developed in a group of 3.

  • Procedurally generates maps based on artist input
  • Hexagonal tile-based grid mimicking map-based board games and strategy video games
  • Four geographical features: Land, Water, Mountain, and Forest
  • All visuals procedural and implemented via HLSL shaders
  • Mesh Stylization Maya Plugin

    Autodesk Maya Plugin developed in C++ and the Maya API. Based on the SIGGRAPH Asia paper Cubic Stylization (Liu and Jacobson 2019). The plugin allows an artist to deform a mesh into multiple shapes based on a desired weighting. Developed in a group of 2.

  • Support for multiple target shapes including polyhedra
  • Per-vertex weighting
  • Per-axis weighting
  • Multithreading
  • Mini Minecraft

    Minecraft-like video game partially inspired by the animated Nickelodeon show Avatar: The Last Airbender. Developed in C++ and OpenGL in a group of 3. Some specific features I worked on include:

  • Bloom filter post-process
  • Voxel grid lighting system
  • Minecraft-like chunk rendering engine
  • Waterbending, Firebending, Earthbending, and Airbending systems
  • Non-photorealistic ray tracer

    Non-photorealistic ray tracer developed from complete scratch in C++. Integrates toon shading and painterly rendering into one NPR ray tracer with support for reflections and refractions. Presented as a poster in SIGGRAPH 2021 with coauthor Megan Reddy.
    View Paper On ACM

  • Toon shading outlines and color gradients built into ray tracer
  • Octree volume partitioning for ray traversal acceleration
  • Paint strokes procedurally created during ray tracing
  • OBJ and MTL loading
  • Mini Maya

    Interactive 3D Modeling application written in C++ and OpenGL. QT GUI functionality used for most input. Half-edge mesh data structure used for performing and storing primitives in mesh geometry.

  • Catmull-Clark subdivision tool
  • Face extrusion, beveling
  • Ability to assign surface shaders with lambertian or blinn-phong reflectance models
  • Joint importing and forward kinematics with linear skin weighting
  • OBJ loading and exporting
  • Assorted OpenGL Shader Demos

    Some assorted OpenGL shaders I've written in the past. Some include:

  • Cook-Torrance BSDF
  • Diffuse and Glossy Convolution from Environment Map
  • Displacement Mapping
  • Worley noise-based distortion
  • Procedural Texturing (fbm, perlin)