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
- Irma has been retired work is already underway to develop a new
re-rendering subsystem, but we'll have to unveil that technology
at a later point in time.
- Linux RH 7.2 is no longer supported the poor performance of
lightweight threads on this version of Linux made it clear it was time
to drop it from our matrix.
- Looks have been retired old-style looks (dating back to the early 90s)
can no longer be read by the renderer.
- Old-style RSL function plugins have been deprecated. We recommend
that all point-wise RSL shader plugins be ported to the new SIMD RSL plugin
interface. Old plugins will still function but some may not function properly
in multithreaded runs. If you have lots of point-wise shader plugins you may
wish to run prman in single-threaded mode.
- libtiff and libjpeg are no longer distributed as part of the developer kit.
Miscellaneous Changes and Bug Fixes
- RSL enhancements:
- Points, vectors, colors, and matrices can now be indexed like arrays,
rather than using xcomp and setxcomp, etc. For example "m[i,j]" can be
used instead of "comp(m,i,j)", and "m[i,j] = e" is equivalent to
"setcomp(m,i,j,e)".
- The shader compiler now detects the use of invalid expressions as output
arguments (e.g. constants, read-only shader parameters).
- An array can now specify a single element that is used to initialize the
entire array. The shader compiler now warns if an array initializer
contains too few elements, unless it contains none (in which case the
array is uninitialized).
- Shader plugin function arguments and results can now be arrays of
unspecified size. Shader plugin functions can also accept an arbitrary
number of arguments, e.g. point findmax(point, ...).
- The RSL transform function has been generalized. It now has the
following prototypes, where T = point, vector, normal, or matrix:
T transform([string fromspace,] string tospace, T src);
T transform([string fromspace,] matrix m, T src);
The fromspace is optional and defaults to "current". Calling transform on
a point works as before. When called with a vector or normal it is equivalent to
a vtransform/ntransform call. When called with a matrix,
it returns the from/to transformation
matrix times the given matrix.
- Formal parameters of user-defined functions are now assumed to be varying
if the detail is unspecified. This fixes a bug that allowed
a varying value to be assigned to a uniform variable.
This might impact performance in shaders where uniform
arguments were not explicitly declared as such, since
previously uniform operations might now become varying.
- Shader Meta Data
Comments in shader source code can now specify arbitrary meta data that is recorded in compiled
shaders. The meta data can be accessed via the PRMan SDK, and scripts can use sloinfo
to fetch meta data as XML.
- Added RixInterfaces classes, which are C++ extensions of the Rx library. See the
RixInterfaces
API documentation for more information.
- Rx enhancements:
- New points based versions of RxTexture(), RxEnvironment(), and RxShadow().
- New entry points for reporting user statistics from within plugins.
- Rif enhancements:
- Implemented RIBBound, a new rif plugin
that prints the world-space bounds of a rib file.
- Rif plugins are now able to use
RiTransformPoints().
- libprmansdk.a
now replaces ALL libraries that were part of the developers kit (librib, libtarget, etc.).
- Reduced ray tracing pinholes through binary dicing.
- Gather can now respect geometric sides attributes.
- Brickmake uses less memory and is around 20% faster.
- Brick maps now contain information about the original geometry even where
the data are smooth. This is necessary to be able to render brick maps
as geometry.
- Photon maps now contain diffuse surface colors. This makes it possible
to compute radiosity maps instead of irradiance maps. See the
Global
Illumination application note for details.
- Texture3d() can read data in a different order than the order
in the brick map/point cloud file.
- The shader compiler now requires
-autoplug to find old-style RSL Plugins
- bake3d()
now supports custom drivers, allowing point
and topology information to be written to the format of your choice.
- AOV secondary outputs now
support a prefix, which serves to disambiguate the shader type when deciding which shader to extract
the output data from. This prefix also supports specification of an exact light handle.
- The brickviewer program has a new optional parameter: -multiply.
It multiplies all voxel data values by that value prior to display.
- The functions occlusion() and indirectdiffuse() have a new parameter:
seed. seed
is used to compute the random number sequence seed for hemisphere sampling directions.
- PRMan now checks licenses in and out on a per-frame basis, rather than per RIB file.
Note that this change will not affect the number of licenses consumed, only the checkin/checkout
frequency.
- Visibility states can now be queried via attribute() in RSL.
- Attribute "stitch"
"int traceenable" has been added. This feature helps with crack
elimination during ray tracing.
- Two new Shading Rate attributes,
Attribute "shade" "relativeshadingrate" and Attribute "shade" "resetrelativeshadingrate" have been added.
PRMan Changes between 13.0 and 13.0.1
New Features
Enhancements
- Geometric data (i.e. data of types point, vector, and normal) are now automatically
transformed to world space by bake3d() and back to camera space by texture3d().
- Statistics
options have been updated.
- The ptfilter -colorbleeding output channel name _irradiance
has been changed to _indirectdiffuse. An underscore has been added to the
optional environmentdir channel name for both ptfilter -colorbleeding and
-occlusion results.
- An array initializer can now end with "...", which indicates that the value of the
last element should be repeated to initialize the remaining elements.
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
- Improved brick map rendering quality if a brick map contains P and N data the corresponding brick map geometric primitive is rendered more accurately than before, getting rid of bloat around silhouettes. See the updated version of the application note The Brick Map Geometric Primitive.
- Ray tracing of brick map geometric primitives is twice as fast and uses one quarter of the memory in typical cases.
- Default values are no longer required for shader output parameters, allowing expensive AOV initialization to be avoided in cases where it is unnecessary (e.g. when shading ray hits).
- The shading language query attribute("grouping:membership", resultstring) is now supported when shading at ray hits (i.e. ray depth greater than zero).
- Point-based indirectdiffuse() and occlusion() now obey the "hitsides" parameter. The value can be "front", "back", or "both"; default is "both".
- The ptfilter parameter -backsidesocclude is replaced by the more flexible -sides [front|back|both]. The default is "both".
- The "bias", "samplebase", and "coneangle" parameters are now used for point-based indirectdiffuse() and occlusion().
- Changed ptfilter -progress 2 reporting to a percentage.
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.
Pixar Animation Studios
(510) 752-3000 (voice)
(510) 752-3151 (fax)
Copyright ©
Pixar. All rights reserved.
RenderMan® is a registered trademark of Pixar. |
|