Tech Sketches

 

This page is a repository for some of my more technical experiments in computer graphics. Here you will find tests that have been somewhat successful (or at least failed interestingly) using MEL, Python, Houdini, RenderMan, and other tools.


Jul 152008
 

Get the Flash Player to see this content.

Copyright © Pixar Animation Studios

This sketch was developed for Pixar’s RenderMan Courseware and demonstrates using procedural displacement mapping to achieve an interesting visual effect. The setup, covered in fine detail in the Courseware, uses on a particles system that writes primitive variables (primvars) onto the table top each time there is a collision event. The table top has a custom displacement shader that uses these privars to locate the ripples both spatially and temporally. From there, the rest of the displacement shader handles the pattern generation for the concentric rings. A movie of just the ripple pattern is shown below. This was output as an AOV (arbitrary output variable), a framebuffer separate from the final render, and was subsequently used to composite the final effect in Shake.

Get the Flash Player to see this content.

Copyright © Pixar Animation Studios
Jul 012008
 

Get the Flash Player to see this content.

Copyright © Scott Eaton

This sequence shows the use of corrective displacement mapping to achieve high resolution facial expression on top of a low-resolution animation mesh. The character on the left is rendered with his standard displacement map (sculpted in Zbrush) as well as a number of per-expression corrective maps, also sculpted in Zbrush. The same character on the right is rendered without the base displacement and shows only the corrective displacement mapping.

The entire pipeline for creating and rigging the facial setup was the topic of my Alias 3December workshop in 2005, titled appropriately “Corrective Displacement Maps for Facial Expressions”. Even though it is old, you can download the slides from the presentation here.

Jul 012008
 

Here are a couple experiments put together for Pixar’s RenderMan Courseware which demonstrate programmable raytracing in RenderMan.

Custom Gather


Get the Flash Player to see this content.

Copyright © Pixar Animation Studios

The is an example of using the gather() construct in an unusual fashion to create an interesting visual effect. The gather() call fires a hemisphere of rays above each shading point on the ground plane, and instead of tracing the usual diffuse or specular reflections (what raytracing is most often used for), the rays return their length (i.e. the distance to) each hit object, in this case the spheres. From there it is a simple case of normalizing the average distance and mapping it into a colored ramp. I put all the nitty gritty technical details in the RenderMan Courseware, so check there for a step-by-step on how it is done.

Visualizing Ray Depth


Get the Flash Player to see this content.

Copyright © Pixar Animation Studios

This example, also from the Courseware, is a visualization of ray depth. Each ray is traced into the scene and is reflected/refracted a number of times before it terminates on the bouncing sphere. The “camera” ray is always at trace depth 0, this is when the sphere is in plain view to the camera. As it falls behind the transparent screen the trace depth increases by one. Reflections off the floor and through the screen increase the depth a step further. The technical details of the implementation are in the Courseware.

Jun 302008
 

Get the Flash Player to see this content.

Copyright © Pixar Animation Studios

Here is another video I developed for Pixar’s RenderMan Courseware, this one demonstrates an interesting techniques that can be achieved with a fairly simple custom displacement shader that relies mostly on an understanding of the fundamentals of computer graphics. Specifically, the technique uses a sequence of depth maps (shadow maps) rendered from beneath the surface capturing the distance from the shadow camera to each point on the displacement-mapped spheres. Each point can then be transformed…

Continue reading »

Apr 212007
 

Get the Flash Player to see this content.

Copyright © Pixar Animation Studios

Here is a movie created for Pixar’s RenderMan Courseware that visualizes internet connectivity across the world. It was were created using Python and Pixar’s RenderMan software. The Courseware includes a comprehensive “making of” tutorial walking through all the steps involved in creating and rendering this animation.

Technically the project demonstrates the use of procedural primitives in RenderMan, meaning geometry (in this case curves) that are generated dynamically at rendertime by an external program. The “external program” in this case is a Python app that I wrote to parse a number of publicly available datasets to extract node-to-node connectivity of the internet backbone autonomous systems (AS). A second dataset maps these AS numbers to latitude and longitude coordinates. The final step is to take the resulting data and use it to generate RenderMan RiCurves.

To control the appearance and incandescence of the curves over time I wrote a custom surface shader that reads a “start time” primitive variable off each curve and ramps opacity along the length of the curve during creation. Once created the shader fades off the incandescence to give a subtle cooling effect (all this is viewed better in the original HD).

The top image shows the western hemisphere, notice the volumes of connectivity from the US to Europe and on to Asia (off the map to the right). Also interesting is the relative lack of internet infrastructure in South America and Africa. The bottom image is a closeup of the US, notice the huge number of links from the mid-Atlantic coast. This is where a number of large internet companies keep their data centers, just outside of Dulles in northern Virginia.