PhotoRealistic RenderMan 11.5.3

Release Notes

March, 2004


These release notes describe significant changes and enhancements to Pixar's RenderMan  for the 11.5.3 release over the 11.3 release.

Multi-Processor Rendering

The renderer can now utilize multiple CPUs on the same system to process a frame in parallel.  The new mode can be enabled explicitly on the command-line with the new "-p" option:

      prman -p frame1.rib

By default, the render will automatically detect the number of CPUs on the system and apply each one to part of the image. You can also specify the degree of parallelism by giving an explicit count:

      prman -p:4 frame1.rib

The multi-processor behavior can also be enabled implicitly through rendermn.ini by adding the following setting

      /prman/nprocessors  0

A value of 0 (zero) indicates that all available CPUs should be used, otherwise a positive integer can be used to specify a fixed degree of parallelism; a negative integer specifies the number of CPUs to leave unused, i.e. -1 would mean "use all but one" of the available CPUs. Note that this rendering mode consumes licenses in a "pairwise" fashion: in other words, each pair of processors will check out one license.

Scene Analysis

A sophisticated improvement in scene analysis can substantially reduce the time spent in shader execution. The performance increase becomes more dramatic as scene or shader complexity increases.

Acceleration of Ambient Occlusion and Indirect Illumination 

Computing indirect illumination and ambient occlusion is dramatically faster — typically by a factor of two.  In addition, we now bake more indirect illumination and ambient occlusion information (without using longer compute time) in icf/ocf files, which results in much more robust results when reusing the baked values in animations.

Enhanced "Baking" of Ambient Occlusion and Indirect Illumination

Baking has been substantially improved in PRMan 11.5, and there have been many changes to how files are written. Irradiance cache files now store more data, which results in a higher quality representation of the effect, but also results in a larger cache file. Note that this quality improvement comes at no performance cost. More data is stored; no more calculations are performed than before. For more information refer to the Global Illumination App Note #35: Baking Ambient Occlusion & Indirect Illumination

Irradiance cache files are now written out on-the-fly during rendering (baking) instead of when the entire render has finished.

Baked cache files can now be merged using txmake. Here is an example:

    txmake -occlusion cache1.ocf cache2.ocf  cache_combo.ocf

For more info on combining caches see: App Note #35: baking occlusion for a camera fly-through

Deep Shadows Enhancements

Enhancements have been added to "deep shadowmaps." Most notably, deep shadows now have an open API for implementing further customizations.   

See Application Note #38: Deep Texture API for more information.

Hider Subpixel Output

PRMan now has an option to force the hider to emit every subpixel into the final image:

Hider "hidden" "subpixel" [1]

This generates an image which is PixelSamples -times larger, but has every unfiltered color and depth available for perusal. For example, asking for a 640x480 image with PixelSamples 4x4, but with subpixel output, would generate a 2560x1920 unfiltered image.

Note that this option does not work with arbitrary output variables.

Sample-Resolution, Z-Stencil (Depthmask) Hider

PRMan's normal hiders compute visibility at the image plane; this new hider computes visibility at a frontier defined by depths in a shadow map. The RIB syntax for using this new z-stencil hider is as follows:

Hider "depthmask" "zfile" [""] "reversesign" [0] "depthbias" [0.01]

The "zfile" option, takes a shadow map file (created with txmake -shadow or RiMakeShadow ). This new hider will then cull surfaces which are nearer (or farther) than the frontier defined by the depth values in the shadowmap.

The parameter "reversesign" controls whether z-depths greater than or less than the depth mask are culled. The default value of 0 culls all geometry in front of the depth mask. Setting this parameter to 1 allows the depth mask to be used to cull geometry behind the mask.

The parameter "depthbias" controls the amount of bias applied to the mask. The default for this parameter is 0.01. Raising this value will prevent self-intersection problems in cases where two surfaces are extremely close.

NOTE: The shadowmap passed to the depthmask hider must be at sample resolution (See subpixel output above).  This means the width of the shadow map must be the width of the image being produced by the hider times the x-component of PixelSamples. Similarly, the height of the shadow map must be the height of the image being produced by the hider times the y-component of PixelSamples. If these conditions are not met, the result is undefined.

RiPoints Improvements

RiPoints are now rendered as single "microdisks" instead of double micropolygons — in other words, they are now true disks instead of hexagons. This representation is more efficient: in a scene with lots of points, ~20 % savings in total render time was seen for heavily motion blurred shots and ~40% for large DOF/motion blur settings.

Also, since half the number of MPs need to be generated, and in the MB/DOF case, the extra information carried around per microdisk is less than the equivalent micropolygon, memory devoted to MPs alone should be reduced by at least 50%.

Improved facevarying on Subdivision Surfaces

A new interpolation method has been implemented for facevarying data attached to subdivision surfaces. This new scheme preserves part of the old behaviour: it maintains discontinuities in facevarying data on adjacent faces, as well as preserving the interpolation of such data right up to the edge of these discontinuities. However, at the same time, continuous facevarying data is now smoothly subdivided across adjacent faces. In other words, this method avoids the linear "kinks" often seen in the old facevarying method, even where the facevarying data was continuous.

The new method is enabled by default. To revert to the old method, a new tag has been added to subdivision surfaces: facevaryinginterpolateboundary. This tag accepts one integer argument. A value of 0 selects the old-style method, while a value of 1 selects the new, smoother method. As well, the default behaviour for subdivision meshes which do not have this tag can be controlled through the rendermn.ini setting /prman/catmark/facevaryinginterpolateboundary; setting this to 0 or 1 will set the same behavior by default as described above.

Lossy Compression

Lossy floating point compression for texture maps is now supported. Usage of this command is as follows:

txmake -lossy -float input.tif output.tx

The output texture is stored in a new format that should provide better compression for floating point textures while still preserving much of their dynamic range.

Lossy textures aren't backward compatible: if you try to use them with earlier releases of PRMan you will get an error. If you specify -lossy with non-floating point textures, the argument is silently ignored for now, but other lossy compression schemes may be implemented in the future.

User-Specified Mipmap Levels

The user can now specify what is inserted into each level of the mip-map through the -usermipmap option to txmake. Usage of this command is as follows:

txmake -usermipmap picnames txtname

The files in picnames correspond to the levels in the pyramid (first name in picnames = highest resolution level of the pyramid). Note that there are several rules for generating these "user mip-maps":

Extreme Motion Depth of Field Blur

In some cases where a large amount of motion blur is used with depth of field, sampling artifacts could cause an undesirable result. A new flag, "extrememotiondof," has been added to the hider to improve sampling accuracy in these cases. Usage of this parameter is as follows:

Hider "hidden" "extrememotiondof" [1]

This flag causes a slower but more accurate sampling method to be used to alleviate the artifacts. Due to the performance degradations of this sampling method, this flag should only be used when necessary.

Shader Compiler Optimizations

The shader compiler now applies additional code analysis and optimizations to shader source code when creating executable shaders. The resulting reduction in "dead code" improved reuse of temporaries will improve the run-time resource utilization for complex shaders.

Handles As Strings

RtLightHandles and RtObjectHandles can now be cast to RtStrings in all contexts. In the case of lights, the value of the RtString will be the same as the string handle supplied in RIB (if the light was created that way). In addition, an RtLightHandle can now be synthesized from an RtString; the string value (not the blind handle address) will be used to decide which light is illuminated. This is useful for being able to call RiIlluminate on a light in an DSO without requiring the actual RtLightHandle returned from RiLightSource.

Also, when a string value in RI_HANDLEID is passed to RiLightSource in a DSO context, the RtLightHandle returned is guaranteed to have the same string value.

Miscellaneous Changes and Bug Fixes
Geometry Raytracing Global Illumination Shading Language Texture Maps Other

PRMan 11.5.1 Changes

PRMan 11.5.2 Changes

PRMan 11.5.3 Changes



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