"GP" Shading & Lighting

"GP" Shading & Lighting

RenderMan Studio 4 introduced a new Maya-native shading system that supports a modern physically-plausible RenderMan shading workflow. This new shading system provides an out-of-the-box, easy-to-use system that supports advanced lighting and shading workflows, including live global illumination and subsurface scattering.

The new features include RMSGPSurface, a new "general purpose" physically plausible shader that supports:

  • Layering
  • Energy conserving lighting models
  • Efficient area lights
  • Live or precomputed subsurface scattering
  • Live or precomputed GI

As well as new, advanced light sources that support:

  • Hemisphere, Disks, Rectangles, Spheres, and Distant lights
  • The new area shadow maps, ray-traced, and hybrid shadowing workflows
  • Textured emitters
  • Light Blockers

The initial implementation also includes specialized surface nodes for glass and matte shading models.

  • Important

    The plausible shading system is an all or nothing proposition: the shading is fully-integrated - lights working with shaders working with the radiosity cache, etc. - so older shaders and Maya's shading nodes are not supported. Users may still use Maya lights, which might be faster in certain circumstances, but the full benefits of the system are derived from using the new RMS nodes.

About the New System


Layering in the new RfM shaders is handled via the co-shader mechanisms. Co-shaders are dynamically bound shaders that allow maximum flexibility in designing your lighting workflows.

The new RMSGPSurface shader can have other Surface shaders attached to it via the Bound Layers parameter. They are composited in the order in which the layers are connected. Each layer has a mask that dictates how the layers are composited together. Currently, the only compositing operation allowed is over, so layering effects must be done via the ordering and the mask. You can choose to make a layer only contribute Specular light transport to the underlying layers by setting "mask specular" to off. To keep the shaders behaving in a plausible manner, a surface that contributes specular will still have an alpha that represents the amount of light that is transmitted through the interface. This will help prevent getting doubled reflection intensities, particularly at glancing angles where reflectivity is highest. Note that currently we aren't respecting the index of refraction of each layer, so we aren't computing the correct reflectivity coefficient for the layered boundary. This choice was made to prevent the layering of speculars from getting too complicated, but it may result in doubled speculars unless you are careful to avoid this.

Global Illumination

Global Illumination (indirect diffuse) is controlled through special global GI lights - RMSGILight for ray-traced global illumination and RMSGIPtcLight for point-based global illumination. This allows the user to to have both global and fine grain control of GI computation. Light linking can be used to control how different objects have their GI computed. For example, if you have a set that uses pre-computed point clouds for GI, you could use one GI light that provides point-based GI for the set and ray-traced GI for the hero character via a separate GI light attached specifically to the hero geometry.

Image-Based Lighting

In RMS 4 we have decoupled indirect global illumination from Image-Based Lighting (or IBL, sometimes called Image-Based Illumination, or IBI). Direct lighting using IBL (including occlusion) is now handled by the RMSEnvLight (not to be confused with the older RenderMan Environment Light). The RMSEnvLight takes advantage of improvements in IBL added in PRMan 16 and 17. The results are slower than those computed by the older RenderMan Environment Light, but are much higher quality. The RMSEnvLight is also capable of producing sharp shadows from lights in your map.

Point and Area Lights

While point-based lights like the spot, directional, and point light have served us well, there are many advantages to using area light sources. We have provided an RMSAreaLight that can be easily tuned to your needs. The shape can be a disk, sphere, or rectangle, or it can be "distant", which is the area light equivalent of a directional light. These lights all use inverse square falloff and produce physically-correct shadows. The intensity of the lights can be modulated with a colored texture map. Their intensities are expressed as 2^n, so setting the intensity to 2 results in 4, while 6 would be 64. The area of the light source is also part of the intensity equation, i.e. scaling the light will increase or decrease its brightness accordingly.

The area lights can also take advantage of the new AreaShadow style of deep shadow map. These can be used by themselves, or they can be used in conjunction with ray-traced shadows. The light has two trace set parameters, one for inclusion of geometry and the other for exclusion of geometry. This facilitates computing a complicated object's shadow using the area shadow map while the rest of your shadows are computed using ray tracing.

For those who require them, a compatible point light implementation - RMSPointLight is included, as well. Note that Maya are also well-suited to working with the new materials, if you find that they meet your needs.

RMS introduces Geometric Area Lights and a new light node - RMSGeoAreaLight. "Old School" RMSAreaLights can be changed into geometric area lights via a Geometric Area Light checkbox, but do not provide the full functionality of the new light type. Furthermore, arbitrary geometry can be tagged to act as a geometric area light. The geometry needs to be assigned a RMSGPSurface shader and the Make Emissive attribute needs to be enabled via the object's Attributes menu. The Incandescence parameter of the shader dictates how much light will be cast by the geometry.

Sampling for geometric area lights is globally controlled by a setting called Direct Lighting Samples, found on the Quality tab of the Globals. This sample count is divided among all geometric area lights in the scene.


Prior to RMS 18, specular and light samples were managed using two numbers - a minimum sample count and maximum sample count. Beyond these two parameters the rate of sample increase per roughness was fixed. As of RMS 18, the Min sample settings have been replaced with Samples Per Degree (but are still separate for reflections and lights). The Max sample settings are unchanged and should still be used to prevent the number of samples (and, consequently, render times) from getting out of control. In general, if your renders are under-sampled (i.e. shadows and reflections are "noisy"), just increase the Samples Per Degree parameter by one or two samples, and that should do the trick.

Light Blockers

To enhance the ability to control the light contribution in a scene, there is a new light blocker node (wait for it...): RMSLightBlocker. These shaders provide efficient shadowing effects that work interactively when doing re-rendering. These will shadow both diffuse and specular contributions from the lights.

Blockers can be attached to either the lights or to the surface you wish to affect. Blockers are attached to lights or objects via the Hypershade, just as you would with any shader. The blocker is represented by an object in the scene, much as a light would be visualized.


Reflections can be controlled two ways. Without any additional work, ray-traced reflections will work out of the box. The quality of the reflections is controlled in the Advanced Specular component, where Min Samples and Max Samples settings are provided.

Subsurface Scattering

RenderMan Pro Server 16.3 introduced the ability to compute subsurface scattering live, via the ray-traced implementation of the subsurface() function. This bypasses the traditional approach of computing SSS through pre-passes. Point-based SSS can still be faster than live SSS, but doesn't work well in lighting scenarios, where the amount of time needed to do the pre-pass slows down the lighting process. This is particularly true when working in a re-rendering solution where the user would like to have immediate and accurate results of the SSS computations.

To enable subsurface scattering, simply change the Diffuse Mix preset in the Sub Surface tab from 0 (black - the default) to your desired amount. You should also choose an appropriate Albedo, based on the material type. Point-based SSS is controlled in separate component: in Point Based SSS, right-click in the Sss Map Connection field and choose your preferred method for generating your baked SSS data (organized point cloud - SSOrganize, unorganized point cloud - SSDiffuse, or brick map - SSMakeBrickmap).


Displacement has always been one of PRMan's strengths, and we have worked hard to provide best-in-class displacement performance with the new shaders. Rather than connect a traditional displacement shader to the node, as you would with Maya. Displacement is built in to the shader, and included in the layering behavior.

We provide support for vector displacement, normal displacement, bumpmapping, and normalmapping. Normal maps can even be applied on top of displaced geometry. Since the displacement is part of the node, rather than a seperate shader, the shader can share computations between the displacement and the rest of the shading computations.

Layering is also supported for displacement. Users can choose how the layer's displacement will interact with the previous surface's displacement, choosing to add to it, replace it, or take the min or max of the displaced solutions.

Secondary Outputs (AOVs)

In order to optimize speed and promote efficiency, the new shaders introduced in RMS 4 support a subset of the AOVs supported by the previous shaders. The supported AOVs are: wP (world space P), wN (world space N), Z, Diffuse, Specular, DiffuseIndirect, SpecularIndirect, Incandescence, Subsurface, and Refraction.

Light Groups

Grouped outputs for lights can be created two ways in RMS. The simplest way is via the Lighting Panel:

  1. Select the lights that you want to include in the set, then click the Create Light Set icon.
  2. A new light set will appear in the Light Set table; click the first icon next to the new set to "Emit grouped diffuse and specular AOVs for the light set"...
  3. That's it.

Users can also create the groups more explicitly:

  1. Assign each RMSGeoAreaLight in the scene a Light Group name, under the RMS Geo Area Light Attributes.
  2. For each GP shader in the scene, set the Light Group(s) array (under the Advanced disclosure) to have elements corresonding to the appropriate name(s) of light group(s).
  3. In the Final pass Outputs tab, add two AOVs for each light group name (e.g. foo), like "color GroupedDiffuse_foo" and "color GroupedSpecular_foo".

Included Shaders


RMSGPSurface - general purpose shader, accepts layers; can be layered.

RMSGlass - for shading refractive objects; accepts layers, but cannot be layered.

RMSMatte - a matte shader equivalent of GPSurface.


RMSAreaLight - a "plausible", physically accurate area light, provides several possible shapes. Note that, because it is physically accurate, its size affects its intensity.

RMSEnvLight - an environment light that provides direct illumination, such as image-based illumination (IBI). It should not be confused with the RenderMan Env Light in previous versions.

RMSGILight - provides ray-traced indirect illumination, e.g. "color bleeding".

RMSGIPtcLight - provides point-based indirect illumination.

RMSLightBlocker - provides light-blocking behavior (i.e. shadows) without adding geometry to a scene. Can be used as a co-shader attached to area lights or to the shadow-receiving geometry.

RMSPointLight - a "plausible" point light.