RPS 13.5 Release Notes

PhotoRealistic RenderMan 13.5

Release Notes

Introduction | New Features | Performance Enhancements
Miscellaneous Changes and Bug Fixes | Deprecated
Changes since 13.5

Welcome to RenderMan 13.5!

Once again, the latest release is a significant step forward on the evolutionary path of our world-renowned rendering technology. Here are the highlights of Release 13.5. Follow the hyperlinks to learn more details behind the new features.

New Features
  • Shader Objects and Co-Shaders 
    • Shaders can now have member variables and multiple methods. For example, a surface shader can define displacement and opacity methods, and share state with them via member variables.
    • Shaders can call methods and read member variables of other shaders. For example, an illuminance loop can be replaced by a for loop that calls a method in each light shader, and a light shader can call methods in the surface shader.
    • Scene descriptions can now include co-shaders that allow custom shading pipelines to be expressed in the shading language itself. For example, layers of a surface appearance can be expressed as separate shader instances, which are combined by a shader that calls the displacement, opacity, and surface methods of each layer.
  • Multi-Camera Rendering — you can now render a frame from multiple viewpoints simultaneously in a single pass, in far less time than it would take to render the frame in multiple passes.
  • Arbitrary Bucket Orders — you can now choose different bucket rendering orders with: Option "bucket" "string order".
  • Other New Shading Language Features — RSL now features resizable arrays, nested return statements, short-circuiting logical operators, and more.
  • More flexible photon emission and scattering — photon emission and scattering can be controlled by point clouds, making photon mapping possible for more types of light sources and surfaces (for example textured surfaces).
  • pixar.license — The 13.5 release makes use of a new licensing system, which includes a new license file format and a new PixarLicenseServer for floating licenses. Sites will need to install the new server in parallel with their old server if both 13.5 and older releases will be used simultaneously. License "host-IDs" are likely the same as before, with the exception of FlexLM dongle-based IDs, which cannot be supported by the new system. There may be Alfred or other queuing system integration implications when using PixarLicenseServer. Please see the licensing documentation for installation and other details.

Performance Enhancements
  • The performance of multithreaded rendering has been greatly improved. Acceleration of rendering is now less scene dependent (even scenes without much shading now take full advantage of multiple threads). Scalability to more than two processors has been significantly improved. PRMan now renders scenes more quickly in threaded mode than multi-process mode and uses signficantly less memory when doing so.
  • Netrender is now multithreaded — Netrender can now make use of multithreaded rendering on prman-13.5 servers when the “-F” option is given. For example:
    	netrender -F -h salt -h pepper:2 -h salt frame1.rib
    will launch a single 2-cpu prman process on the host “salt” and another on “pepper”. This is in contrast to the usual behavior in which each hostname instance results in a separate prman process on the named server (four total in this example). Processing time with the new coalesce-to-threads mode will be better than individual processes and memory utilization will drop dramatically. Note that the “-F” option requires all rendering assets to be accessible “locally” on the server, through regular file i/o routines (which can include network-mounted files), rather than relying on the netrender client itself to supply RIB, textures, and shaders via rendering protocol. Organizing asset access in this way will itself improve netrender performance, even for single-threaded renders. The older non-coalescing -F behavior is still available via the new “-Fsinglethreaded” option.
  • Ptfilter is now multithreaded — Use the -threads N option to set the number of threads. If this option is not used, the default is mode is single-threaded.
  • Depth of Field is now much faster for objects moving to or away from the camera.

Miscellaneous Changes and Bug Fixes
Geometry
Hiding and Visibility
  • Dithering patterns are now repeatable even with changed CropWindow or bucket order settings. They are also now repeatable in multithreaded runs.
  • A new hider "opengl" has been added which takes advantage of OpenGL acceleration. This hider supports all geometry types, pixel samples, arbitrary output variables (depending on OpenGL implementation), and pixel filter usages. It has limited (inaccurate) support for transparency, trim curves, and deep shadow output. It currently does not support motion blur, jitter, depth of field, usage of depthmasks, arbitrary clipping planes, CSG, matte objects, and visible point shading.
  • The "paint" and "zbuffer" hiders are supported again, and have been improved. Previously, these hiders did not provide support for RiCurves, RiPoints, RiPixelSamples, RiPixelFilter, RiTrimCurve, and crack elimination; this is no longer the case. Motion blur, transparency, jitter, depth of field, arbitrary output variables, depth masking, arbitrary clipping planes, level of detail, CSG, matte objects, and visible point shading are still not supported in these hiders.
  • Hider "hidden" "maxvpdepth" now works as a limiter on visible point memory, and not just as an upper bound on the depth complexity of deep shadow maps.
  • Errors seen when using sigma hiding in conjunction with depth of field or points have been corrected, and the speed improved.
  • A new Attribute "stochastic" "int pointfalloff" [0|1] adds a transparency falloff for RiPoints, which can be shaped with the "stochastic" "pointfalloffpower" option to the "stochastic" hider.
Texture and Shadow Maps
  • The texture() function can now use elliptical filter regions. This reduces blur in extreme cases such as highly warped texture coordinates, grazing viewing direction, or extreme perspective. Set the "filter" parameter to "ewa" (for 'elliptical weighted average') or add the line '/prman/texturefilter ewa' to the rendermn.ini file.
  • Fixed crash during read of invalid texture files.
  • The jittering used during shadow lookups is now properly consistent through multithreaded renders.
  • The RxShadow and RxSoftShadow calls, when used with a single input point, now apply jitter correctly.
  • The Rx texture related functions now handle the same set of parameters as the equivalent texture related shadeops; the added parameters include "filter", "width" and "zlerp".
  • The filtering of highly blurred cube-face environment map lookups has been improved, particularly in the corners and along the cube edges. Previously, the returned result was too dark.
Point Clouds and Brick Maps
  • We now allow more than 64 variables in point cloud files and brick maps. This enhancement required a prototype change in the point cloud API function PtcOpenPointCloudFile(), from:
       PtcOpenPointCloudFile(..., char **vartypes, char **varnames)
    to:
       PtcOpenPointCloudFile(..., char ***vartypes, char ***varnames)
    RMAN_POINTCLOUD_API_VERSION can be used to distinguish between the old and the new API version: it is undefined or 1 in PRMan 12.5 and 13.0, and 2 in PRMan 13.5.
  • If a brick map contains P, N, s and t data and has a shader that calls the texture() function, appropriate texture filter widths will be automatically computed. (In earlier releases, those filter widths would be 0, leading to aliasing artifacts.)
  • Brick map geometric primitives with opacity data can now be used to cast semitransparent ray-traced shadows.
  • Point-based occlusion() can now be used to compute reflection occlusion. Point-based indirectdiffuse() can now be used to compute glossy reflections. Examples can found in sections 2.6 and 3.4 of the Point-based application note.
  • A bug was fixed in the clamping of point-based occlusion() for uniform distribution. Now there is better clamping and hence less over-occlusion. (No change for cosine distribution.)
  • Cosine weighting is now used for voxel data accumulation when rendering brickmaps as geometry which have supplied normals. This eliminates a class of quadrant artifacts.
  • A crash seen when shading brickmap geometry which occured in shaders which access __gdu and __gdv has been fixed.
  • The renderer now provides more comprehensive memory statistics for brick maps and point clouds.
  • Garbage values are no longer copied into texture3d() variables if the lookup failed.
  • Ptfilter's -samplebase parameter for occlusion and colorbleeding has been fixed.
  • brickmake now supports the option -addpn to allow automatic creation of P and N channels in a brick map without requiring P and N channels in the input point data.
  • Duplicate baked grid points (which can occur when netrendering) emitted by the pointcloud driver can be eliminated by setting the parameter EliminateDuplicateGrids to 1 on a DisplayChannel line.
Shading Language
  • Most shader error messages now specify the offending source file and line number (provide the shader was compiled by version 13.0 or higher of the shader compiler). This feature increases shader definition memory by 5-10%, since is requires retention of debugging info. Use 'Option "shading" "debug" [0]' to disable it, or set /shading/debug to 0 in rendermn.ini.
  • Shader objects are cached differently, which might affect shader memory usage. The size of the shader object cache can be controlled by a new option ("shading/objectcache").
  • The compiled shader file format (SLO) has changed. Old SLOs will continue to work, but new SLOs will not work in older versions of the renderer unless they are compiled with the new "-back" command-line option.
  • The shader compiler now typechecks unused functions, which were previously ignored. Functions are now typechecked in the order in which they are declared, rather than the order in which they are called.
  • RSL array initialization is now faster and more compact. Previously an initializer for an array of length N was compiled into N assignment shadeops. Array constants are now used instead.
  • Floating point constants in compiled shaders now have increased precision.
  • Constant folding has been slightly improved in the shader compiler.
  • RSL printf and format strings can now use %i in addition to %d.
  • The global variables "time" and "dtime" are now varying in RSL. For backwards compatibility, shaders that rely on uniform time can be compiled with a new "-utime" command-line option.
  • Fixed a crash that could arise if the wrong shader type is given to RiSurface, RiLightSource, etc.
  • Fixed a shader compiler bug that corrupted arguments for an illuminance loop with an empty body.
  • A displacement memory corruption issue involving displacement shaders with output arguments, which could lead to a crash, has been fixed.
  • Fixed a typechecker bug that permitted assignment of a scalar to an array variable.
  • Fixed a crash that was caused by a fixed-length format string buffer in the printf shadeop.
  • The renderer now warns if lights are called from a displacement shader (or method), or from an opacity, prelighting, or postlighting method. The state of lights (e.g. AOVs and member variables) is sometimes reset between displacement and surface shading, so allowing displacement shaders to call stateful lights can lead to potential inconsistencies.
  • Fixed a message passing bug that affected varying float arrays of length two.
  • Added compiler option "-nolintuov" to disable warning about relying on input values of uniform output arguments. The warning can also be disabled by adding "#pragma nolint" before the argument declaration or use.
  • An optional method parameter whose length is unspecified can now have a default value of any length.
Ray Tracing
  • Constructive Solid Geometry (CSG) is now fully supported for ray tracing.
  • The gather() function can now take an array of explicit ray directions. See the new section "Explicitly specifying gather directions" in the updated ray tracing application note.
  • A special token "*" is now supported by Attribute "grouping" "string membership". Primitives with this membership will be hit-testable by any ray, no matter what the subset of that ray, or even if the ray doesn't specify a subset.
  • An error in the computation of the I vector when shading displaced ray hits has been fixed.
  • Many raytracing pinholes (false ray misses due to floating-point accuracy) were fixed.
  • We now ensure that the I vector can never be (0,0,0) at ray hits. (This avoid NaNs if, for example, dividing by length(I).)
  • Fixed the shading language rayinfo() function for the queries "direction", "origin", "length" which did not always return correct values at all ray hit points. The fixed version will sometimes generate slightly different results than before, even in previously "working" cases; for example directions may be normalized where they were not before. The "origin" query now requires a varying output argument to account correctly for varying "I". Also see the deprecated section below for a way to compute these values directly, likely with better performance.
  • The normals for raytraced RiSpheres computed when the world to camera transform has a negative determinant is now correct.
  • Shading for ray traced NuPatches with u/v parameter ranges outside the range of [0, 1] has been fixed.
Displays
  • Deep shadows can now be output as the primary display.
  • The min, max, zmin, zmax, and average pixel filters now allow pixel filter size greater than 1x1. Note that this may result in differences for scenes that did not explicitly set the pixel filter; output images may now be inheriting the default pixel filter width of 2x2, rather than resetting the pixel filter width to 1x1. An issue with the zmin/zmax filter related to geometry moving in depth has also been fixed.
  • "a" as an AOV now works identically to "a" in primary displays. Previously it obeyed incorrect compositing rules.
  • Issues with OpenEXR display drivers and bugs in libz on Unix platforms have been resolved.
  • The average and max pixel, and all depth filters no longer take into account AOV or depth values from pixel samples which should be considered invisible due to the opacity threshold limit.
Other
  • netrender from 13.0 is not forwards compatible with the new arbitrary bucket order protocol of 13.5. To network render using 13.5, the 13.5 version of the netrender binary must be used.
  • Conditional expressions in RiIfBegin statements now perform a limited “short-circuit evaluation” which prevents look-up failures on the “right hand side” when the “left hand side” definitively determines the conditional state. For example:
    	IfBegin "defined(user:passtype) && $user:passtype == 'shadow'"
    will now successfully skip the "$user:passtype" lookup if the value is not defined in the current context.
  • Stdout is now flushed before an error message is reported to ensure that any earlier output appears in the correct order.
  • Statistics are now generated under most circumstances when prman crashes.
  • On Unix platforms PRMan will generate a statistics file if SIGHUP is sent to the process.
  • A new statistics XML stylesheet is supplied with this release. Newly generated statistics will refer to the new stylesheet, while old statistics will continue to use the old stylesheet. If you use the "statistics/stylesheet" option to specify a different stylesheet, be sure to update it if necessary.
  • The layout of the statistics for some subsystems (e.g. shading) has changed (but not the XML schema).
  • Fixed a bug in illuminance, illuminate, and solar that only arose on trimmed grids and inside varying conditionals.
  • Fixed parsing of DSO paths with windows drive letters.
  • Fixed artifacts in wavelet noise.
  • The system memory statistics reported by OSX builds have been improved to be comparable to other platforms.
  • ScopedCoordinateSystems are now correctly utilized when computing displacement bounds.
  • Resolved a rare threading error that occurred when using RxNoise() and RxCellNoise().
  • Fixed deadlock during reads of gzip ReadArchives.
Deprecated
  • The irradiancecache() function is eliminated. Use bake3d() and texture3d() with "cachelifetime" "frame" instead.
  • The occlusion() and indirectdiffuse() parameters "handle" and "filemode" are ignored. Use bake3d() and texture3d() instead.
  • rayinfo("direction") is deprecated; use normalize(I) instead.
    rayinfo("origin") is deprecated; use P-I instead.
    rayinfo("length") is deprecated; use length(I) instead.
  • Option "limits" "extremedisplacement" and Hider "occlusionbound" have been removed and are no longer supported (or necessary).
  • Attribute "visibility" "camera" and Attribute "visibility" "transmission" no longer support the uniform string versions of the parameters. Any such string values will now be entirely ignored (with a R20042 warning), and should be replaced with usage of the int parameter, and in the case of "visibility" "transmission" possibly supplemented with Attribute "shade" "string transmissionhitmode". For example,
    Attribute "visibility" "string transmission" "opaque"
    should be replaced with
    Attribute "visibility" "int transmission" [1]
    Attribute "shade" "string transmissionhitmode" ["primitive"]


Changes between 13.5 and 13.5.1
Enhancements
Bug Fixes
  • A bug related to the bounding box for multisegment transformation-blurred procedurals, which could result in inadvertently curtailed blur, has been fixed.
  • A bug that could cause the renderer to crash when using a dicing camera without specifying FrameBegin/FrameEnd has been fixed.
  • The -recover mode for display drivers is now functional again. This option works best in horizontal bucket order with the current TIFF and OpenEXR display drivers.
  • An issue with the brickmake and ptfilter utilities that could cause name clashes has been addressed (Windows only).
  • The Lerp parameter is (once again) properly being turned on with Disk and Gaussian filters.
  • Calling RxBake3d() in a DSO clean-up function no longer crashes.
  • Shader class definitions for volume/atmosphere shaders should define a method named volume as their entry point. Using atmosphere as a method name has been deprecated.
  • Fixed a shader compiler crash involving function redefinition.
  • Fixed a bug involving ray-traced shadow calls in new-style light methods.
  • Fixed compiler bug in reporting syntax errors when compiling multiple files.
  • For backwards compatibility, L is now cleared before executing a light.
  • Fixed a bug in sloinfo that omitted the square brackets in the type of an array parameter with unspecified dimensions.
  • Fixed a shader compiler deadlock in certain error conditions (Windows only).
  • The RiShader and RiCamera functions, inadvertently stripped, have been restored.
  • Several deadlocks in procedurals, introduced in the 13.5 release, have been fixed.
  • Fixed a sigmabuffer memory corruption when using AOVs in multi-frame renders.
  • Fixed a memory corruption bug when using netrender to create deep shadows.
  • Fixed an error message to correctly warn when a 13.0 version of netrender tries to render to a 13.5 version of prman.
License 5.0.2
  • License server handling of check-ins from processes that end prematurely has been improved. Servers prior to license-5.0.2 would sometimes cause these seats to remain unavailable for 10 minutes.
  • Recognition of multiple hostids on a single host has been improved.
Changes between 13.5.1 and 13.5.2
Enhancements
  • There is a new parameter to texture3d(): maxdist. When performing a lookup in a point cloud, data points that are further away than maxdist are ignored, and when performing a lookup in a brick map, voxels that are further away than maxdist are ignored.
  • The precision when ray tracing four-sided polygons and polygonal meshes has been improved.
  • The sloinfo utility now accepts shaders with or without a .slo extension.
Bug Fixes
  • Several critical bugs introduced in 13.5.1 related to multithreading, point clouds, ptfilter, bake3d, and texture3d have been fixed.
  • A bug that could cause dsview to crash has been fixed.
  • An issue regarding threading and displacement shaders executed during prehiding has been resolved.
  • Fixed a bug that inadvertently culled objects that take advantage of the midpoint visibility attribute.
  • A bug related to edge conditions in -recover mode that could inadvertently erase fully-rendered images has been fixed.
  • A memory corruption bug with Deep Shadows has been fixed.
  • Several threading deadlocks and race conditions have been eradicated.
  • A change in bake3d density introduced between 13.0 and 13.5 has been rectified.
  • A bug that could cause artifacts with displaced, double-shaded geometry has been fixed.
  • Restored netrender exit status zero for cases where the image completes successfully despite having some unreachable remote servers.
  • The netrender client now waits more patiently for remote prman to clean-up and exit before requesting kill signals from alfserver, alleviating some end-of-frame signal handler problems.
  • A critical bug that could cause a crash when using occlusion() or indirectdiffuse() with a maxdiffusedepth larger than 1 while evaluating shaders at the ray hit points (diffusehitmode = shader) has been fixed.
Changes between 13.5.2 and 13.5.3
Enhancements
  • Memory consumption for texture3d() lookups in point clouds has been significantly reduced.
  • The RSL getshader function now returns the most recently bound co-shader if the specified handle is not unique.
  • Typechecking for the RSL gather statement has been improved.
  • An RslPlugin function table, which is normally named “RslPublicFunctions”, can now be named “mydsoPublicFunctions”, where “mydso” is the base of the DSO filename. This addresses symbol collisions that arise when RTLD_GLOBAL is used.
Bug Fixes
  • A bug that could cause artifacts in secondary outputs from interior shaders has been fixed.
  • Raytracing against polygons/BLPs with no vertex normals when using hitsides "front" or hitsides "back" now provides correct results.
  • A problem with Attribute "grouping" "membership" has been addressed.
  • A bug that could cause a crash when rendering polygons using ObjectBegin/End and ObjectInstance has been fixed.
  • A problem with ray-traced occlusion() environment map lookups when using small coneangles that could cause unwanted blurring has been remedied.
  • Certain performance issues with calls to latlong envmaps when inside a conditional have been fixed.
  • ptfilter no longer crashes if subsurface scattering uses a negative albedo.
  • A bug that could cause a crash when maxdiffusedepth + maxspeculardepth is greater than maxdepth has been eliminated.
  • prman -recover mode now works correctly for CropWindows.
  • A bug that could result in a crash when certain corrupt deep shadow files were encountered has been fixed.
  • NURBS with degree higher than 25 no longer crash.
  • A shader compiler bug that allowed illuminate() to be called with no arguments, which leads to uninitialized L values, has been fixed.
  • Fixed a bug in RiShader that prevented procedurally generated co-shader handles from being matched by the RSL getshader() function.
  • Fixed an RslPlugin bug that could cause a crash when iterating over a varying array of matrices.
  • The statsdiff.py script now functions as expected again.
  • A shader compiler bug that prevented Ng from being correctly updated when assigning P in a new-style displacement method.
  • Fixed a bug that was causing the opacity method to be skipped in a shader that also defines a displacement method if no displacement bound is specified.
  • Fixed a long-standing bug in the RSL illuminance statement that made fetching uniform variables unreliable in illuminance loops inside varying “if” statements. Please note that this fix could introduce image differences.
  • Fixed a crash that could occur when wavelet noise is called with a zero filterwidth.
  • Fixed a compiler bug that prevented methods from being called like ordinary functions from other methods in the same shader.
  • The RSL spline function now accept arrays of knots.
  • A crashing bug related to missing faces on subdiv meshes has been fixed.
  • Fixed a bug that could cause artifacts in shadow maps when using the midpoint depth filter in conjunction with opacity maps.
  • Pixel filters are no longer wrongly clipped against image or crop boundaries.
  • Performance of scenes with empty buckets and/or many arbitrary output variables has been improved.
  • A bug that could cause incorrect alpha values when using shutter opening controls for motion blur has been fixed.
Changes between 13.5.3 and 13.5.4
New Features
  • Users can now assign a float[16] array to a matrix variable in RSL.
Enhancements
  • Memory consumption when rendering in -recover mode has been improved.
  • The Sigma Buffer's handling of non-color AOVs has been improved.
Bug Fixes
  • The handling of rib file names containing spaces or backslashes when using netrender in "-F" (server i/o) mode has been fixed.
  • The renderer will now issue a warning when using subdiv stitch curves to define a stitch between non-motion-blurred and motion-blurred geometry.
  • A bug that could cause varying matrix operations in RSL plugins to operate incorrectly when called inside a varying "if" statement has been fixed.
  • A bug related to attribute edits on hierarchical subdivision surfaces, which could cause the renderer to segfault when executing multithreaded renders, has been fixed.
  • A bug that could cause netrender to stall when rendering stereo images has been fixed.
  • A light caching bug that could cause random highlights to show up in renders has been fixed.
  • A bug that would cause the renderer to crash when rendering deep shadow maps from multiple cameras has been fixed.
  • A bug that would cause the renderer to crash when rendering multiple cameras in a multi-frame RIB file has been fixed.
  • A bug in which a render interrupted twice would not work as expected with -recover has been fixed.
  • A crashing bug when rendering with RunPrograms in multithreaded mode has been fixed.
  • A bug that could cause certain grids to be dropped when rendering motion-blurred scenes that use Option "shutter" "offset" has been fixed.
  • A bug that caused lookups using the attribute() and option() shadeops to fail with arrays of length one has been fixed.
  • A bug that caused renders of multiple CSG objects to fail has been fixed.
  • A threading deadlock bug when using co-shaders has been fixed.
  • A bug that would cause a core dump when an RSL method was called with wrong number of arguments has been fixed.
  • The global shader variables "this", "surface", and "light" were inadvertently varying, which prevented them from being passed as parameters or copied.
  • A bug that could cause netrenders of deep shadow maps to fail has been fixed.
  • A bug that could lead to a crash when executing multithreaded netrenders (or netrenders to multiple hosts) of point clouds has been fixed.