Steven Dao

News & Updates

I'm looking for an internship this summer… shoot me an e-mail to hire me!

Check out my progress ramping up on Unity 3D! I'm currently working on a 3D tetrominos game.

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
  • 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.

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 shader-based approach, based off of 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

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
  • Supports Bézier patches, displacement mapping, lighting with attenuation and shadow maps, toon shading, and more
  • Represents a scene as a directed acyclic graph, supporting hierarchical transforms and object instantiation
  • 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.

Short Clips

No code here—just a few experiments involving lighting, texturing, particles, and cloth simulation. Enjoy!

The Love Letter (Part I) from Steve Dao on Vimeo.

A guy waits for his sweetheart, holding a love letter that's more magical than it seems. (I'm still working on Part II.) Animation done in 3ds Max, using a combo of Mental Ray and the scanline renderer. Lighting uses a daylight system; textures are a mix of procedural and images from Morguefile (
Cloth is done by simulation in Max, water ripples are done using my iWaveOcean plugin (, and clouds are done using a particle system.

Basketball Player from Steve Dao on Vimeo.

Demonstrates different uses of cloth simulation for the player's clothes and the basketball net. Cloth dynamics are used to stretch the net against the ball. Most of the materials are procedural, save for the floor, net, and backboard, which use textures from the Autodesk texture library. A subsurface scattering material is used for the player's skin.

Shapes in the Clouds from Steve Dao on Vimeo.

This is taken from my short "The Love Letter" (the last scene in part I). Clouds formed using a particle system move in the sky to create two figures in love at the end. The animation is done in several passes: the background and the paper airplane in the foreground are rendered in Mental Ray, while the clouds are rendered using the 3ds Max scanline renderer (much faster).

Fingers Counting 1-2-3 from Steve Dao on Vimeo.

I experimented with modelling, rigging, and texturing a human hand. The hand is completely UV mapped, and the texture used is from a photograph of my own hand. The fingers are rigged in order to produce a counting sequence. This was done in Maya.

Gears from Steve Dao on Vimeo.

An experiment with more realistic procedural textures and their interaction with a few lights in an otherwise dark scene. Created with Autodesk Maya and rendered with Mental Ray.

Bounce from Steve Dao on Vimeo.

Bounce, a short animated film starring Octy the octopus! The plot is, of course, inspired by Pixar's short film Luxo Jr. I made this animated short a (somewhat) long time ago when I was in high school. It was created using 3ds Max and rendered with Mental Ray, using toon shaders.