PhotoRealistic RenderMan 12.0

Release Notes


These release notes describe significant changes and enhancements to RenderMan® Pro Server for the 12.0 release over the 11.5 release.

Eyesplits Eliminated

The renderer no longer requires eyesplits options or attributes. Users will no longer experience warnings about eyesplits, long delays before rendering starts, or excessive splits that waste memory. The options and attributes are silently parsed, but will be deprecated in future releases.

3D Baking

The renderer now has support for 3D texture maps. Arbitrary 3D data can be written to a sparse volumetric file (a "pointcloud") with the new bake3d shadeop. These pointcloud files can be inspected using ptviewer, filtered using the new utility ptfilter, and converted into a 2D image file using ptrender. In order to facilitate efficient rendering of large sets of baked data, the renderer now supports a new MIP map representation called “brick maps” that are suitable for efficient filtering and caching. A brick map is created from a point cloud file using a new utility brickmake. Brick maps can be inspected with brickviewer and high-level info about the contents of a brick map can be found with brickinfo. Arbitrary 3D data in brick map format can then be read in with the new texture3d shadeop. More information can be found in the Application Note Baking 3D Textures: Point Clouds and Brick Maps.

Interior and Exterior Shaders

Interior and Exterior shaders are now supported for ray tracing. For example, smoke described by an Interior shader can be evaluated by refraction rays sent inside an object from its Surface shader. Calls to trace() now automatically select the appropriate volume shader to run, if one is attached to the object; the surface normal is compared to the ray direction to pick whether the ray is traveling through the object's interior or exterior domain. Shaders using gather can get the automatic behavior by fetching "volume:Ci" or they can explicitly specify "interior:Ci" or "exterior:Ci" if they have a better idea of whether they are shooting a refraction or reflection ray.

Post-Visibility Atmosphere and Interior Shading

The renderer now supports optional Atmosphere and Interior volume shading of “camera” samples, after visibility processing is complete. This is an alternative to the traditional per-primitive Atmosphere shading and the new ray traced volume support. This new mode allows Atmosphere and Interior shaders to correctly take motion blur and depth of field sampling into account, without requiring ray tracing. More details can be found in the shading strategy section of the user manual.

Reduction of Ray Tracing Bias

Biasing issues for ray tracing have been greatly reduced. In other words, the trace bias attribute can now be reduced by a factor of 10-100 times before self-intersection becomes an issue again.

Automatic Continuation Rays

Trace and gather rays now automatically continue through partially transparent objects (Oi < 1.0), accumulating color and opacity along the way, just like typical camera samples. Previously this effect required cooperation from the shaders on the hit surfaces. Shaders which implement refraction and diffusion effects should ensure that Oi=1.0 and then cast their own refraction rays, as before. More information can be found in the introductory ray tracing Application Note.

Shader Message Passing Extensions

gather() can now send arbitrary local variables with each ray, to be used as parameters in shaders on the hit surfaces. These overrides for existing parameters are far more general than the existing "label" mechanism, and the receiving shader need not use rayinfo() or be otherwise "ray-aware" to use them.  The RSL Features section of the manual has more details.

Similarly, surface and volume shaders calling illuminance() can now send parameter overrides to lightsource shaders directly. Illuminance() can now also “fetch” back auxilliary values computed inside lightsource shaders as well. These extensions, which share the gather() messaging syntax, complement the existing lightsource and surface message passing functions:   the new "forward" send requires no special knowledge in the lightsource, and variables other than predefined "output" parameters can be fetched.

Loop Subdivision Surfaces

PRMan now supports Loop subdivision meshes. The Loop subdivision scheme is defined for triangles, and results in meshes that are more memory and speed efficient, and have fewer artifacts than the Catmull-Clark scheme when dealing with meshes made primarily of triangles. Loop subdivision meshes are created by passing the RI_LOOP ("loop") as the scheme parameter to the RiSubdivisionMesh call, and support all standard tags defined in the specification, as well as the stitching and improved facevarying extensions.

Improved Catmull-Clark Subdivision Surfaces

Catmull-Clark subdivision surfaces now have much lower peak physical and stack memory requirements. This is particularly true for dense meshes that take up large amounts of screen real estate, as well as ray traced meshes. Also, various constraints on subdivision mesh topology have been removed, making it easier to convert arbitrary polygon meshes into subdivision surfaces. In particular, a mesh no longer needs to be a single connected surface — multiple disjoint pieces will still be rendered individually. Also, singular vertices (vertices shared by faces which belong to disconnected meshes) will be automatically split. However, all edges must still be manifold (incident to at most two faces).

Memory Efficient Polygon Meshes

Polyhedra (i.e. the PointsPolygons and PointsGeneralPolygons calls) are now much more efficient to render.

Improved Triangles

PRMan now has much better support for triangles (whether they come from polygons or the new Loop subdivision surfaces). In prior releases, PRMan rendered triangles at the same speed as a rectangle twice its size (or to put it another way, triangles rendered at half the speed of rectangles). This is now no longer the case. Also, pinhole artifacts that sometimes occurred between triangles are now no longer present.

Arbitrary Output Variables
OpenEXR support

PRMan now supports rendering to OpenEXR images using the new "openexr" display driver. In addition, support has been added to txmake for creating texture files from OpenEXR source images.

Varying Length Arrays

Support for varying length arrays has been added to the shading language. Formal parameter lists to shaders and function arguments now support an array of indeterminate length, indicated by empty braces:

surface mattearr( float Ka=1, Kd=1; float testarr[] = {}; )

The array length and values will be initialized in RIB by the shader instance or from the geometry. To query the length of these arrays a new shadeop arraylength has been added. Also, arrays can now be assigned to each other, or compared for inequality.

Improved Midpoint Depthfilter

The midpoint depthfilter has been made more useful by the addition of a new visibility mode:

Attribute "visibility" "midpoint" [1]

Objects which have midpoint visibility but no camera visibility are considered visible when midpoint depthfilter is active, and take part in the two surface hider computation, but only as the second surface. Such objects can be considered “shadow receivers” but will not be “shadow casters”.

Dicing Camera

PRMan now supports the concept of an alternate camera for dicing and multiple strategies when performing dicing. These are chosen via two new parameters of Attribute "dice": "strategy" and "camera".

Plug-in Ri Filters

A new class of RenderMan plug-in, Ri filters support filtering of read-archives, inline archives, and procedural primitives. Ri filters are compatible with librx, including the -catrib flag. More information can be found in the Application Note Plug-in Ri Filters.

Netrender Environment Configuration

Netrender requests are now routed through Alfserver's site-customizable AlfEnvConfig procedure in alfserver.ini. This handler script allows renderfarm servers to select different installed versions of PRMan, and make environment variable and setuid changes, on a per-request basis. The keyword specified with netrender -R keyword is now treated just like Alfred's built-in RemoteCmd -envkey keyword, which means that a consistent set of environment and setuid rules can be applied to all processes launched by Alfserver. Any existing (deprecated) Alfserver -rmap mappings are still applied, followed by AlfEnvConfig handling.

Miscellaneous Changes and Bug Fixes



Pixar Animation Studios
(510) 752-3000 (voice)   (510) 752-3151 (fax)
Copyright © Pixar. All rights reserved.
RenderMan® is a registered trademark of Pixar.