Slim Look Development

Renderman, until it's 19th release, used a shading system called Slim for it's Reyes renderer. Slim allows for a more procedural method of shading, and relies on a node network which enables the user to create custom shaders as well as complex network systems for a variety of results using just the built in utilities. This project's aim was to create two cupcakes using Slim shading and Ptex displacement.


The first image below is a picture of the cupcake I was originally given to replicate. However, after a few frustrating hours trying to sculpt the folded layers of icing in mudbox, I instead used that cupcake for reference only in the paper wrapper. I chose two different icing patterns for my final render. I also decided to include the blackberry on the far right cupcake in order to increase the variety of shaders within my final render. In the end, I'm glad I did since I feel the blackberry is one of the stronger components of my render.


To begin the lookdev process, I first settled on a lighting setup. The setup could be pretty basic since I am only replicating studio lighting rather than an environment. I used the built-in renderman lighting rigs. From there I adjusted the intensity and color of the light to get the desired effect. After setting up the key lights, I added color with an environment light. The two renders at the top were my favorite in terms of the effect of the different hdrs.

Using Slim

Slim is a surprisingly intuitive interface. Similar to Maya's hypershade editor, different node 'utilities' could be plugged into a basic shader to create an endless combination of results with different complexities. However, I found Slim to be more robust and less likely to corrupt a shader. Renderman could also render a more complex shading network MUCH faster than a shader coming out of the hypershade editor. One of the reasons Slim could be more hardy is that the 'palettes' of the shading network could be externalized from Maya. So if Maya did have a file corruption - or corrupted the saved, internal Slim palettes - Slim could either reload the palettes or import them into an older version of the Maya file without data loss.

To create the wrapper, I used a custom node given to us called 'papercup'. This node created a displacement based on vertical masks. These masks created the grooves in the wrapper, and the masks could be used to control color, incandescense, etc. The papercup shader also allowed for distortion, so the ribs on the wrapper could be changed from perfectly vertical to a more realistic crushed shape with masking information provided by a fractal pattern (I used a brownian).

The wrapper ended up being the most complex node network created in Slim. The papercup node was used to control the displacement of the wrapper. However, a custom node called 'velvet' also contributed in the edges of the wrapper, as well as the lines of the grooves. While velvet doesn't describe the desired texture of the wrapper, it determines color based off of the facing ratio. This 'edge' relationship allowed color to be manipulated based on a combination of the facing ratio and mask created by the 'papercup' shader. I also used quite a few ramp nodes, as the transparency and color of the wrapper changed vertically. To create the appearance of a 'cake' texture, I connected a fractal into the ramp inputs. I also added a little texture to the paper with a fractal bump.

I used a high contrasting color to determine the placement of the ramp and fractals on the surface of the wrapper.

Seperate shaders were created for each cupcake wrapper, not only because of the different types of cake (driving the color) but also to add variation in ridges.

Subsurface Shading

Subsurface scattering in Renderman is a calculated effect of light scattering through a semi-transluscent material. Two values determine the amount of subsurface scattering in a shader. The first is albedo, and the second is a vector attribute called diffuse mean free path (DMFP). In it's most basic practical definition, albedo is the color that is 'inside' a shader; the color that the shader uses for light passing through an object. DMFP is input as a color attribute- however, the color has no effect on the shader's color output. Instead, the RGB values are used to determine the distance different RGB values can move through the surface. Each type of surface has unique albedo and DMFP values to determine the overall look. Pixar has made this easier by releasing a table of values depending on different types of shading situations. As a class, this, even, was simplified with a custom node that we could attatch to the shader and select the type of material directly.

All of the GP Shaders in slim have the capability to use Subsurface Scattering - no additional node is needed to set this up. In the SSS part of the shader, the ratio between the diffuse and Subsurface contribution to the overall look is determined by 'Diffuse Mix'. This value generally can start at about 75% in favour of the subsurface contribution.

I used Subsurface scattering on the cake, icing, and blackberry.

PTex Vector Displacements

With PTex, Renderman can interpret texture map information without using UVs. It works instead by storing seperate texture information on each individual face of a mesh. And since the result isn't dependent on a 2D map, it allows for much more complex shapes than a regular displacement map. It's especially necessary for sculpting the icing of the cupcake as it allows for folds and overlaps in it's end result. PTex is also good for keeping the polycount of a scene low while retaining a large amount of detail since the displacement isn't reliant on a dense mesh.

Creating PTex in Mudbox

Until I can find a ZBrush plugin to convert sculpted mesh into PTex information, Autodesk's Mudbox is the best bet to export a vector displacement. First, open the base mesh into Mudbox.

Before sculpting on the geometery, first setup the object to use Ptex. To do this, go to:

UVs & Maps > PTEX Setup...

The option box for PTEX size will come up. Increase this to approximately 4-6 million texels. I could make a bit bigger of a map for this scene since it had very little within it. However, for the most part I tried to keep the texture map as close to 2k as possible. When you've reached an appropriate size, click 'done'.

From here you can start sculpting. Create a new sculpt layer and divide the geometery as much as needed to get the detail you want. If you have to go up a sub division layer later, you can by creating a new sculpt layer. Remember, save the file before dividing over the 7th sub-d level and before extracting the Ptex map.

To extract the PTex information, go to:

UVs & Maps > Extract Texture Maps.

The settings for the texture map extraction are below. In order to preserve the detail from the sculpt, make sure that the target and source models are both selected. Otherwise, Mudbox will export the sculpt on the lowest subdivision level. Also, remember which setting you choose for "Vector Space". Either 'world' or 'object' will work, but the setting must correspond in Slim. Also, make sure the path name for the exported Ptex will be in the 'sourceimages' folder of the project directory - this will make life easier. When you have finished with the settings, click 'extract'.

Finally, before importing the maps into Maya, there are a few extra settings that need to be added to the object's shape attributes before the Ptex will work. These are the Renderman attributes "Ptex support" and "Sub-div Scheme."


I really enjoyed using Slim's interface and was impressed with the range of options through procedural shading as well as the quality results in PTex displacement. Even without the custom nodes such as 'papercup', the shading network seemed very adaptable to any purpose. I also appreciated it's ability to be externalized; although my Maya file began to reject the internally saved pallete, I didn't lose the work I had finished.