Creating Ocean Wave Scene with RenderMan Shader

Creating Ocean Wave Scene with RenderMan Shader

To make it easy to explain the process, Houdini is only use to illustrate the process.
In fact, due to the small number of geometries involved (namely two), the scene can be keyed in manually. (That was how I started)

Image rendered with BMRT using a inhouse generated displacement texture of 2k x 2k


    The following are the steps
  1. Create the ocean surface (I use a NURBS surface, you can use others as long as there is s,t texture coordinate information)
    screenshot
    For those of you wondering, I choose a size of 100 by 100 units for the ocean surface to allow better scaling of the displacement map (more later...)

  2. Create the sky surface (another NURBS of 100 by 100) but orientated at an angle AND intersecting the ocean surface. This intersection is important to reduce artifacts at the seem.
    screenshot
    I have a very slow PentiumII 350, I would prefer not to increase the pixelsamples too much and reduce the shading rate, applying the Art of Chi' Tng here (refer to Tony's Siggraph 98 course notes)

  3. Create a set of lights that represents the sunlight, skylight. Lighting is an art for which I am barely able to scratch the surface (refer to the Advanced RenderMan for professional advice)
    For this scene, I spent most of my time tweaking the lighting to achieve the desired effect.
    screenshot

  4. From here on, RenderMan stuff are used. The ocean surface shader is an implementation/modification of the watercolorsurface shader mentioned in the SIGGRAPH 99 tutorial (26) by Jerry Tessendorf
    screenshot
    For copyright reasons, please refer to the tutorial for the Shading Language implementation, I cannot reproduce those stuff here.
    My modification to the original implementation is the introduction of the standard Ka, Kd to allow better lighting control.


  5. The actual ocean "texture" comes from the displacement shader. For the current implementation, there is no magic in the displacement shader it self. The "effect" comes from a specially generated filtered noise image.
    screenshot texture sample
    You can obtain more information about the mathematics behind the height field generation from Jerry Tessendorf 1999 SIGGRAPH Tutorial 26

  6. To round up the scene, I needed to introduce some depth effect so that I can cheat on the details in the distance.
    In addition, I understand from the Advance RenderMan book that depth cue is a very important visual cue to the human eye. For that I simply introduce an Atmosphere shader, I tried using the RCdepthcue shader but couldn't get that to work so I settle for RCfog.
    screenshot
    Both the RCdepthcue and RCfog are from the RenderMan Companion book

The sample HIP file and sample RIB is available.
Hosted by www.Geocities.ws

1