RPS 13.0 Release Notes

PhotoRealistic RenderMan 13.0

Release Notes

Multithreading | New Features | Performance Enhancements
Deprecated | Miscellaneous | Changes since 13.0

Welcome to RenderMan 13!
This release represents a major milestone on the evolutionary path of our world-renowned rendering technology. Here are the highlights of Release 13. Follow the hyperlinks to learn more details behind the new features.

Multithreading Is Here!
The arrival of consumer 64-bit "multicore" architectures has resulted in render-node-economics where RAM is a considerable fraction of the cost. In order to maximize pixels-per-dollar you need to assign more processors to each megabyte — and this is the promise of multicore and multithreading.

Release 13 introduces a new prman option -t:n to govern the processor utilization of a single prman process. The primary advantage of multithreaded rendering over multiprocess rendering (as embodied in our netrender and -p:n modes) pertains to memory consumption: prman -t:2 will usually consume much less memory than prman -p:2 while producing similar speedups. As with multiprocess rendering, our multithreaded implementation exhibits a varying degree of acceleration that is highly dependent on the characteristics of your scene. Generally, frames dominated by shading expense are expected to perform well, while frames with little or no shading (shadow map generation is the best example) are expected to gain little in multithreaded rendering. To obtain the best throughput for a collection of frames it remains time-optimal to assign a single prman process with a single thread of execution to a single CPU; however, we expect the complex economics of "renderfarming" will rapidly propel many customers toward adopting our new multithreading mode.

For best results, we advise that all old-style RSL plugins be ported to the new format and validated to operate in a thread-safe manner. To minimize the impact on legacy RenderMan pipelines, RenderMan 13 can be run in single-threaded mode and still offer significant advantages over prior releases. The venerable multiprocess modes remain available and viable in Release 13. Finally, our license accounting policy remains unchanged: prman will consume a single license for each pair of processors utilized.

Major New Features

  • Brick Maps as Geometry — now you can bake your geometry into brick maps! Brick maps can be displacement mapped, motion blurred, etc., like other geometric primitives. Shading results can be baked into the brick map, or shaders can be run on the brick map geometric primitive. Applications include automated complexity reduction, level-of-detail generation, faster color bleeding, and more!
  • Fast Approximate Occlusion and Colorbleeding — you can compute high-quality approximations of these "Global Illumination" effects without ray tracing. This makes these effects more affordable than ever — even on the largest scenes.
  • SIMD RSL Plugins — this new interface for shader function plugins supports SIMD (single instruction multiple data) operation across multiple shading points. This interface is sleek and efficient and includes hooks for iterating over the shading points, elegantly expressing thread safety, and managing custom cache lifecyles. All old-style plugins should be converted to the new plugin format as this may be required to guarantee thread-safe operation.
  • Implicit Field Plugins — this new plugin type allows developers to extend the RiBlobby primitive with custom field functions. We provide a plugin for Maya's fluid files that should make an excellent example for developers and a useful tool for users.
  • Wavelet Noise — in a SIGGRAPH 2005 paper, Pixar's own Rob Cook and Tony DeRose showed how to attain higher quality fractal patterns though application of wavelet theory. Here's the implementation!
  • XML Statistics — we've overhauled the per-frame rendering statistics. This opens new doors to understanding how your scenes can be optimized and suggests brand new data-mining applications.
  • Shader Profiling — prman can now generate profile dumps of your shaders. Coupled with the new XML scene statistics, you can achieve deep insight into the hot spots in your scene.
  • Realistic Camera Lens Effects — Lens Aperture (Bokeh) produces more realistic blurring patterns for depth-of-field effects. Shutter Opening controls the timing of the shutter to produce interesting motion blur qualities.

Major Performance Enhancements

Retired or Deprecated Features and Systems

Miscellaneous Changes and Bug Fixes



PRMan Changes between 13.0 and 13.0.1

New Features

  • librib now offers simple controls over the style of the ASCII representation. This can be controlled in the following ways:
    • "C" function call:
      RiOption("rib", "string asciistyle", &style, RI_NULL)
    • Environment variable:
      RIASCIISTYLE style
      where style is a comma-separated list of flags controlling the style.
    Currently we support two flags:
    • "indented" — introduces a number of tab characters prior to Ri requests indicating the depth of block nesting.
    • "wide" — prevents introduction of intra-request newline characters. This results in a single ascii line per Ri request.
    So "indented,wide" enables both new features.

    The default ASCII RIB representation remains “unindented,skinny” (left-margin aligned, with approximate line-length enforced).

Enhancements

Bug Fixes

  • It is no longer necessary to set Attribute "cull" "hidden" 0 to avoid bucket-sized rendering artifacts when rendering semitransparent volume brick map gprims with the "null" surface shader.
  • Fixed missing baked grids. This bug only occurred for meshes with a mix of clockwise and counterclockwise vertex order, and only when bake3d()'s "interpolation" parameter was set to 0.
  • Wavelet noise (wnoise()) now uses the correct space for the default projection along the normal.
  • A bug that caused PRMan to crash when rendering textures larger than 10K x 10K has been fixed.
  • Certain differences in the orientation of curves between 13.0 and previous versions have been eliminated.
  • A thread safety issue with ray tracing displaced NURBS has been fixed.
  • Overloaded plugin functions with output arguments no longer generate spurious errors.
  • A bug that caused incorrect orientation of blobby primitives has been fixed.
  • A bug that sometimes caused PRMan to crash when transmissionhitmode was set to "shader" has been fixed.
  • Certain issues with CSG when using RiProcedurals have been addressed.
  • Running occlusion() and indirectdiffuse() with "maxerror" 0 on triangular grids no longer crashes PRMan.
  • textureinfo "exists" no longer produces error messages.
  • Tuple/matrix component assignments can now be used as expressions.
  • A memory leak in the shader profiler has been fixed.
  • RslPlugin matrix iterators now handle varying matrices correctly.
  • A bug in the Statistics stylesheet that affected multi-frame rendering statistics has been fixed.
  • texture3d() now correctly returns a valid result if the file was not found.
  • Array initializers with too few elements are now properly detected for all variables and shader arguments.
  • Fixed run-time typechecking for message passing of arrays.


PRMan Changes between 13.0.1 and 13.0.2

New Features

  • Point-based approximate ambient occlusion and color bleeding now supports environment illumination.
  • The memory usage statistics now includes a sum of the measured per-subsystem memory usage. The XML layout of the memory statistics has also changed slightly: the system memory stats (e.g. heapMemory, peakResidentSize) moved from the "system" section to the "memory" section, and the "name" attribute of the subsystem memory statistics changed from "memstats" to "subsystems".
  • The statistics XML stylesheet has been updated. Be sure to update any copies of the stylesheet made during previous installations (e.g. because of the cross-filesystem path issues discussed in the statistics application note).
  • An RSL plugin function can now receive a uniform variable as a varying output parameter (unlike in RSL functions). This eliminates the need to create overloaded variants of a function to accept both uniform and varying outputs. This change does not affect the safety of existing plugins that use iterators, since incrementing the iterator for a uniform value has no effect.

Enhancements

  • Users can now choose deep shadow compatibility. Setting /prman/deepshadow/version 2 in rendermn.ini allows for the generation of maps that are compatible with version 12.5.
  • The performance of Option "shutter" "clampmotion" [0] has been improved.
  • The shader compiler now automatically detects the use of a varying index with a string array.
  • Error handling when memory is exhausted has been improved.

Bug Fixes

  • Fixed a buffer overrun that could cause a crash when calling normalize() on an implicit surface.
  • The "else" branch of an "if" containing a "break" did not always execute correctly (e.g. "while (...) { if (...) break; else print(P); }" sometimes printed the wrong points).
  • Interior shading of moving RiPoint clouds with vpvolumes was occurring at an incorrect "P". This has been fixed.
  • Built-in AOVs of scalar type are supported again.
  • Fixed an issue with curves that could potentially cause a buffer overrun.
  • A bug with ray-traced procedurals has been fixed.
  • An issue related to facevarying interpolation near vertices with one incident facevarying sharp edge has been fixed.
  • Fixed string array equality shadeops.
  • Fixed an issue with RslArg type query methods that prevented vararg plugin functions from distinguishing between colors and points, etc.
  • Fixed an issue with trimmed grids that was causing incorrect AOV outputs.
  • Fixed a problem with shader meta data containing newlines (Windows only).
  • Fixed a shader compiler bug pertaining to illuminance loops with an empty body.
  • Fixed a bug that caused shader definition memory to be reset to zero if a plugin that linked with the "sloargs" library code was loaded.
  • Fixed a photon tracing bug that caused geometric normals to be overwritten and, consequently, resulted in incorrect bias directions.
  • Fixed a slowdown related to certain implicit DAGs.
  • Statistics reporting has been disabled during prman crashes caused by memory corruption, thus preventing a deadlock condition at exit.
  • Fixed artifacts in illumance loops with an angle of PI.
  • The renderer no longer repeatedly attempt to locate missing shader definitions.

PRMan Changes between 13.0.2 and 13.0.3

New Features

  • The bake3d() parameter 'displaychannels' can now select a subset of the listed parameters to be baked.
  • Two new methods have been added to the RslArg class in the RslPlugin API:
    • IsNormal checks whether an argument is a normal.
    • IsWritable checks if an argument is writable.
  • The shader compiler now emits a warning if a shader relies on the input values of uniform output parameters, which are not always initialized. The warning can be disabled by preceding the parameter declaration with #pragma nolint 1.
  • Plugins can now be opened with RTLD_GLOBAL. If a plugin has a .sog extension, PRMan will use RTLD_GLOBAL to open it if the value of .ini setting /platform/linux/rtldglobalextension is sog or .sog.

Enhancements

  • Increased the accuracy of rasterization in point-based global illumination. This change results in a significant reduction of artifacts at the edges and intersections of objects in point-based ambient occlusion.
  • A warning is now reported if an array parameter with an unspecified dimension is bound without a RIB type declaration, and the array length is set to zero.
  • Array length mistmatch warnings during RIB parsing are now more detailed.
  • Exception handling has been greatly improved.

Bug Fixes

  • Fixed a point-based color bleeding crash. Checking for degenerate point positions (many points at the same position) is now more flexible with regard to the floating point range.
  • Statistics are now disabled if the the file cannot be opened. Prior to this change, this circumstance could lead to a crash.
  • Soft shadows were incorrectly indexing min-max shadow maps, causing soft shadows to be wrong. Soft shadows now correctly match 12.5.4.
  • Addressed a sporadic soft-shadow crash when accessing min-max shadow maps at boundaries. Some rare issues remain unresolved when rendering in multithreaded mode (modes other than -t:1 or -p:n).
  • Fixed a vpvolumes crash when using additive Interiors within primitives having differing user-variables.
  • Fixed an inconsistency with ray-traced NURBS patches.
  • Fixed an issue with ray-traced implicit surfaces that caused P, N, dPdu, dPdv to be wrong.
  • Fixed a bug in the shader compiler that allowed an input shader parameter to be written by a function that declared it as an extern.
  • Fixed a bug in the shader compiler that inadvertently allowed a scalar to be intialized to an empty array.
  • Fixed a bug in the shader compiler that was generating incorrect code for float-to-vector and float-to-normal transforms, e.g. vector "shader" (1).
  • Fixed a bug that prevented brick map user-defined primitive variables from being accessible as parameters of a shader.
  • Brick map primitive variables of type point, normal, or vector are now in the correct space when bound to shader parameters.

PRMan Changes between 13.0.3 and 13.0.4

New Features

  • New parameter for the point-based indirectdiffuse() shadeop and ptfilter -colorbleeding — "sortbleeding". When this parameter is 1 the colors are sorted according to distance and composited properly. This means that the color bleeding from any given direction will be from the nearest object in that direction, not a mix of near and far colors. It also makes shadows near black objects darker. The point-based color bleeding computation is approximately 30% slower when this parameter is on.

Enhancements

Bug Fixes

  • Fixed a bug in varying maxdist increment for point-based indirectdiffuse and occlusion.
  • Fixed a bug with wavelet noise in which out-of-bounds access would cause a crash.
  • RiBlobby now accepts mpoints Pref.
  • A rare buffer overrun in the shader compiler has been eliminated.
  • Corrected a duplication of per-shader statistics in the XML stylesheet.
  • Fixed a bug in message passing variable-length array parameters.
  • Fixed a shader compiler bug that could lead to memory corruption when compilation errors arise.
  • The shader compiler now issues a warning if a shader relies on the input values of uniform output parameters, which are not always initialized. The warning can be disabled by preceding the parameter declaration with "#pragma nolint 1".
  • The shader compiler no longer generats incorrect code for float-to-vector and float-to-normal transforms (e.g. vector "shader" (1)).
  • The specularbrdf shadeop was missing a clamp (present in the specular shadeop), which sometimes caused a result of negative infinity at a silhouette.
  • Arrays of implicit parameters can now be longer than 65,535.
  • A bug in the random() and occlusion() shadeops that caused incorrect random numbers to be generated on combined grids is fixed.
  • Fixed a bug that produced incorrect results when querying "geometry:backfacing" in a shader.
  • Fixed a bug in bake3d and texture3d that caused queries with the "cachelifetime" parameter to fail at uniform points.
  • A bug that caused loss of data stored in memory by bake3d using the "cachelifetime" parameter has been fixed.
  • We now compute correct (larger) radii for baked interpolated points from a triangular grid. This ensures that the baked-out point disks cover the grid without gaps.
  • Fixed a bug that caused artifacts at shadow map boundaries.
  • A problem in the construction of the terminal 'P' values for some types of visible-points Interior shading intervals has been fixed.
  • texture3d() no longer changes the values of variables that aren't present in the point cloud file or brick map.
  • Tiff textures > 2^15 on a side work properly.
  • A textureinfo() query for type of a deep shadow map returns the proper string.