team 1

Hello!

Do not hesitate to contact me, I would be happy to discuss about any project related to computer graphics, whether it is modelling, rendering or animation.

Who?

My name is David, I am a master's student in Computer Graphics at the Université de Montréal, in the Computer Science department (DIRO). Part of the graphics research group LIGUM, under the supervision of Derek Nowrouzezahrai, I show through this page the various projects I have worked on as part of my master's degree.

I have a generic background in Computer Sciences from my college and bachelor's degrees, as well as some industry experience from various internships. I enjoy learning new languages: I also went on a international cooperation mission in Nicaragua to participate in the construction of a cybercafé for a rural community.

Computer Graphics is a passion! Roam around this site freely and do not hesitate to contact me!

Have You Seen My Past Projects?

DiffAO

Diffuse Ambient Occlusion With Pre-calculated Spherical Harmonics

DateFebruary 2013
SkillsC++, OpenGL, GLSL, Embree

Using an analytical expression to describe the irradiance of diffuse environmental maps, this work is based on the work from Ramamoorthi and Hanrahan [RH01]. With 9 spherical harmonic coefficients, it is sufficient to correspond to the actual values of lighting with 1% error. I have used the vertex shader (Gouraud shading) as well as the pixel shader (Phong shading) for performance and quality comparisons. I also implemented a Monte Carlo estimator to solve the ambient occlusion, combining the visibility term within Equation 13 of the paper.

DiffAO

Diffuse Ambient Occlusion With Pre-calculated Spherical Harmonics

DateFebruary 2013
SkillsC++, OpenGL, GLSL, Embree

Using an analytical expression to describe the irradiance of diffuse environmental maps, this work is based on the work from Ramamoorthi and Hanrahan [RH01]. With 9 spherical harmonic coefficients, it is sufficient to correspond to the actual values of lighting with 1% error. I have used the vertex shader (Gouraud shading) as well as the pixel shader (Phong shading) for performance and quality comparisons. I also implemented a Monte Carlo estimator to solve the ambient occlusion, combining the visibility term within Equation 13 of the paper.

Hetero

Heterogeneous Light Diffusion for Surface Textures

DateDecember 2013
SkillsC++, Mitsuba, MATLAB

Inspired from Subedit [STP+09], this project was meant as an extension to various dipole-based models to handle surface texture. Among multiple assumptions that make dipole-based models simple is the homogeneity of the medium. However, a textured object with high frequencies variation in its scattering properties may still want to display a smooth-looking surface. This was achieved by convolving the reflectance distribution profile of the shading point with the profile of the irradiance sample’s location on the surface. Remaining practical, the acceleration structure [JB02] surrounding the translucent object averages the scattering properties of the texture.

Progressive

Progressive Rendering with Clustered Points Projection

DateMay 2013
SkillsC++, Cuda

In a context of global illumination, I have explored the solution proposed by Maletz and Wang [MW11] for GPU final gathering. The basis is to use virtual point lights to represent the scene’s lighting (I used a Poisson-disks method). Those points are then clustered and, for each shading pixel, projected on two associated hemi-octahedral texture microbuffers. Each cluster is assigned an importance value evaluated on the fly as the contribution to the shading pixel for the diffuse and specular components (first and second bottom images respectively) for the indirect illumination. This procedure being by-pixels image space, it has been possible to integrate it in a progressive rendering pipeline with root pixel tiles. As long as the camera is fixed, the pixel tree is traversed based on importance until all pixels are shaded (first row of images), getting combined with direct illumination (last image). As future work, the unshaded pixels could be interpolated until their values are computed for improved interactivity.

Scanner

3D Scanner with Structured Light

DateApril 2014
SkillsC++, OpenCV, Mathematica

This project includes camera and projector calibration with a chessboard to find both intrinsic and extrinsic parameters. The scanning is done by generating a Gray code image sequence and illuminating the scene with it. The images are then decoded and put into a 16bits image. The intersections between the camera “rays” and corresponding projector’s columns are computed, allowing the generation of a point cloud. I compared my results with a colleague who used unstructured light patterns. Unstructured light seems to produce less noise and line artifacts. As future work, the difference between structured and unstructured lighting could be measured on various scenes for a better understanding of the differences. The resulting point cloud could also be denoised and the rendering improved for a better display of the scanned object.

Fluid Simulation in Real-time

DateMarch 2014
SkillsJava, OpenGL (JOGL)

Similar to the approach described by Slam et al. [GDC03], this project provides an interactive Eulerian fluid simulation. I have implemented stable diffusion and advected temperatures values based on a velocity field (viscosity, transport, Poisson projection). With a Gauss Seidel solver, then with a conjugate gradients solver for faster convergence, I made the velocity fields divergent-free. The temperatures are used to compute buoyancy forces, as heat goes up and cold goes down.

Rigid Bodies Collisions and Contacts

DateMarch 2014
SkillsJava, OpenGL (JOGL)

This project involves the simulation of contact in a system of 2D rigid bodies. It implements rotational dynamics (torques), updating the angular velocity and angular position at each step. To accelerate the computation with a numerous amount of bodies, a hierarchical bounding disk collision detection tree is used for the intersection tests. A randomized Gauss-Seidel solver is used to solve the constraints, found by computing the Jacobian and sparse-multiplying the matrices for efficiency.

Forces and Collision Detection on Springs

DateFebruary 2014
SkillsJava, OpenGL (JOGL)

For this project, I implemented spring forces including deformation, viscous damping, gravity and spring damping. To solve the differential equation for the animation, I have implemented various numerical methods: Forward Euler, Midpoint, Fourth order Runge-Kutta, Symplectic Euler, and Backward Euler. Further on, I went on implementing continuous collision detection, penalty forces and collision impulses, having tried iterative Gauss-Seidel and Jacobi-style solvers. The video shows a robust intersection-free simulation of 2D "hairs".

homo

Image Reconstruction with Homography

DateOctober 2013
SkillsMathematica

The goal of this work was to, from various rotated and scaled pieces of a planar image, reassemble a picture. As a first step, the points of interest are found in each image. Corresponding points are then searched and the projective 2D transform (homography) is estimated. Choosing a reference piece of image, the other pieces are then deformed to match a final picture. I used integrated functions of Mathematica and compared them with my own homography estimator.

Snow Simulation with a Material Point Method

DateApril 2014
SkillsC++, Java, OpenGL

Snow simulation is a challenging phenomenon when it comes to animation. Snow behaves in a unique way due to is compressibility and, depending on the temperature, it has a combination of fluid and solid properties (note the clear fractures in the video). Stomakhin et al. [SSC+13] recently introduced a novel method to convincingly simulate snow with a hybrid Eulerian-Lagrangian Material Point Method, which was used for the Disney© Movie Frozen. I implemented at first a 2D version of it, and then went further on with a 3D implementation. As future work, I should address the rendering part of the snow simulation, as points may be difficult to view as snow (especially in 3D).

freq

Frequency Analysis for Accelerated Subsurface Scattering

DateApril 2015
SkillsC++, G3D, Mitsuba, Mathematica, MATLAB, Blender
LinkIn submission. No link available yet.

BSSRDFs are commonly used to model subsurface light transport in highly scattering media such as skin and marble. Rendering with BSSRDFs requires an additional spatial integration, which can be significantly more expensive than surface-only rendering with BRDFs. We introduce a novel hierarchical rendering method that can mitigate this additional spatial integration cost. Our method has two key components: a novel frequency analysis of subsurface light transport, and a dual hierarchy over shading and illumination samples. Our frequency analysis predicts the spatial and angular variation of outgoing radiance due to a BSSRDF. We use this analysis to drive adaptive spatial BSSRDF integration with sparse image and illumination samples. We propose the use of a dualtree structure that allows us to simultaneously traverse a tree of shade points (i.e., pixels) and a tree of object-space illumination samples. Our dual-tree approach generalizes existing single-tree accelerations and both our frequency analysis and the dual-tree structure are compatible with most existing BSSRDF models.

thesis

Theory and Numerical Integration of Subsurface Light Transport

DateAugust 2015
SkillsC++, G3D, Mitsuba, Mathematica, MATLAB, Blender, LaTeX
LinkNo link available yet.

In image synthesis, reproducing the complex appearance of objects with subsurface light scattering, such as wax, marble and skin, greatly contributes to the realism of an image. Unfortunately, this added realism comes at a high computational cost. Models based on diffusion theory aim to reduce this computational cost by simulating the physical behaviour of subsurface light scattering while imposing smoothness constraints on the incident and outgoing light fields. An important component of these models is how they are employed to hierarchically evaluate the numerical integral of lighting over the surface of an object. This thesis will first review the existing literature on realistic subsurface lighting simulation, before investigating in more depth the application and extension of modern diffusion models in image synthesis. In doing so, we propose and evaluate a new hierarchical numerical integration technique that uses a novel frequency analysis of the incident and outgoing light fields to reliably adapt the sampling rate during integration. We realize our resulting theory in the context of several state-of-the-art diffusion models, providing a marked improvement in their efficiency and accuracy.

  • thesis

    Theory and Numerical Integration

    of Subsurface Light Transport

  • freq

    Frequency Analysis

    for Accelerated Subsurface Scattering

  • snow

    Snow Simulation

    with a Material Point Method

  • Scanner

    3D Scanner

    with Structured Light

  • Fluids

    Fluid Simulation

    in Real-time

  • Rigid

    Rigid Bodies

    Collisions and Contacts

  • Spring

    Forces and Collision Detection

    on Springs

  • Hetero

    Heterogeneous Light Diffusion

    for Surface Textures

  • homo

    Image Reconstruction

    with Homography

  • Progressive

    Progressive Rendering

    with Clustered Points Projection

  • DiffAO

    Diffuse Ambient Occlusion

    with Pre-calculated Spherical Harmonics

Main Skills

Speaking


  • English

  • French

  • Spanish

  • German

Experience

"Try not to become a man of success, but rather one of value." -Albert Einstein

Aug 2015
  • MSc Degree in Computer Graphics
  • Theory and Numerical Integration of Subsurface Light Transport
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2013 - 08/2015

Mar 2015
  • DIRO Graduate Excellence Scholarship
  • Université de Montréal, Montreal, Quebec, Canada
  • 03/2015

Sep 2013
  • Teaching Assistant
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2013 - 12/2013           09/2014 - 12/2014

  • MSc Student Representative
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2013 - Present

  • Entering University in Computer Graphics
  • Under the direction of Derek Nowrouzezahrai
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2013 - 08/2015

Jun 2013
  • International Volunteer
  • Puesta del Sol, La Paloma, Isla de Ometepe, Nicaragua
  • 06/2013 - 09/2013

Dec 2012
  • BSc Degree in Computer Science
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2010 - 12/2012

Feb 2012
  • CSGames 2012
  • University of Manitoba, Winnipeg, Manitoba, Canada
  • 24/02/2012 - 26/02/2012

Dec 2011
  • SONY Excellence Scholarship
  • Université de Montréal, Montreal, Quebec, Canada
  • 12/2011

May 2011
  • Internship at LEB
  • St-Jean-sur-Richelieu, Quebec, Canada
  • 05/2011 - 09/2012

Sep 2010
  • DIRO Excellence Scholarship
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2010

  • Entering University in Computer Sciences
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2010

  • Admission Scholarship
  • Université de Montréal, Montreal, Quebec, Canada
  • 09/2010

May 2010
  • College Degree in Computer Science
  • CÉGEP de Granby Haute-Yamaska, Granby, Quebec, Canada
  • 09/2007 - 05/2010

Jan 2010
  • Internship at IBM Canada
  • Bromont, Quebec, Canada
  • 01/2010 - 09/2010

Who is David?

You may want to know more about me than my computer graphics projects and skills. Take a look into my mind!

Veganism

Why killing animals is bad for environment.

Justice

Towards social, environmental and democratic alternatives.

Travelling

Learning languages in order to enhance travel experiences.