Christopher Oat

Graphics Projects


Ping-Pong
Demo Team Lead, 2008
Slides: [PDF] White Paper: [PDF] Webpage: [HTML] Movie: [MOV FLASH]

An interactive demo in which the player has a limited amount of time to blow thousands of ping-pong balls through designated goals. A dynamic GPU-based global illumination simulation is used as the primary lighting method along with a real-time ambient occlusion approximation. Deferred shading and edge-based multi-sampled anti-aliasing are used for rendering. A custom multi-core optimized physics simulator was developed to model the behavior of thousands of ping-pong balls in the interactive environment.
Ruby: Whiteout
Demo Team Technical Lead, 2007
Movie: [MOV] Webpage: [HTML] Wrinkle Notes: [PDF] Wrinkle Slides: [PDF] Wrinkle Movies: [ZIP]

A three minute cinematic sequence, rendered in real-time, was developed as a launch demo for the Radeon HD 2900. This demo was created by a team of four engineers and three full time artists and includes new and unique methods for character facial animation, dynamics clothing and facial wrinkles, human hair and skin shading, GPU fur physics, real-time global illumination approximation, GPU based spherical harmonic projection and rotation, procedural snow accumulation, volumetric snow and ice shading, and HDR rendering with dynamic tone-mapping using a real-time histogram generation technique.
Ambient Aperture Lighting
C. Oat, P. V. Sander.
ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games 2007
Paper: [PDF] Movie: [WMV]

A real-time shading model that uses spherical cap intersections to approximate a surface's incident lighting from dynamic area light sources. Our method uses precomputed visibility information for static meshes to compute illumination with approximated shadows in a single rendering pass. Because this technique relies on precomputed visibility data, the mesh is assumed to be rigid at render time. Due to its high efficiency and low memory footprint this method is highly suitable for games and other interactive visualization applications.
Rendering Gooey Materials with Multiple Layers
C. Oat
ACM SIGGRAPH 2006, Course 26: Advanced Real-Time Rendering in 3D Graphics and Games
Course Notes: [PDF] Slides: [PDF] Movie: [MP4 AVI]

An efficient method for rendering semi-transparent, multi-layered materials. This method achieves the look of a volumetric material by exploiting several perceptual cues, based on depth and illumination, while combining multiple material layers on the surface of an otherwise non-volumetric, multi-textured surface such as the human heart shown here. Multiple implementation strategies were developed to allow for trade-offs to be made between visual quality and runtime performance so that the technique may be scaled appropriately for different platforms and applications.
Ruby: The Assassin
Senior Engineer, 2005
Demo: [EXE] Movie: [MPG MOV] Webpage: [HTML]

This demo was originally developed for the Radeon X1800 launch but was also ported to the XBox 360 by a small team of engineers over the course of three (sleepless) weeks. I was responsible for porting the rendering engine's scriptable render-target management layer. I also ported the demo's shadow mapping, depth of field, texture space lighting, and final composite rendering paths so that they could make maximal use of the platform's unique EDRAM architecture.
Real-Time Irradiance Volumes
Lead Engineer, 2005
Slides: [PDF] DirectX 9.0 SDK Sample: [HTML] ShaderX 5 Article: [HTML]

An adaptively subdivided octree is used to place irradiance sample points in the environment. The octree is automatically subdivided using heuristics based on local scene complexity. The subdivision scheme uses GPU based tests to choose finer levels of subdivision in areas where irradiance changes quickly and coarser levels of subdivision in areas where fewer samples are necessary because irradiance changes slowly (top image). Irradiance distribution functions and their first order derivatives are computed at each sample point and are stored using 3rd order spherical harmonics. At render-time, this data is used to extrapolate a final, per-pixel irradiance estimate for dynamic objects moving through the scene (bottom images). This work has been incorporated into Microsoft's DirectX 9.0 SDK, presented at GDC 2005 and published in ShaderX 5.
Ruby: Dangerous Curves
Senior Engineer, 2004
Demo: [EXE] Movie: [MPG MOV] Webpage: [HTML]

The Dangerous Curves demo was developed for the Radeon X850. I implemented a radiance caching system for the diffuse lighting in this demo. Radiance and radiance gradients are sampled (both spatially and temporally) as a preprocess and stored in a cache using spherical harmonics for compactness. At run-time the cache is queried (the gradients are used to extrapolate radiance functions in the event of cache misses) and the results are integrated with per-pixel and per-vertex radiance transfer functions for final diffuse lighting.
Real-Time Subsurface Scattering
Project Lead, 2004
Demo: [EXE] Movie: [MPG MOV] Webpage: [HTML]

This demo was developed for the ATI Radeon X800 launch. It incorporates Precomputed Radiance Transfer techniques to simulate global illumination effects such as bounced lighting and subsurface scattering. Post-processing techniques for depth of field and light blooms along with environmental effects such as atmospheric scattering give this demo a very natural look. In the process of creating this demo I also extended our effect framework and art pipeline to expose PRT-based material and lighting features to the artists. This work was featured as part of a conference presentation at GDC 2004.
Lava Caves Screensaver
Shader Developer, 2003
Demo: [EXE] Movie: [MPG] Webpage: [HTML] Slides: [PDF] GPG4 Article: [HTML]

The Lava Caves screen saver was developed for the Radeon 9800 launch. For this demo I used image-space post-processing techniques for the simulation of atmospheric effects such as heat-haze distortion. Additionally, I worked with the project's artist to develop a pixel shader technique to approximate the appearance of lava flow. I presented these techniques at GDC Europe 2003 and published them along with Natalya Tatarchuk in Game Programming Gems 4.
copyright © 2008 christopher oat