Sun, Nov 4, 2018
I am a 3D software developer by trade, with a profound interest in physically based animation and geometry processing. I’m currently a PhD student at the University of British Columbia supervised by Dinesh K. Pai. I hold a Master’s degree in Mathematics from the University of Waterloo. I was part of the Computational Motion Group supervised by Christopher Batty. I received a B.Math. degree majoring in Pure Mathematics and Computer Science with a minor in Physics, also at the University of Waterloo in 2013.

Sun, Jul 30, 2017
This year I co-authored a SIGGRAPH paper with Christopher Batty and Robert Bridson on improving the accuracy of viscous liquid simulations. We also implemented our method as a Houdini plugin.
See our Project page for more details.
Paper: [PDF]
SIGGRPAH2017 Trailer: [YouTube],
Video: [MP4], [YouTube]
Supplemental Notes: [PDF]
Supplemental Video: [MP4]
Source: [C++ Plugin for Houdini]

Sun, Jul 10, 2016
Liquid simulation has been an interest of mine for some time now. Water, maybe the most ubiquitous liquid familiar to us, exhibits many fascinating visual properties. This makes water simulation a very hot topic in the visual effects industry.
In the history of liquid simulation, there hasn’t been one single efficient, clear cut method for simulating water in all its capacity. Each method has its advantages and disadvantages. In the visual effects industry, prominent methods for liquid simulation are grid-based (e.

Mon, Feb 22, 2016
In fall 2014, I took a seminar course in computer graphics, where we reviewed an emerging technology of capturing the propagation of light pulses. This work was sparked in recent years by the work of Velten, Raskar and Bawendi from MIT in their 2011 paper titled “Picosecond camera for time-of-flight imaging”. In response to this work, a team at the University of British Columbia (UBC) developed a much cheaper alternative (with certain limitations) to the hardware setup originally proposed by Velten et al.

Wed, Aug 12, 2015
This summer, I developed an algorithm to tesselate an image with Voronoi regions. I used a weighed Lloyd’s method to distribute the Voronoi regions evenly throughout the image. You can now see the method on a dedicated static page.
The implementation is done entirely in JavaScript using the three.js library as well as dat.gui for exposing different parameters controlling the generated image.
After seeing a series of lectures given by Craig Kaplan on computational stippling methods, in particular on Weighed Voronoi Stippling, I gained an interest in applications for Voronoi diagrams.

Mon, Feb 9, 2015
In winter 2014, I took a course on physically-based simulation, and had the opportunity to work on a fluid simulator project. I finally found some time to organize my work and upload it to GitHub. The project outlines two notable methods in fluid simulation using Smoothed Particle Hydrodynamics (SPH):
“Particle-Based Fluid Simulation for Interactive Applications” by M. Muller, D. Charypar and M. Gross “Weakly Compressible SPH for Free Surface Flows” by M.

Thu, Feb 6, 2014
A few months ago I wrote an implementation of an implicit surface method for shape reconstruction developed, in part, by H. Zhao, S. Osher, B. Merriman, and M. Kang, in their paper (2000) titled “Implicit and Non-parametric Shape Reconstruction from Unorganized Data”. This paper describes a level-set method for reconstructing a surface given a collection of points, curves and surface patches. My implementation deals with points alone and it is written entirely for MATLAB.

Mon, Nov 25, 2013
CS 870 is a course at the University of Waterloo that briefly covers numerical PDE solutions, especially to the level set PDE developed by Stanley Osher and James A. Sethian in a paper called “Fronts propagating with curvature-dependent speed” from 1988. I presented two papers for this class (with links to slides):
Implicit Shape Reconstruction Using a Level Set Method (2000) This paper presents a level-set based method to tightly wrap a 3D surface around a set of data points.

Mon, Sep 16, 2013
I decided to typeset the course notes for the Numerical Analysis course (AM740/CM770/CS770) at the University of Waterloo for fall 2013 taught by Hans De Sterck. Use them at your own risk, since they may contain errors:

Sun, Mar 3, 2013
At the end of my undergraduate research semester in the summer of 2012 with IQC, I compiled a talk on classical and quantum information. I tried to start with an introduction to classical information and transition into quantum information on a very basic level. This talk should be appropriate for all audiences with a basic background in linear algebra. These notes on Classical and Quantum Information are somewhat incomplete, and will remain so, unless I give this talk again some day:

Fri, Dec 7, 2012
I implemented a ray tracer with rigid body dynamics for my final CS488 project. Unfortunately I didn’t have time to complete collision detection for all primitives, and could only demonstrate colliding spheres.
Ray Tracer with Rigid Body Dynamics Table of Contents Dynamic Objects Rigid Body Collisions Texture Mapping Bump Mapping Multi-threaded Rendering Intensity Threshold Optimization Antialiasing Additional Primitives Constructive Solid Geometry Rube Goldberg machine Objective 1 & 2: Dynamic Objects Example of two spheres colliding

Sat, Sep 15, 2012
I spent the summer of 2012 as an undergraduate research assistant working under Debbie Leung at the Institute for Quantum Computing. Since then I have decided to pursue a career in computer graphics, although quantum information remains one of my amateur interests. I have compiled the notes I took during this research semester into one document:
There is little organization within these notes, however they summarize some of the necessary background to start the study of quantum information, and include a few proofs of theorems from various Quantum Information books, as well as a few new ideas aimed at proving the continuity of a particular quantum capacity.