So, how do we go about making ice that could cover existing models in a studio's library?

As a class, we decided to approach this problem by attaching RenderMan blobbies to the surface at every vertex point. A MEL script was written to gather the positions of every vertice in the object and use those positions for the blobbies. The MEL script then builds a RIB archive that can be referenced directly in a RIB file or read back into Maya using the RiReadArchive command. You can find the MEL script here.

After we had a working script for the blobbies, we began tackling the surface shader for the ice. Since ice has a strong sub-surface scattering quality, we began experimenting with prman 14's new subsurface() function. Feel free to look at the shader (the surface shader that generates the point cloud) and the shader (the surface shader that calls the subsurface() function that reads in the point cloud). I also felt that I needed some high frequency displacement on the ice so I downloaded Dave Hale's lava displacement shader (thanks Dave!). Here are some sample images using these shaders: (note - head model downloaded from here)

Above is the first attempt at using the vertece positions to place the blobbies. The SSS shader has been applied.
Above is the new method for placing the blobbies using particles emitted from the surface. Explanation below.

Because the topology of the model I chose was uneven (more detail in the face than on the head), more blobbies were placed on the front of the head and less on the rest. A large blobby size was used to compensate for this problem. However, much of the detail of the original model is lost. To recover this detail, a new method for placing blobbies onto the surface was used. Using the surface as an emitter, particles were generated along the face. The scripts used to capture the particle positions was obtained here. Thanks to Chris Wilson, a simple expression was then placed on the goalU and goalV attributes of the particle shape node to snap the particles to the surface and also slide them slowly down in the V direction. Here is the simple expression to snap the particles to the surface:

pShape.goalU = pShape.parentU;
pShape.goalV = pShape.parentV;

Here is the particle animation as seen in maya (the particle emission has been reduced for visualization purposes):

Here is the blobbies with the ice shader attached:


1) Because the particles are snapped to the surface, icicles are prevented from forming.

2) The noise on the point cloud is swimming and needs to be parented to the surface.

3) The distribution of the particles is a bit too even, causing the ice surface to have a "bubbly" look.


These caveats among others may be worth fixing if the time presents itself later in the quarter.