Slim: Basics

Slim: Basics

  • Note

    There are important changes in RMS 4 that users should be aware of. For an overview, please take a moment to read The RMS 4 Transition Guide. Users should also note that the Slim documentation will be subject to further changes and upates.

Slim is intended to perform two basic tasks in your shading pipeline. It is an authoring tool in which shading artists create shading assets: using Slim nodes - shading models, shading components, utilities, et cetera - artists create appearances that generate .slo files, textures, point clouds, brick maps, shadow maps, and photon maps, not to mention Arbitrary Output Variables, for consumption by prman. It also provides mechanisms for managing those shading assets, via Palettes, Packages, Instances, and Sessions. Note that can be used either in standalone mode or "tethered" to a tool such as RenderMan for Maya or RMS for Katana.

This document is intended to give users an overview of this "core functionality", or at least to point you to further documentation that covers the matter in more detail, where appropriate. For more information on Slim's integration with RenderMan for Maya, please see the RfM & Slim section of the documentation.


Appearances refer to the nodes in Slim used to construct and represent RenderMan shaders. RenderMan shaders imported into Slim are represented by a single appearance. Shaders constructed in Slim consist of a network of appearances, also called functions.
A function is a kind of appearance that supports interconnectivity and custom shader generation.  One function can be connected to any number of properties from other functions and a  set of interconnected functions can be viewed as a graph to understand their relationships. Functions are categorized by their type and certain function types can be attached to objects in your scene.  To render a function, Slim converts your network of connected functions into a RenderMan shader.
Every appearance includes a set of properties that define its characteristics. Properties come in many forms, such as shader parameters, RIB attributes, and property collections.
Templates define the set of functions that can be combined by users to create shaders. Templates are Slim extensions that are loaded by Slim at startup.

Slim Nodes

Slim nodes can be broken down several ways, the most obvious embodied in the composition of the Smart Palettes that users see by default when they open Slim. Appearances are essentially Attachable or Subordinate, but, of course, it's somewhat more complicated than that...

Shading Models
Shading Models are Slim at its most straightforward. These are basic surface shaders, like Blinn or Gooch or Plastic, volume shaders, like Fog and Smoke, or light shaders. They have all the parameters you need to generate basic shaders. Naturally, they are Attachable.
Shading Components
Shading Components are the little nodes in Slim that can be combined to create your own Shading Models. These consist of the basic shading components that you expect if you're familiar with shading: Anisotropic, Diffuse, Fresnel, Specular, and so on. They can be used in your own templates, or in conjunction with Slim's various and assorted Special Appearances...
Special Appearances
Slim provides a number of special appearances to use for simple, if not trivial authoring of custom appearances. These include appearances like RMSGPSurface, Ensemble - which can be used to combine Displacement, Surface, Atmosphere, and Interior shaders in a single Slim appearance.

Functions in Slim Shading Networks

Functions are the building blocks of Slim "shading networks", which can then be "flattened" into RenderMan shaders (essentially, compiled, creating a .slo file). When any shader is built interactively, functions are put together to create a shading network. There are many types of functions serving many different purposes.

'Tis a fine line between a Slim function and a RenderMan shader, and it would behoove you to understand the difference.  Any time you render a function, it must be converted to RenderMan Shading Language (RSL) and then compiled into a .slo file. This needs to be done each time a fundamental change is made to your function network. An appearance is said to undergo a fundamental change when you:

  • create, delete, or change a connection


  • change a parameter's value provider (it can be a Constant or a Variable or an Expression)

Slim supports functions whose types match the four common RenderMan shader types.

Shader Types

surf Surface Shader
Surface shaders are attached to all geometric primitives and are used to model the optical properties of materials from which the primitive was constructed. A surface shader computes the light reflected in a particular direction by summing over the incoming light and considering the properties of the surface.
disp Displacement Shader
Displacement shaders change the position and/or normals of points on the surface and can be used to place bumps on surfaces.
lite Light Shader
A light source shader calculates the color of the light emitted from a point on the light source towards a point on the surface being illuminated. A light will typically have a color or spectrum, an intensity, a directional dependency and a fall-off with distance.
vol Volume Shader
Volume shaders modulate the color of a light ray as it travels through a volume. Volumes are defined as the insides of solid objects. The atmosphere is the initial volume defined before any objects are created.
imgr Imager Shader
Imager shaders are used to program pixel operations that are done before the image is quantized and output. Slim Imager nodes include a Filmic Tonemapper, an sRGB Imager, and a Grade node. Imagers should be attached to the camera from which one intends to render.

Note that the distinction between a surface function and a surface shader is purely semantic.  The parameters of a shader are frozen in type and number and, most importantantly, can't be connected to other Slim functions. Sometimes the very inflexibility of a shader is desireable and Slim provides the freeze command to convert a function network into an individual shader instance in your palette. Functions are instances of templates. Templates are usually loaded when Slim is started and carry with them the RenderMan Shading Language (RSL) source code needed by Slim to generate fully functional RenderMan shaders.  When Template developers modify a template, Slim's handy reload feature can be used to synchronize template instances with their templates.

Function Types

surf Surface
A surface function's primary responsibility is to calculate the color and opacity for the surface and is usually little more than a connection point for one or more shadingmodel functions.  Shadingmodel functions can be layered and mixed using other functions.
disp Displacement
A displacement function's primary responsiblity is to perturb either the surface normals or the surface points.  The former is called bump mapping while the latter is known as displacement mapping.  Displacement functions usually provide the option to bump or to displace as well as one or more parameters where you'll connect pattern generators for your displacement.
lite Light
A light function's role is to provide the outer hull of a lightsource shader.  This means that it controls the form of light - whether it's local or infinitely distant or whether it emits environment light.  Usually light functions provide connection points for coloration, intensity, etc. When connecting pattern generator functions you must make sure that they operate on the Surface Point Light manifold.  For example, you can create a slide projector by connecting the light color to an Image File node operating on a Surface Point Light manifold via a Perspective Z Projection.
vol Volume
A volume function's role is to provide the outer hull of a volume shader. Pixar's PhotoRealistic RenderMan supports volume shaders for atmospheric effects and you can attach volumes to individual objects or to the entire scene.
surf Shadingmodel
A shadingmodel function's role is to calculate the primary response of a surface to the prevailing light conditions. Once more, shadingmodel functions always form the core of a surface shader.  Since this amounts to a color and opacity at every point on the surface, shadingmodels can be combined and layered in interesting ways.
col Color
A color function calculates a color at every point. Texture maps can be connected into your networks as functions that calculate colors.
flo Float
A float function calculates a single floating point value at every point. Grayscale or binary texture maps can be accessed as float functions but float functions can also be arbitrarily valued. Various rescaling functions can be used to bring a function's range into a desireable realm.
vect Vector
A vector function calculates a 3D vector at every point. Vector functions are used to perturb, or warp, fields of points.
norm Normal
A normal function calculates a 3D normal at every point.
pnt Point
A point function calculates a 3D point at every point.
man Manifold
All functions operate on a domain. Some functions operate implicitly on a domain but most require its explicit specification.  For our purposes, this means that functions require a description of the surface that they're operating on and this requirement comes is the form of a manifold parameter. A manifold function either generates or transforms function domains. Manifold functions encompass notions of 3D Surface Points, Reference Geometry, Projection, Tiling, Surface Parameterization and Warping. Manifolds are a generalization of point functions and carry with them derivative information useful in antialiasing calculations. A function network can operate on any number of manifolds but usually you'll choose a single manifold to drive all the calculations for a network.

Special Appearances

mat AllPurpose

The AllPurpose appearance is the new, highly extensible, perfect "blank slate" appearance. Users can add any arbitrary shading component in any combination to create the desired shading model. Robust layering is built in. Shaders are savvy to the machinations of the re-rendering mode and RSL 2, and provide shader artists with better, more powerful shaders: results are more realistic, flexible, and responsive to the needs of a real world shading pipeline.

The AllPurpose appearance is the basis for the default Library Palette of production-ready materials provided with Slim, and has been adapted to provide the same power and flexibility to new Slim lights.

For a look at the AllPurpose in action, check out the Slim 9 Tour.

ens Ensemble
Ensembles are used to collect many RenderMan behaviors into a single unit that can be attached to objects in your scene.  You can plug a Surface, Displacement, Volume, and Interior shader into a single ensemble.

Masters & Instances

Any shader that has been compiled into Pixar's .slo file format can be imported into Slim. The .slo file is said to be the appearance master while the imported representation of the shader is called an instance. Once a shader has been converted to .slo format its interface becomes "frozen": the number, names, and types of the shader parameters are fixed. However, because the parameter values can be changed, shaders are much more powerful and flexible than texture maps. Shader developers frequently modify and recompile shaders during the development process and Slim provides a reload feature that causes a shader instance to be synchronized with its master. Because parameters can be renamed, retyped, or removed entirely, reloading can result in dramatic changes to your shader instances.

Sessions & Palettes

Managing your assets in a sophisticated shading pipeline is a paramount concern. Slim works on its own and in tandem with RfM to provide a reliable and flexible system of managing your shading asset at all levels of your pipeline: from session data that keeps everything where you want it in a production to a flexible system of creating and managing palettes that allows you to leverage your Slim work across and within productions.

More Information

Ambitious users are encouraged to read all of the Slim documentation to establish a solid foundation, particularly as pertains to templates and scripting. Note that the Slim files themselves are an excellent source of information, particularly as related to templates. All users should be sure to consult the user interface documentation and, users unfamiliar with the latest version of Slim are encouraged to take a look at the Slim 9 Tour.