Main
Projects
Real-time Soft Shadows from Spherical Occluders
Description:

    I researched real-time soft shadows at UC Davis and wrote my thesis on this topic as well. This algorithm calculates fast and accurate soft shadows using a spherical light source and sphere-based occluders: spheres and capsules, or spheres swept along a line segment. Each occluder has of cones that encapsulate the volume of space that is fully or partially shadowed by that occluder. We calculate these cones on the CPU every frame. Then, using vertex and fragment shaders, we can quickly determine if a fragment is inside these cones, and if so, how much of the light the fragment can see.

Features:
  • Real-time soft shadows
  • Shadows on arbitrary surfaces
  • Dynamically change light or occluder sizes
  • Antiumbra effect for large light sources
Downloads:

Master's Thesis
Code Sample


Snowball Game
Description:

    I wrote a little snowball game for a class project. The game's actually not really fun, but it demonstrates some decent real-time effects. The game starts with a snowball at the top of a hill that you guide as it rolls down. Along the way there's water flowing down, bridges across the streams, trees, and ice. The terrain is rendered using a LOD heightfield where the level is based on both distance and variance in height. Ice/snow is rendered using multitexturing and an alpha map. Trees are rendered using distance-switched LOD, where far trees are 2D billboards. There is also a particle system to render snowfall and a nice splashing effect at the end.

Features:
  • LOD Heightfield
  • Multitexturing
  • Particle System for snow and water effects
  • LOD trees with billboards
  • Gravity, simple physics and collision
  • Skybox and Skydome
Downloads:

Runnable Demo
Full Source Code
Code Sample


Photon Tracer
Description:

     Writing a photon tracer was my first exposure to non real-time rendering. Spending 8 hours to render a scene was completely new to me, but the project was actually a lot of fun and I think I did a pretty good for in 8 weeks. For the first part of the project, I rendered the Cornell Box with only diffuse surfaces. Then I extended it to support specular, translucent, and specular-diffuse surfaces. This allowed me to render a much wider variety of objects. For the final part, I rendered a bathroom scene complete with shiny tiling, mirrors, a chrome faucet, and water.

Features:
  • Water rendering using Schlick's approximation for fresnel coefficients
  • Tunable Diffuse-Specular surfaces
  • Doo-Sabin subdivision heightfields
  • Layered Perlin noise for water surface simulation
Downloads:

Full Source Code
Code Sample


Doo-Sabin Subdivision
Description:

    This project subdivides a mesh using the Doo-Sabin subdivision technique. I use a Split-edge data structure to traverse the edges, vertices, and faces of a mesh easily when subdividing. A hash table of vertices also minimizes subdivision time.

Features:
  • 3DS Model support
  • Fast subdivision using a Split-edge data structure and a hash table
Downloads:

Runnable Demo
Code Sample

Copyright © 1999 - 2010 Robert Lin