Computer Graphics research and development
Fully Deferred Rendering Pipeline

  • Allows deferred shading even translucent objects
    • No need for a separate forward shading pass
  • Can support BRDF materials within the G-Buffer
  • Brief summary
Efficient deferred lighting (Xbox 360, Playstation 3)

albedo normals lit lit + light volumes
line lighting multiple shadow casting lights

  • Greatly simplifies object shaders, and minimizes shader permutations
  • Guarantees that each pixel gets lit only once for each light
  • Allows for using several dynamic lights at the same time
  • Lighting computed in HDR, but albedo kept in LDR, for efficiency and high quality
  • Uses hierarchical stencil to mask only pixels that get hit by each light, for quick rejection of unlit pixels
  • Alternative lighting by using tiles to merge multiple light computations in the same pass, substantially faster than 1 pass per light when there's a lot of light overlap
Procedurally generated and animated clouds and smoke volumes

  • Dynamically renders and animates layers of clouds using dynamically generated noise
  • Smoke volume represented as slices of a procedurally generated noise volume texture
Post-processing filter architecture

bloom filter radial blur filter noise filter spherize filter

  • Highly optimal and extensible system for rendering multiple filter passes
  • Includes filters such as bloom, Gaussian blur, radial blur, spherize, and noise
Multiple detail layered terrain rendering

  • Bicubic spline for low frequency smooth rolling hill details
  • Displacement map for next level of details
  • Bumpmap for finer details
  • Procedural noise textures for minute details, with numerous levels of detail
    • noise detail perturbs underlying bumpmap so as to maintain original color
    • as opposed to traditional detail textures which blend away the original color towards the detail texture
Water simulation and rendering on the GPU

  • Computes motion of water with forces applied to it as a spring based force simulation
  • Renders water as a dynamically displaced height field
Sort-independent alpha blending (GDC 2007 presentation)

correctly sorted approximated

  • a technique for rendering alpha blended objects without any kind of sorting
  • it works best with low alpha values (i.e. highly transparent)
Bicubic spline surface rendering

  • renders bicubic Catmul-Rom spline surface
  • could render different uniform splines just by changing basis function matrix
  • dynamic lod tesselation
  • each surface patch has 4 edge lods and a separate center lod, to avoid cracks between adjacent patches with different lods
Deferred lighting

  • uses floating-point render targets and textures, in addition to multiple render targets
  • per-pixel lighting and shadowing for multiple point light sources done as a fullscreen post process
  • depth buffer shadow mapping supports self shadowing, and works in a single pass for 4 lights, computed at the same time as the lighting
Procedural texture mapping

  • procedurally generated noise texture maps
  • completely generated in a pixel shader
  • pixel shader generates random colors and computes noise function
  • virtually unlimited texture resolution at essentially zero memory cost
Procedural volumetric lightmap with bumpmapping and offset displacement mapping

  • per-pixel lighting for 8 point lights
  • volumetric lightmap generated procedurally in pixel shader
  • texture coordinates are moved away from view direction to give a visual effect of per-pixel depth using a displacement map (matching the normal map used for the bumpmap lighting)
Depth buffer shadow mapping

  • per-pixel lighting for spot lights
  • depth buffer shadow mapping for self shadowing (uses floating-point buffer)
Displaced subdivision surface

  • subdivision surface with displacement mapping
  • triangles are treated as barycentric Bezier patches
Slick surface

  • surface defined by a displaced cylindrical shape following a cubic Cardinal spline as the center axis
  • each section of the base spline is tesselated by a section of a displaced, scaled and twisted cylinder
Displacement mapping

  • mapping a displacement to an arbitrary triangle
  • normals are quickly and efficiently interpolated across the triangle, using spherical linear interpolation (quaternions)
  • interpolated normals don't require re-normalization
  • almost all work is done on the GPU, including transformation to tangent space, displacement, and surface normal computation from the displaced surface
  • CPU is only used for tesselation (dynamic), displacement map lookup, and normal interpolation
  • next generation shader model 3.0 will allow texture lookup in vertex shaders, which will further speed up performance
DX9 shader effects

  • uses HLSL shader language
  • per-pixel effects, including bumpmapped lighting, bumpy environment mapping, offset displacement mapping
All development done on Windows XP using DirectX 9.
Shader model 2.0 demos tested on ATI graphics hardware (Radeon 9700 Pro and 9800 XT).
Shader model 3.0 demos tested on Nvidia graphics hardware (GeForce 6800 GT).