RPS 17.0 Release Notes

RPS 17.0 Release Notes

Welcome to RenderMan Pro Server 17!

Marquee features include fully-realized object instancing, new photon mapping features, and adaptive area shadows. Users can expect to see faster ray-traced curves (i.e. hair), more efficient volume rendering, and better memory usage and grid combining, as well as additional ray tracing speedups, stats improvements, and numerous enhancements from the top to the bottom of the PRMan pipeline.

Speed and efficiency are the central tenets of PRMan 17. Ray-traced curves - i.e. hair and fur - are anywhere from 20% to, in many cases, 2-4.75 times faster. The new implementation of arrays in RSL provides speedups of 20% on average. Further speedups can be found in the new efficiencies in volume rendering and the introduction of adaptive sampling for area shadows. Photon-guided indirect diffuse illumination provides higher-quality results with fewer rays. Memory consumption has been reduced via the new implementation of object instancing, better dicing for curves, and shading optimizations in volumes.

Users should also note that many new features were unveiled in dot-releases to PRMan 16. This will continue in PRMan 17, with Geometric Area Lights and updates to PRMan's Physically Plausible Shading looming in in upcoming dot-releases.


What's New

Object Instancing

PRMan 17 introduces a new implementation of object instancing (retained geometry) that has been designed to deliver vastly improved memory savings, particularly for scenes where many instances of the same heavy geometry are used, and most especially when ray tracing; in very large scenes, reduction of memory by more than an order of magnitude has been observed. The new implementation includes special methods for providing shading variation without giving up memory savings.

New Photon Mapping Features

PRMan 17 includes several improvements to and enhanced uses for photon rendering. These include single-pass photon map generation, transient (in-memory) photon maps, photon-guided indirect diffuse illumination, photon beams for volumes, and a new RSL shader interface for photon emission. Additionally, photon tracing is now multi-threaded. Further information is provided in the New Photon Mapping Features application note.

Faster Ray-traced Curves

The implementation of the curves primitive has been rewritten to provide faster and more memory efficient ray tracing performance. Depending on the scene, users can expect typical speedups anywhere from 2.5 to 8.3 times faster overall performance for ray-traced hair and fur compared to version 16.6, while using between 25% to 55% less memory. See the RiCurves Primitive application note for important additional information on achieving the best ray-traced hair quality and performance.

Additional documentation changes are listed below.

Adaptive Area Shadows

The areashadow() shadeop now adaptively samples the shadow function, using fewer samples in regions of low variance, for faster area shadows, both ray-traced and not.

RSL Arrays

PRMan's implementation of arrays in the RenderMan Shading Language (RSL) has been overhauled, providing significant speedups and efficiencies. Users can expect to see performance increase by 20%, on average. (Note that these performance improvements will require that shaders be recompiled, which will make them incompatible with earlier releases). RslPlugins that use array iterators will also need to be recompiled to avoid a performance penalty; before recompiling, the plugins will have to be modified to eliminate dereferencing array data directly. See the RSL Plugin API documentation for more information.

Volume Rendering Optimizations

Volume rendering in PRMan 17 has been improved in several key areas. In particular, several changes have been made that greatly improve the performance of volumes close to the camera. Visible point memory consumption has been decreased, with the decrease much more dramatic as the number of pixel samples increase; we have upwards of a 10X reduction in the visible point memory footprint of scenes rendered using PixelSamples 11x11. Optimizations have been made to accelerate the hit testing of volumes moving through the camera plane. Finally, a new dicing metric, enabled by default, allows for a large reduction in the number of shading points generated near the camera, resulting in speedups with no reduction in quality.

In addition, RiVolume's default dicing rate is now aligned to the camera, allowing the depthrelativeshadingrate attribute to be more effective. The ImplicitField interface has been extended to allow for better filtering of volumes by DSO writers, plus a new Split method has been added to allow the renderer to focus quickly on interesting regions of the volume. Additionally, volume renders now take full advantage of the radiosity cache for improved performance.


Additional Features

RiProcedural2

There is a new entry point for procedural primitives - RiProcedural2 - that offers more transparent representation of custom data, via standard RI parameterlists, eliminating the need for additional cleanup support from plugin. The Procedural Primitives application note has been updated to reflect this new entry point.

RIB-in-.zip

PRMan now supports RIB-in-.zip - a simple but powerful solution to problems associated with managing a large number of on-disk RIB files.

Plausible Hair

PRMan now provides improved support for hair shading, with a new plausible hair shader and new sampling tools provided via the stdrsl Library.

OpenEXR Updates

  • The OpenEXR display driver now supports writing tile-based files in addition to the default scanline-based files. Tile-based files allow for optimized internal buffering of image data in PRMan, as well as more efficient file read access in all applications that support it.
  • The OpenEXR display driver now provides memory and time usage statistics. Additionally, the display system includes two new display queries - PkMemoryUsageQuery and PkElapsedTimeQuery - that provide a way for custom display drivers to report their own memory and time usage statistics.

New Rix Interfaces

PRMan 17 includes several new Rix Interfaces:

  • k_RixTexture2d - a 2d Texture interface
  • k_RixStats - a RixStats interface
  • k_RixTimer - a RixTimer interface

librix Updates

  • librix now includes a new RIB Parser interface: k_RixRIBParser.
  • librix now includes the subdiv library.
  • librix is now ready for distribution to non-customers and will be freely downloadable via renderman.pixar.com.

stdrsl Additions

The stdrsl Library has been updated with several new header files:

  • Colors.h - provides common color manipulation functions
  • Hair.h - provides physically plausible components for hair
  • HenyeyGreenstein.h - an anisotropic scattering volumetric specular component parameterized by a color and a scattering parameter "g"
  • IsotropicVolume.h - an isotropic scattering volumetric diffuse component parameterized by a diffuse color
  • Logger.h - a simple struct that can be used to log error messages
  • OrenNayar.h - a microfacet diffuse component parameterized by a diffuse color and roughness
  • SampleMgr.h - a component to manage sample reduction up various ray trees

Important Changes and Enhancements

  • There have been significant threading performance improvements to point clouds and brick maps, and their related shading routines, i.e. bake3d() and texture3d().

  • Point-based subsurface scattering is nearly 2X faster. Ray-traced subsurface scattering is faster by about 5%.

  • The ray-traced implementation of areashadow() is now faster.

  • Point-based color bleeding (and volume color bleeding) is now faster. Optimizations have provided speed gains of up to 15%.

  • There is a new option - Option "shade" "int cachemode" - for controlling the behavior of the radiosity cache.

  • PRMan can now perform combined shading on geometry with different object spaces. This new extension of grid combining is controlled via a new attribute:

    Attribute "shadegroups"  "string objectspacecombining" ["true"|"false"]
    

    The attribute is "on" by default ("true").

  • PRMan's plausible environment light has been revised and improved. In particular, the generateSamplesEnv shading function will generate better samples, leading to a significant reduction in noise. This is particularly noticeable with maps that have a very bright area (are highly directional). The improved distribution allows either fewer samples to be taken for the same quality result, or improved quality. In addition, the performance of generateSamplesEnv is improved.

  • Brick map geometric primitives now recognize constant primvars. Uniform, vertex, or varying primvars may be specified, but will be treated as constant, utilizing only the first value provided. Primvar data will take precedence over data in the brick map with the same name. This allows shading variation across many brick map geometric primitives that use the same brick map file.

  • The gather() function can now shoot diffuse rays when executing at a diffusehit point. This enables users to compute multibounce color bleeding with gather(), which can be useful for testing and verification.

  • gather() can now retrieve "primitive:P" and "primitive:N" when using "lighting:irradianceoutside".

  • The "shadingrate" attribute now supports a float[2] variant to set the standard and the volume (depth) shading rates independently. The behavior of Attribute "shade" "float shadingrate" remains unchanged.

  • The generateSamplesAS shading function is improved, with decreased noise and better anti-aliasing for highly reflective, non-rough surfaces. Interplay between the specular samples from generateSamplesAS and the plausible environment light with "distribution","filteredimportance" is improved.

  • evaluateSamplesEnv() now filters the environment map based on the material PDF. Previously the environment map was always point-sampled.

  • There have been several changes that have reduced the user attribute memory consumption, and memory stats for user attributes have been improved.

  • The randomness of random number sequences is totally more random.

  • Memory consumption and its reporting via stats have been improved, in general.

  • There have been improvements performance and memory consumption when rendering polygons, in certain cases.

  • Performance deficiencies in the indirectspecular() function have been addressed.

  • Users can now optionally pass multiple arrays to indirectspecular() in lieu of __radiancesample.

  • indirectspecular() now supports the same send:surface:varname syntax as gather(). If the variable is a varying array it must have the same number of entries as the number of samples, and it will be sent per sample.

  • indirectspecular() and gather() now accept samplesend:, which permits per sample data to be sent. The length of such data must match the length of the samples driving the distribution (materialsamples for indirectspecular(), or direction array for gather()).

  • There is a new optional parameter - "usemotionbias" - for all shadeops that ray trace from a user-provided P (areashadow(), shadow(), gather(), trace(), transmission(), indirectdiffuse(), subsurface(), and occlusion()). It controls whether or not the renderer compensates for motion at the ray origin when samplemotion is turned on. There are three potential values:

    auto (default) - the PRMan 16 behavior
    on - always apply compensation when samplemotion is on
    off - never apply compensation
  • rendererinfo() supports a new query: mode. Possible return values are:

    0 - render
    1 - rerender
    2 - catrib
    3 - "stateful" catrib
    99 - invalid
  • The "label" for renderer-cast rays can now be either "__reyes" or "__camera", and can be queried by rayinfo().

  • There is a new Rx call - RxAttrIdNameStack - which returns a list of names representing the attribute scopes enclosing the current Ri stream position.

  • libdtex supports a new function: DtexMergePixelEx(). This performs a merge, much like the existing DtexMergePixel(), but assumes that it's merging deep comp pixels that may have volume segments. A new overloaded method for DeepPixel::Merge() provides the same functionality to librix.

  • There are two new attributes to control photon scattering depths:

    Attribute "photon" "maxspeculardepth" [-1]
    Attribute "photon" "maxdiffusedepth" [-1]
    

    These are similar to the corresponding "trace" attributes, but for photons. Their default values are -1, which means use the corresponding "trace" values (which have default values of 2 and 1, respectively).

    There is also a new depth control for storing photons:

    Attribute "photon" "minstoredepth" [0]
    
  • There is a new photon shading model: absorbing, for surfaces that neither store nor scatter photons.

  • The following new shading models have been added to control photon scattering in volumes: "isotropic", "rayleigh", "hazymie", "murkymie", "henyeygreenstein:g=...", and "henyeygreenstein:g1=...,g2=...,r=...".

  • The _incidentdir direction stored in photon maps now points in the direction whence came the photon.

  • Extraordinary faces on Catmull-Clark subdivision surfaces no longer force binary dicing.

  • The option() shadeop now supports lookups of "limits:radiositycachememory".

  • PRMan now supports option queries of "shutter:clampmotion".

  • The OpenEXR display driver supports a new option - "int asrgba" - which takes the first four channels of the display and always calls them RGBA.

  • Users can now add arbitrary metadata to OpenEXR headers.

  • txmake can now produce side-band data for use in the control variates method of Monte Carlo integration. OpenEXR and TIFF files are supported.

  • The fidelity of deep opacity and area shadow files for volumes has been improved. Additionally, shadow map file size has been reduced.

  • A statistics entry for the number of continuation rays has been added, as well as a performance warning if a ray experiences more than 200 continuations.

  • Volumes now respect Attribute "trace" "float decimationrate", and can, unlike surfaces, use completely arbitrary decimation rates. Additionally, decimated volumes will still efficiently use the highest level of the GUT cache if possible, providing significant, measurable time savings when decimation is in effect.

  • Since the subsurface() optional parameter "offset" applies to the "diffusemeanfreepath", we now apply the same "unitlength" scaling to "offset".

  • prman's -recover option now works with the tiled format of the OpenEXR driver. Users should note that only the horizontal and vertical bucket orders are supported at this time.

  • Ray-traced indirectdiffuse() and occlusion() with N=0 and distribution "uniform" now sample the sphere, not the hemisphere.

  • The maximum number of input files accepted by ptmerge is now based on the /prman/texture/maxfiles setting in rendermn.ini.

  • The Maya Fluid Cache plugin - impl_mfc.so - has been updated to conform with Maya's new cache format.

  • The PRMan distribution now includes a build of the open-source Alembic Ri proc prim (from Alembic 1.4). It is provided as a convenience; users should refer to the Alembic website for further information.

  • A new attribute() lookup has been added: geometry:outside. This attribute is explicitly varying, and allows one to consistently determine whether the point being shaded is intended to be used for the outside or inside of a surface. It works consistently whether or not ray tracing is being used, whether double-shading is used, or whether or not the current shading context is being used in a caching context. Moreover, it can be used without double-shading when the geometry is two sided.

  • The default behavior of curves specified without normals has changed. In previous releases, when the current geometry orientation matched the orientation of the current transformation, curves without normals were oriented to face the camera in a left-handed coordinate system, and faced away from the camera in a right-handed coordinate system. In this release, the behavior has changed: curves without normals always orient themselves to face the camera so long as the current geometry orientation matches the orientation of the current transformation, and will face away if the orientations don't match. This behavior makes curves without normals behave akin to quadrics. In practical terms, this means that in a right-handed coordinate system, a ReverseOrientation call is no longer necessary to have the curves face the camera. This new default behavior can be reverted to the old behavior by setting the new Option "curve" "int orienttotransform" to a value of [0], or by setting the rendermn.ini setting /prman/curve/orienttotransform to 0.

  • randomstrat() can now output uniform results.

  • PRMan's exiting behavior from multithreaded renders with "SEVERE" errors or "ERRORs" with the abort handler has been improved.

  • There have been minor cosmetic changes to prman -version reporting.


Important Differences

  • The default ray type fired by the occlusion() shadeop has changed from "diffuse" to "transmission". This can be faster since transmission rays need only run the opacity() method. Warning: This change can result in a slowdown if the "transmissionhitmode" is "shader" but "diffusehitmode" is e.g. "primitive". For the old behavior, set the occlusion() "type" parameter to "diffuse" or change the "transmissionhitmode".
  • In order to accommodate the use of photon maps to guide indirectdiffuse() rays, all photon maps now have two new variables: float _incidenttype and float _diffusedepth. For details, please consult the application note.
  • There has been an important change to the renderer's approach to shading and caching at specular ray hit points. The specularlighting() shader method is no longer called as it turned out to only provide speedups in very rare cases and more commonly slowed rendering down. Instead, the lighting() method is now called at specular ray hit points (and the result is not cached). (There are no changes for diffuse rays: the diffuselighting() method is still called at diffuse ray hit points and the results are cached in the radiosity cache, providing very significant speedups for color bleeding calculations.) For details, please see Pixar tech memo 12-06.
  • The version number of the RiFilter interface has been incremented to 11 with the addition of new Ri routines for instancing and procedurals. As usual, most RiFilter plugins compiled against an older version of the interface will continue to work with the current release, but the converse is not true.
  • The deep shadow file version has been incremented to 6. New deep compositing images that might have flagged volume segments will use this new version number; this will cause dtex clients linked against PRMan 16.x and earlier to reject them. Disabling the volume flagging via rendermn.ini will allow backwards compatible images to be written.
  • The policy regarding continuation rays for non-opaque surfaces for ray-traced subsurface scattering has been changed: now the surface opacity and opacity threshold are ignored. We only shoot SSS continuation rays if the continuationrays parameter is set (and shoot them independently of the surface opacity).
  • The default ray label for rays shot by the subsurface() function has been changed from "subsurfaceray" to "subsurface".
  • Scale-adaptive deep file compression (via Option "limits" "float deepshadowdeptherror"), which was off by default in PRMan 16.5, is now on, with a value of 1.0 by default.
  • Option/Attribute "trace" "float decimationrate" has been changed to "int decimationrate". For backwards compatibility, float is still supported.
  • The renderer now uses a stricter interpretation of the archive searchpath; if "./" is not in the archive path the renderer will not load archives relative to the current directory.
  • There have been minor changes to the computation of ray-traced subsurface scattering that could cause differences in rendered results.
  • Several legacy "old school" shaders have been updated:
    • indirectsurf and indirectlight have a new parameter - "maxvariation" - with a default value of 0.02. In earlier releases, this parameter was unspecified, so the irradiance interpolation would fall back to a different (less optimal) type of interpolation that was controlled by the "maxerror" attribute (which has a default of 0.5). As a result of this change, scenes with indirectsurf and indirectlight might render slower, but will give more accurate results.
    • The aachrome shader has a new parameter: specularcolor. The default value is white.
  • RxBake3dV() has been changed so that if you pass "coordsystem" "_disable" when you call it (the first time) it writes the identity matrix in the world-to-eye transform (and the corresponding default camera transform) in the .ptc file header.
  • The renderer no longer checks for NaNs during RIB generation by default. NaN checking can be re-enabled by setting the environment variable RIDEBUG or Option "rib" "int debug" to 1.
  • The renderer will now open plugins that do not use the conventional .so or .dll extensions.
  • On Windows, PRMan 17 requires that the Microsoft Visual C++ 2008 runtime library be installed. The runtime library can be downloaded from Microsoft. PRMan 17 will not run without this component.

Important Licensing Change

This release introduces important changes to the licensing behavior of the software that users need to be aware of, though, in most cases, users will not need to do anything - the change is handled by the installers. For details, please check the installation documentation.

Important OS X-only Change

RenderMan.app is no longer part of the distribution. As a result, RPS now installs (by default) into /Applications/Pixar/RenderManProServer-<version>; users should update their environment variables and paths accordingly.


Bug Fixes

  • Most double-shaded geometry now works correctly with ray tracing and with the radiosity cache, with and without displacement. The exception: displaced double-shaded curves, implicits, brickmaps, and points will not work correctly. This change may result in inverted normals on double-shaded geometry compared to prior releases, particularly in situations where the current coordinate system is right handed.
  • The quality of multi-lobe specular results has been improved, particularly for tight reflections, etc.
  • Curves now always return a result of 0 from occlusion() if the maximum ray depth is exceeded; previously, if the normal argument was (0,0,0) they would return 1.
  • PRMan now enforces uniform policy for variables across both the "ribparse-time" substitution and the IfBegin evaluation system. The former didn't explicitly support unqualified user variable lookups, and the latter didn't support environment variable fallbacks.
  • Addressed an error that could occur when writing very large parameter blocks.
  • Several issues with the Python binding of PRMan have been addressed:
    • Fixed a bug that could lead to a crash when calling ObjectBegin/ObjectEnd in rendering mode.
    • Fixed a bug that prevented ri.ReadArchive from accepting a callback function.
    • Fixed a bug that could lead to a segfault on RiSurface calls with parameters that are not declared.
    • Fixed a bug that could lead to errors when loading the PRMan Python binding.
  • Fixed a bug that could lead to a crash when attempting to catch NuPatch in a Python-based Rif plugin.
  • The accuracy of certain XML stats has been improved.
  • Issues that could arise when using older versions of RiFilters have been addressed.
  • The stdrsl shaders included in the distribution have been subjected to minor updates and bug fixes.
  • Fixed a motion blur/depth of field bug affecting the stochastic hider that could lead to objects moving significantly in Z to be dimmer than they should be.
  • The getpoints() shadeop now properly applies the "coordsystem" parameter to both the directional and scalar components of the input filterregion.
  • Multi-segment transformation motion blur used in conjunction with shading frequency set to "frame" is now more memory efficient.
  • Fixed spurious errors for pdf/premultpdf and rayconeangle that could occur when passing variable length arrays to gather().
  • Fixed a Windows-only issue wherein prman would not exit properly if it was started without any command line arguments.
  • Fixed a bug that could cause a crash when using ImplicitField EvalFiltered with fieldfunction refinement with RiVolume.
  • Fixed a bug that could lead to artifacts when using indirectdiffuse() inside a volume.
  • The tendency toward noisy results in ray-traced subsurface scattering has been reduced.
  • Fixed a hiding/grid combining bug that could result in NaNs if random() were called in displacement shader before being called in a surface shader.
  • Fixed a bug that could lead to a radiosity cache-related crash when rendering a polygonal mesh.
  • Fixed a bug in gather()'s random context; random number sequences should be vastly improved.
  • Fixed a netrender bug that could cause the dspysrvr to crash when processing a RIB with a Display call that has a string array at the end.
  • Fixed a bug in the computation of cone sample axes that could result in NaNs.
  • writeaov() now behaves as expected in the face of multiple Displays with the same AOVs, i.e. it no longer returns incorrectly black data if more than one AOV of the same name matches.
  • Fixed a bug that could lead to a crash when using Option "shading" "int debug" [2] with "plausible" shaders (specifically those that use the directlighting() method).
  • A bug that could cause photon emission to crash with motion-blurred lights has been addressed.
  • Fixed a bug that could cause incorrect data to be passed to the AOVs in deep texture files.
  • The renderer no longer assumes that empty arrays are float arrays.
  • Fixed a bug in the initialization of point cloud bounding boxes that prevented bboxes smaller than [0,0,0] - [1,1,1].
  • A bug that could cause a crash when using indirectdiffuse() with motion-blurred brickmap geometry has been fixed.
  • Addressed a bug that could lead to a crash when using varying maxdist.
  • A bug wherein setting a decimationrate of 0 could lead to a crash has been addressed.
  • generateSamplesAS and evaluateSamplesAS now antialias the highlights when adjacent specular lobes on a grid might miss a small light source. This reduces noise on surfaces like Chrome in regions of high curvature.
  • Several issues that could lead to artifacts in the Ashikhmin/Shirley implementation, particularly with generateSamples, have been addressed.
  • Fixed a bug that could lead to artifacts when using indirectdiffuse() inside a volume.
  • Fixed an opacity cache bug that could lead to artifacts when rendering ray-traced polygons.
  • Fixed a bug in gather()'s random context; random number sequences should be vastly improved.
  • A bug that could cause artifacts in motion-blurred volumes has been fixed.
  • Fixed a deep shadow output bug wherein values that were important to the deep shadow function could be compressed erroneously, leading to insufficient data in the function and artifacts in the final render.
  • Fixed a bug in stdrsl's displacement method.
  • Fixed a bug that caused the intensity of subsurface scattering to be too low by 10-15%. Note that this means that subsurface scattering (both point-based and ray-traced) will be 10-15% brighter in typical scenes.
  • Addressed latencies that could occur when quitting/aborting the raytrace hider or re-renderer.
  • Fixed a bug that could lead to a crash when ray tracing polygon meshes with a stereo camera setup.
  • Fixed a bug that could lead to faceting artifacts when ray tracing object-instanced NURBS.
  • Fixed a bug that could lead to segfaults in areashadow() on volumetric, disconnected, and irregular grids.
  • A bug that caused only the red channel of a color sample to be used to compute the spherical harmonic coefficients; all channels should be used.
  • Fixed a crash in ray tracing of brickmap gprims with P and N data where the N data are (0,0,0), i.e. volume data.
  • texture3d() now returns errorcode 5 - "the requested data do not exist in the brick map" - if the requested data do not exist in the brick map.
  • Fixed a bug that could lead to a crash in point-based volume indirectdiffuse().
  • A bug wherein cache data might not be computed at the end of a motion segment has been addressed.
  • Fixed a bug that could prevent netrender from working with Tractor.
  • Addressed an issue that could result in trace bias artifacts on subdivision meshes when using depth of field.
  • Fixed a bug in the types for the Python argument list that could lead to a crash when filtering MakeLatLongEnvironment calls.
  • Addressed memory leaks, particularly when using the raytrace hider/re-renderer.
  • Fixed a bug that could cause the raytrace re-renderer to crash when using AOVs.
  • The multires display now sends all user parameters to all open LOD images.
  • A bug that could lead to a crash if a filename was not provided to the deepimage driver has been addressed.
  • Several issues with the dsview utility have been addressed.
  • Fixed a bug that could lead to grid artifacts in area shadows.
  • Fixed a bug in the computation of bounding boxes that could adversely affect performance.
  • A bug that could cause a crash if a texture file is not found has been fixed.
  • Fixed a bug that caused the constant-folded version of mod to produce incorrect results.
  • RiVolume now returns the correct transmission() result when Attribute "shade" "transmissionhitmode" is set to "primitive".
  • A bug that could lead to unexpected white artifacts when using the raytrace hider has been addressed.
  • A bug that could cause getpoints to return the wrong value within varying conditionals on ray hits has been fixed.
  • Fixed a bug in the shader compiler that incorrectly allowed readprimvar() to read uniform results (note, uniform strings are an exception to this rule; however, this will impact grid combining performance).
  • The renderer now prints a warning if no photons are stored at the end of a photon tracing pass.
  • Fixed a Display bug to prevent invalid channel specifier from causing an infinite Xcpt loop.
  • Fixed a Windows-only issue wherein prman would not exit properly if it was started without any command line arguments.
  • A division by 2pi in the plausibleVolume shader has been corrected to 4pi. This will change the results of using plausibleVolume, but is the correct answer.
  • Fixed a bug in areashadow() wherein the default visibility could be incorrect if there was no work to do (e.g. terminated on ray depth, or during photon scatter, et cetera).
  • Fixed a bug that could lead to a crash when ray tracing polygon meshes with a stereo camera setup.
  • Fixed a bug that could cause prman to crash when using a secondary camera Display call in a scene that bakes out a point cloud.
  • A bug that could lead to a crash when ray tracing brickmap gprims has been fixed.
  • The raytrace hider now correctly backface culls Sides 1 objects.
  • The accuracy of rendered volumes clipped by opaque geometry has been improved.
  • Issues with ray-traced overlapping volumes which themselves overlapped a surface have been addressed.
  • A bug that resulted in spurious empty files on disk when an empty string was passed to RiArchiveBegin has been addressed.
  • Fixed a bug that could lead to a crash when rendering brickmaps when using a high decimationrate Option.

Users are strongly encouraged to consult the RPS 16.5 release notes for more information about recent changes, including additional features, important changes, and bug fixes.


Changes in 17.0_1118139

Bug Fixes

  • $RMANTREE/lib/rsl/include/stdrsl/SpecularAS.h has been updated to to address an unexpected performance regression, at the cost of some added noise.
  • Fixed a bug that could cause unexpected differences in volume deep shadow maps.

Changes in 17.0_1131545

Miscellaneous Changes

  • There have been improvements to ray-traced subsurface scattering, providing more accurate results and reduced noise.
  • REYES statistics for instancing have been improved.
  • txmake now supports a -t argument on the command line, allowing a user-specified number of threads.
  • Added support for option queries of "hair:spatialgrouping" and "curve:orienttotransform".
  • Extended raydifferentials() shadeop to optionally take a string parameter and/or return a negative parametric vector.
  • Ray-traced subsurface() can now take an optional "bias" parameter.
  • The photon paths of photons emitted from point clouds are now more random.
  • Ray differential calculations for RiVolume have been improved.

Bug Fixes

  • Addressed an issue that could lead to a crash when hair dicing is disabled.
  • Brickmaps as object instances now work as expected; a bug that could cause artifacts on instanced brickmaps has been fixed.
  • Fixed a bug that could result in incorrectly computed photon scattering distance inside volumes.
  • Scattered photons now correctly use the position from which the photons are scattered as their origin.
  • Fixed a ptfilter -photonmap crash/hang if a photon map estimate found no nearby photons.
  • Fixed a bug in indirectspecular that could cause artifacts on geometry with a uniform N primvar.
  • Fixed a bug that could inadvertently cause the refinement method to be be called twice.
  • Fixed a bug that could cause netrender to wedge.
  • Fixed a bug that could cause ray-traced subsurface scattering to determine its "outsidedness" incorrectly.
  • Fixed a bug wherein txmake would compute the wrong starting channel for creating a TIFF image if the input had more than three channels.
  • A bug that could lead to a crash when turning on the "stitch" "traceenable" Attribute has been fixed.
  • Fixed a bug that prevented using multiple single array elements as display channels.
  • Point-based subsurface scattering with the "smooth" option enabled now provides better results for point clouds with fewer than ten points.
  • Fixed a bug that could lead to a crash if the renderer is unable to open an ImplicitField DSO.
  • Addressed an issue with statistics for implicit plugins.
  • Fixed a bug that broke PRMan's ability to read gzipped point cloud files.
  • Fixed a bug that wrote bad data to point clouds when using bake3d() on arrays with grid combining enabled.
  • A bug that could cause a crash when using bake3d()/texture3d() with float[] data and "frame" cachelifetime has been fixed.
  • RixSubdivisionMesh::GetFace(index) no longer returns a NULL face for faces that are on an edge.
  • Fixed a bug that could cause txmake to leave black stripes in very large 8-bit TIFF images.
  • Fixed a bug in the raytrace hider that could cause flipped normals on curves.
  • Fixed an instancing bug that could cause a deadlock if there were more than 4096 masters.
  • Fixed a bug with subsurface() continuation rays wherein "non-hits" were not actually skipped.
  • Fixed a bug in area shadow map lookups that could cause unpleasant artifacts.
  • Fixed a bug that could prevent the refinement method from working properly with polygons or bilinear subdivision meshes.
  • A bug that could lead to a crash when rendering RiCurves with the plausibleMatte shader has been fixed.
  • Fixed a gather() bug that prevented the "maxdist" parameter from working correctly with transparent objects that spawn continuation rays.
  • Issues with the photonmap() shadeop inside a conditional or inside a volume have been fixed.
  • Fixed a bug in the handling of loop meshes with non-2-manifold edges.
  • Fixed artifact and potential crashing issues in recent optimizations for "small-on-screen" subdivision meshes.
  • Fixed issues with bounding boxes computed at the wrong time for RiVolumes using an ImplicitField plugin when Shutter times does not match Motion block times.
  • Fixed a bug that could cause a crash when using deforming bilinear subdivision meshes with __faceindex primvar data.

Changes in 17.0_1145269

Miscellaneous Changes

  • The ptfilter subsurface command line arguments -scattering and -absorption now support the parameter fromfile (similar to -albedo and -diffusemeanfreepath).
  • When taking multiple arrays, indirectspecular() no longer requires a shader argument and now requires only materialsamples:position and materialsamples:direction arrays; all other arrays are optional, although if either materialsamples:materialPdf or materialsamples:materialResponse is present, both must be. The importancecull parameter is also now supported.
  • Points are now much faster to ray trace.

Bug Fixes

  • Brickmaps no longer alter the input argument array when using the C binding.
  • Non-reentrant RiProcedurals (not RiProcedural2) now lock around calls to their free function.
  • A rare subsurface scattering bug was fixed: for materials with very large difference between the 3 color bands for "albedo" and "diffusemeanfreepath", the short-range values of the bssrdf were too small. The fix can lead to changes in the subsurface color for materials with such (very different) values of the material parameters.
  • Fixed a bug in adaptive areashadow() that caused incorrect shadows when using the "perRayL" optional output parameter.
  • An issue that could lead to NaNs when sampling at the pole with generatesSamplesEnv() or evaluateSamplesEnv() has been addressed.
  • A crash that could occur in certain rare situations involving single segment deformation motion blur and a mismatched shutter has been resolved.
  • txmake now correctly handles user mipmaps that are not of float type.
  • A crash involving grid combining of displaced double-shaded geometry has been addressed.
  • Passing NULL arguments to PRManBegin() no longer leads to a crash.
  • A memory leak in texture3d() when reading a pointcloud has been plugged.
  • An issue with incorrect results from areashadow() when using varying numbers of samples with a varying weight vector has been addressed.
  • Attribute "dice" "float mindicelength" now applies to RiBlobby volumes. This may lead to changing pictures for scenes which do not explicitly set mindicelength.
  • An discrepancy with the transmission return values from areashadow() when using low sample counts has been fixed.
  • A memory regression with ray-traced curves observed under certain circumstances has been fixed.
  • An issue that could lead to broken radiosity cache shading when using Attribute "trace" "samplemotion" [1] has been fixed.
  • writeaov() now works correctly with the raytrace hider.
  • The plausibleGlass shader is now more robust in the face of total internal reflection leading to zero-length direction vectors.
  • An interaction between subdivision meshes and shaders with the refinement method leading to undershading has been addressed.
  • Faces with attribute edits on subdivision meshes with frame frequency motion blur now pick up the correct motion blur.
  • Redeclaration of object masters after they have been instanced (a situation peculiar to procedurals) no longer leads to a crash. Note that in this scenario, the redeclaration is silently ignored (even if the definition changes).
  • Scoped coordinate systems can now be varied on object instances.
  • A potential race condition caused by multiple procedurals creating meshes for use by the Rix subdivision API has been fixed.
  • An issue potentially leading to infinite splits on degenerate curves has been addressed.
  • Fixed an issue with uninitialized ray footprints that could lead to NaNs in shader computations.
  • Addressed an issue with curves that resulted in NaNs when trace:decimationrate was not equal to 1.
  • Addressed an issue that could cause spurious R54100 errors.
  • The renderer now calls user-defined free functions in procedurals sooner, in most cases, for prompter cleanup of related data.

Known Issues & Limitations

  • Object instancing-related known issues:

    • The RiBlobby primitives does not correctly instance.
    • Ray-traced RiCurve geometry will not render correctly in the case where no normals are supplied for the curves and Attribute "dice" "roundcurve" is set to 0. For other cases (either normals supplied, or "roundcurve" set to 1) ray-traced curves will be correct.
  • Re-rendering currently works with the new curves primitive implementation only when using the raytrace hider. Also, the new, faster curves primitive implementation is currently enabled for at most two motion samples.

  • Attribute "dice" "float mindicelength" currently only applies to volumes.

  • If using the RtxSVG.so plugin to render SVG textures on Linux, there is a dependency on the older version of libexpat.so.0. This will have to be installed manually on systems that do not already have it installed, i.e.

    yum install compat-expat1.x86_64
    
  • prman's -recover option is only supported for the horizontal and vertical bucket orders with the tiled format of the OpenEXR driver.

Users are reminded to refer to PRMan's Known Issues for additional important information.


Documentation Changes