Steven Dao

About Me

Computer science and philosophy student at UT–Austin.

Computer graphics and animation enthusiast.

Former intern at Google and DreamWorks Animation.

Water Simulation Plugin

Maya plugin (C++)  View on GitHub

3ds Max modifier (C++)  View on GitHub

  • Based on Jerry Tessendorf's ocean simulation course notes from Siggraph 2004
  • Both the Maya and 3ds Max plugins support generating ambient waves on an open ocean; at the heart of the process, they use an FFT to sum many individual waves constructed from a statistical model
  • The 3ds Max version also supports dynamic interaction with collision objects using a convolution kernel over a grid of wave points (Tessendorf's “iWave” method)

These videos demonstrate the 3ds Max version, with wave and collision object interaction:

Ocean Simulation - Droplet from Steve Dao on Vimeo.

Shapes in the Water from Steve Dao on Vimeo.

And this demo shows some of the artist-controllable parameters in the 3ds Max plugin:

iWave 3ds Max Controls Demo from Steve Dao on Vimeo.

Terrain Generation Plugin

3ds Max modifier (C++)  View on GitHub

  • A procedural terrain generator using the diamond-square algorithm
  • Can generate terrain of varying roughness, from deserts to mountains

The terrain outside the window in this video is entirely procedural:

Paper Airplane - By the Window from Steve Dao on Vimeo.

Real-Time OpenGL Simulations

Basic mass-spring cloth simulator (Scala/OpenGL)  View on GitHub

  • A simple mass-spring cloth simulation system using Verlet integration
  • Currently supports cloth collision with a sphere

Sample screen grab of the simulation in action:

Cloth touching a sphere.

See full image See animated video

Fur/grass simulation (C++/OpenGL)  View on GitHub

  • Fur simulation using a "shell" shader approach, based off Catalin Zima's XNA tutorial
  • Reimplemented in OpenGL 3.3 Core with GLSL shaders
  • Also works well for fur-like objects like grass

Sample screen grab of the simulation in action:

Grass using fur simulation.

See full image See animated video

Houdini Sims

Rube Goldberg machine  View on Vimeo

Rube Goldberg Machine in Houdini from Steve Dao on Vimeo.

A Rube Goldberg machine in Houdini using rigid bodies, wires, and FLIP fluids. 100% simulated; no keyframes (except for the motion of the camera). Houdini Apprentice / rendered in Mantra.

Heartcloud  View on Vimeo

Heartcloud from Steve Dao on Vimeo.

A simple animation of a cloud creating a heart shape. Uses volumetric cloud simulation in Houdini, with blendshapes (morph targets) driving the heart animation. Houdini Apprentice / rendered in Mantra.

Reyes Rasterizer

“Hugo Reyes”, a micropolygon renderer (Scala)  View on GitHub

  • A micropolygon renderer that roughly follows the Reyes algorithm by splitting and dicing primitives into micropolygons before shading
  • After the splitting step, the rest of the pipeline is parallelized thanks to Scala's parallel collections
  • Supports Bézier patches, displacement mapping, lighting with attenuation and shadow maps, toon shading, and more
  • Most parameters are fully-animatable (although it currently only supports linear interpolation of parameters)

Sample rendered video using toon shading and shadow mapping:

Reyes Renderer Sample from Steve Dao on Vimeo.