RPS 18.0 Release Notes

RPS 18.0 Release Notes

Welcome to RenderMan Pro Server 18!

RPS 18 is built to provide faster, more efficient, more realistic results for the demands of a modern CG pipeline. This release includes the implementation of genuine Geometric Area Lights, a new path tracing mode in the raytrace hider for interactive rendering, faster and higher quality volume rendering, and new, improved methods for rendering subsurface scattering. Additionally, there are raytrace hider updates that add support for features previously only available via the REYES hider, sampling has been significantly improved, and there has been a complete overhaul of polygonal rendering.

RPS 18 continues a progression of development focused on rendering realism. Realism requires increasingly sophisticated shading and lighting, as well as complex, traditionally "heavy" geometry. Many of the improvements in this release make it easier for users to implement single-pass rendering workflows via the raytrace hider, while simultaneously enhancing the performance of hybrid and/or multi-pass solutions. If memory constraints were dictating a multi-pass approach, the performance improvements for both polygons and subdivision surfaces - memory reductions of 2-5X and 30-50%, respectively - can make a single-pass workflow a viable alternative. Meanwhile, existing multi-pass solutions continue to improve, providing ever more realistic and faster results.

What's New

Geometric Area Lights

RPS 18 introduces new support for Geometric Area Lights, as envisioned in the original RenderMan Specification, but in a modernized context. PRMan's implementation provides the expressivity intended in the original specification, but is also designed to free the renderer from the requirement that shaders be evaluated every time lighting contributions need to be computed, allowing for improved efficiency. Additionally, PRMan's Geometric Area Lights reduce the workload of balancing sample counts over many lights - the distribution of samples between lights is automatically determined from a single budget.

To support this implementation, a new shadeop has been introduced - emit(), which is used to describe the emissivity of a surface to the renderer.

Path Tracing

RPS 18 introduces a new path tracing mode for PRMan's raytrace hider. The new path tracing mode uses a large number of inexpensive but individually inaccurate samples to produce very fast but noisy initial results and then iterates over them to converge on a refined image.

A new Path Tracing in PRMan application note has been added, providing details of the implementation and its usage.

Volume Rendering

RPS 18 brings improved performance for the visibility determination of volumes. Volumes that undergo large deformation motion blur and/or depth of field are faster by default. In addition, a new Ri call - RiVolumePixelSamples - offers independent control of the quality and cost of visibility determination for volumes and surfaces. Since volumes are usually "softer", it is possible to deliver substantial performance gains by selecting a lower pixel sample value for volumes than for surfaces. This call only works with the REYES hider.

Additional volume changes:

  • The intersectinggeometry refinement strategy has been completely overhauled: the presence of any opaque geometry intersecting a volume is now determined solely by ray tracing. While this is much more robust than the previous implementation, it does require that the geometry be visible to transmission rays.
  • Attribute "dice" "minlength" is no longer enabled by default, i.e. it now has a default value of zero. Note this may cause volume scenes that do not set a minlength to slow down compared to 17.0. An alternate computation of a suitable minlength can be enabled by explicitly setting the value of the attribute to a negative number. In this case, the renderer now no longer uses an automatic computation based on the world space bound of the scene; it will use either half the size of a RiVolume voxel in object space, or the new MinimumVoxelSize method of the ImplicitField API. Consult the Volume Rendering appnote for more details.
  • A new implicit field plugin supporting OpenVDB files has been added.

Improved Subsurface Scattering

RPS 18 introduces a new, improved subsurface scattering model called beam diffusion. This new model produces results that look similar to quantized diffusion, but it is faster to evaluate and more numerically stable. Furthermore, beam diffusion supports a single-scattering component for sharper short-range scattering results. The new subsurface scattering model is fully compatible with the previous dipole model, meaning that the ptfilter program and the subsurface() function use the new model with the same parameters as for the dipole diffusion model. As before, the subsurface function can use ray tracing or point clouds. Although the new model is more accurate, there is only a modest increase in render time.

raytrace Hider Updates

RPS 18 includes significant improvements and additions to the raytrace hider. This release brings the raytrace hider into closer parity with the REYES hider with new support for Matte Objects and improved support for AOVs. With these developments, when scenes fit in memory the raytrace hider makes increasing sense for final frames (and not just rerendering).

  • The raytrace hider now uses a method co-opted from the REYES hider to produce better motion blur and depth of field for typical cases. The old behavior can be enabled with the "extrememotiondof" option.
  • The raytrace hider now supports the -recover option.
  • The raytrace hider now supports RiMatte objects.
  • Support for writeaov(), the DisplayChannel's string source parameter, and AOV filtering have been improved.
  • The raytrace hider now generates samples using our new sampling algorithm (see below).

Improved Sampling

PRMan 18 provides improved, unified sampling stratification for the plausible framework, including a new algorithm for generating random numbers/samples. Typically, ~30% fewer samples are necessary to obtain the same quality of results when calculating ambient occlusion, indirect diffuse, indirect specular, ray-traced subsurface scattering, etc. The randomstrat(), generateSamplesAS(), and generateSamplesEnv() shadeops now benefit as well. Details have been published for all the world to see in Pixar Technical Memo #13-01.

Memory and Time Optimizations for Polygonal Meshes

The memory performance of the renderer when ray tracing against detailed polygonal meshes has been improved significantly. Depending on the scene, users can expect anywhere from a 4x to 10x overall memory reduction when rendering complex polygonal meshes. The new implementation ray traces complex polygonal meshes up to 2 to 3 times faster with displacement, and 20% to 35% faster when there is no displacement.

There are two new options for controlling the new behavior - Option "polygon" "int reducedmemory" [0] and Option "polygon" "int nonplanar" [1]. Please consult the Polygon Memory section of the Options reference for complete details.

Changes and Enhancements


There have been several additions to the Rix API:

  • RixAreaShadow - PRMan now includes a Rix interface for area shadows for use in DSOs.
  • RixMemoryPool - shading DSOs can now allocate memory from a pool managed by the renderer using the RixMemoryPool interface. Memory allocated via this interface will be automatically reclaimed at the end of a DSO shadeop's execution or at the end of a full shader evaluation.
  • RixRNG - PRMan 18 provides a Rix interface to the Random Number Generator at the heart of this release's improved sampling, which can be used in dynamic shadeops.
  • RixTexture2d - The RixTexture2d interface now includes support for two new per-face texture (Ptex) methods.
  • RixRenderState - The RixRenderState interface is valid for both proc-prim/Rif states and DSO shadeops, and is the preferred method for option, attribute, and rayinfo lookups (over the Rx equivalents).
  • A new interface RixSloInfo is offered to deprecate the Slo_ extern interface. Please note that it remains true that Slo_ and now RixSlo routines shouldn't be called during a rendering session. Please consult the header file for additional information.
  • The RixInterfaces include two new utilities RiSymbolResolver and RiGetToken.
  • The librix package now includes librixRMANTREE.a, which provides a Rix context associated with RMANTREE to the caller.


  • There is a new shadeop - textureatlas() - which can be used to look up textures comprised of multiple texture maps as produced by paint applications such as Mari, Mudbox, and Zbrush.
  • txmake now creates an SHA1 hash for each output texture. This SHA1 hash is then used by the renderer to only open unique instances of an given texture. Even if the filenames of the textures are different, if they have the same SHA1 hash, the renderer will reuse the texture cache entries from the first unique version of a given texture file.
  • There is a new plausibleSubSurface shader included in the stdrsl library.
  • There is a new, path tracing-savvy sample manager - SampleMgrPathTrace.h - that is included in the stdrsl library.
  • The stdrsl plausible components now support Diffuse Multiple Importance Sampling.
  • The shader compiler now generates more informative error messages when there are problems with the declaration of a function in the DSO.
  • There is a new __computesRefinement parameter, which can be used to tell the renderer whether a shader's refinement method is going to modify the shading rate.
  • There is a new diagnostic shadeop - rbug() - which outputs all points, vectors, or normals to the ptviewer utility during a render.
  • rayinfo supports two new queries - "integrationcounter" and "integrationlod" - which offer shaders access to the path tracer and re-renderer's current state.
  • The gather() shadeop now allows fetching "ray:" values along with "lighting:irradianceoutside" in the same call.
  • The rayinfo() shadeop supports a new "shadingintent" query, returning "cache", "shadegrid", or "shaderay".
  • indirectspecular() now supports the "usemotionbias" parameter.
  • indirectspecular() now accepts a "position" parameter to specify where rays should be shot from; the default is P.


  • The performance of instanced geometry has been improved, particularly when ray tracing very dense polygonal or subdivision meshes.
  • The memory consumption of subdivision surfaces has been significantly reduced. Users can expect to see typical reductions in the "Catmull-Clark subdivision memory" and "Loop subdivision memory" categories ranging from 30% to 50%. In addition, renders involving very dense subdivision meshes should now exhibit better multithreaded behavior.
  • Memory consumption has been significantly reduced and the speed improved for ray-traced RiBlobby implicit surfaces, particularly those that are offscreen but close to the near clipping plane.
  • Ray-traced subsurface scattering now supports adaptive sampling, reducing ray counts by approximately 20-50%.
  • Subdivision meshes with hundreds of thousands of vertexedits (or more) are significantly faster to render.


Statistics have been improved, again and more.


  • We now support RiAttribute/Option-style specification of many standard Ri calls via the Ri namespace, e.g. Attribute "Ri" "color Color" [1 .5 .25] or Option "Ri" "float[4] CropWindow" [0.0 0.3 0.0 0.5], to help simplify Ri support in pipeline tools. Consult the QuickRef for supported attributes and options.
  • RiProcedural now supports Attribute "procedural" "int" immediatesubdivide, which provides behavior equivalent to the RiProcedural2 __immediatesubdivide meta-parameter.
  • PRMan now includes a new RtxIES plugin. This plugin, used by directlighting(), will take a standard IES profile input file and convert it to a single channel float texture that represents the lighting profile. By default it uses Hermite interpolation.
  • option() and RxOption can now fetch "RiHider:integrationmode" and "RiHider:maxsamples".
  • attribute() and RxAttribute can now fetch "volume:depthrelativeshadingrate".
  • sloinfo now supports a new parameter: --metaid=myid will cause sloinfo to return the contents of the single metadatum whose id is myid.
  • The default sizes of several caches have changed: the brick cache is now 50MB, and the octree and point caches are now 20MB.

Important Differences

  • Automatic continuation is now enabled for gather and indirectspecular rays with their type parameter set to a value other than "specular". This may cause renders to incur expense from additional continuation rays that would not have been traced in PRMan 17.x and earlier. It is possible to prevent these new continuation rays from being traced by passing a lower value for the "othreshold" parameter of gather or indirectspecular.
  • Object-instanced geometry that is considered to be excessively detailed (large on screen or very close to the camera) is now automatically converted to a non-instanced representation. It will lose all benefits of instancing (memory sharing with other instances), but will no longer be subject to potential underdicing. All special instancing rules pertaining to attribute scoping and shading continue to apply to these converted "hero" instances.
  • The default value for the proceduralmemory limit - Option "limits" "int proceduralmemory" - is now 0 (zero). This effectively turns off procedural unloading and will affect performance accordingly.
  • Importance culling in gather() and indirectspecular() now culls when importance is less than or equal to the specified threshold, rather than only less than.
  • The version number of the RiFilter interface has been incremented to 12. 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.

Bug Fixes

  • Fixed a bug that could cause grid-wide self-intersection artifacts for ray-traced area shadows with high "decimationrate" values or when setting Attribute "trace" "int displacements" [1].
  • Fixed a bug that could cause faceting artifacts for ray-traced instances and certain other primitives.
  • Noise in distribution ray-traced shadows has been reduced significantly.
  • Addressed an issue with ray tracing bboxes that could inadvertently lead to pinhole artifacts under certain circumstances.
  • Several issues that could occur when samplemotion is enabled for ray-traced, tessellation-cached, multi-segment motion-blurred gprims - including incorrect results, artifacts, crashes, and degraded performance - have been fixed.
  • Fixed a bug wherein a zero PDF in an array of samples passed to gather() could prevent valid subsequent samples at that grid point (with non-zero PDFs) from firing.
  • Fixed a bug that could lead to a crash when using the "ray:length" parameter with gather().
  • The renderer no longer issues a warning for a too-small maxvariation setting when firing 0 rays.
  • Fixed a bug that could occur in indirectdiffuse() and occlusion() when "minsamples" is greater than "maxsamples"/4. (minsamples = maxsamples/4 is the default for adaptive sampling.) In rare cases, this could cause NaNs.
  • Fixed an "array out-of-bounds" bug in adaptive occlusion(), indirectdiffuse(), and ray-traced subsurface() that could occur when the number of samples is very large (higher than 5000).
  • Fixed a bug wherein auxiliary points on texture lookups were not skipped unless "tracedisplacements was enabled.
  • Visibility to photons is now disabled when trace visibility is turned off.
  • RiVolumes of type blobbydso with zero voxel dimensions and an empty dPdtime now correctly invoke use ImplicitField methods to compute deformation motion blur.
  • The ImplicitField Split method is now correctly invoked on ray-traced RiVolumes of type "blobbydso".
  • The effect of GeometricApproximation on the dicing rate computed for RiBlobby has been improved.
  • Fixed an implicit field plug-in bug that could prevent motion blur from working properly with volumes in the absence of a specified dPdtime.
  • Fixed a bug in subsurface results for very bright, large, distant points wherein the subsurface results could be bright when they should be black.
  • Unknown parameters passed to the subsurface() function are now ignored, rather than returning black. An error message is still issued, as before.
  • Fixed a bug that could lead to incorrect colors returned when using "smooth" with ray-traced subsurface().
  • Fixed a bug that could cause prman to crash when metadata is added to a file using the OpenEXR display driver.
  • Addressed a bug wherein 16-bit TIFF files could have their datatype inadvertently converted to float.
  • Fixed a bug that could cause the renderer to hang when when rendering curves with "spatialgrouping" enabled.
  • Artifacts that were seen when using sigma hiding on curves in front of transparent geometry have been addressed.
  • Fixed a bug wherein hairs were inadvertently splitting ad infinitum.
  • Addressed a bug wherein a procedural defined inside an object definition with a ReverseOrientation could erroneously inherit an inappropriate orientation.
  • A bug that could cause a crash when using the randomgrid() shadeop has been fixed.
  • Addressed an issue that could lead to a crash when using visible point shading with instancing.
  • Fixed a bounding box bug that could occur when using Depth of Field with object instancing.
  • Object instancing now correctly supports subdivision meshes with hierarchical edits of faces that set attributes.
  • Several issues adversely affecting memory consumption when object instancing have been addressed.
  • Fixed a bug that could cause procedurals to lose instances if the procedural was not unloadable and had a single instance as its child.
  • Fixed a bug that could lead to a crash when reading gzipped point clouds during multithreaded renders.
  • Fixed a bug that could cause txmake() to crash on non-squared (power of 2) textures.
  • A dicing bug that could lead to holes when GeometricApproximation is enabled has been fixed.
  • Fixed a bug that could cause partially offscreen subdivision surfaces to be under-diced.
  • Addressed a threading issue in the subdiv API that could lead to a crash.
  • A bug in the handling of __faceindex that could lead to precision issues has been fixed.
  • An issue with areashadow() that affected clipping precision has been fixed.
  • Fixed a bug that could cause artifacts when using Attribute "trace" "decimationrate" with a value greater than 1.
  • Fixed a different bug that could cause artifacts when using Attribute "trace" "decimationrate" with a value greater than 16 on geometry that is shaded as triangle grids.
  • Fixed a bug that could cause a crash if RxOption is called without an active Ri context.
  • Addressed a message passing bug that could result in memory corruption when passing varying data to shaders that employ a construct() method.
  • Addressed an issue with environment lookups that could cause the renderer to hang.
  • Fixed a bug that could lead to memory stompage on a second diffuse bounce when using the radiosity cache.
  • Over-tessellation of ray-traced offscreen object instances has been significantly reduced.
  • Several issues pertaining to running prman -capture with object instanced procedurals have been fixed.
  • Fixed a bug in the tokenization of user attributes and options of type "string" that could cause inadvertent memory allocations.
  • Addressed an issue that could cause incorrect transformation of intermediate samples on multisegment transformation motion-blurred objects that bound in object space.
  • Fixed a bug that could cause occlusion() rays to stop firing when maxdiffuse was set to 0.
  • The Geometry stats have been expanded for ray-traced triangles.
  • indirectdiffuse() samples are now reduced according to importance when shading specular hits (at diffuse-depth 0).
  • The RIB representation for standard Procedural2 callbacks has been corrected to DelayedReadArchive2 and DynamicLoad2. Existing RIB files with the old representation will still work.
  • Fixed a crash that could occur when hitting the /prman/texture/maxfiles limit while rendering geometric brickmaps.

Changes in 18.0_1378199

  • Addressed a bug that could lead to cracks/artifacts when rendering displaced, motion-blurred instances.
  • Addressed an issue wherein baking imager shader grids for REYES re-rendering could potentially lead to a crash.
  • Fixed a bug that could cause inadvertent lseek(-1) system calls on every read of an OpenEXR texture.
  • Path settings in rendermn.ini can now be 4096 characters. Fixed a bug wherein path settings deemed too long could cause the renderer to crash.
  • Fixed a bug where instances with a scale in their transforms would generate un-normalized geometric normals (Ng).

Changes in 18.0_1359502

Miscellaneous Changes in 18.0_1359502

  • The "seed" parameter to indirectdiffuse() and occlusion() can now "seed" the random numbers used to generate ray directions. This can be used to make the random ray directions depend on e.g. Pref (and thereby eliminate flickering when an object moves) by passing in a "seed" value that is a function of Pref.
  • Inverted light blockers are now supported.

Bug Fixes in 18.0_1359502

  • Fixed a bug that could lead to a crash when using the radiosity cache with indirectdiffuse while rendering brick map geometry.
  • Fixed a bug that could lead to a race condition and a crash when rendering motion-blurred curves.
  • Addressed a threading slowdown that could occur when using large, user-defined displacement bounds.
  • Fixed a bug caused by NaNs that could lead to wildly varying render times and potentially cause prman to hang.
  • A bug that could cause artifacts in ray-traced shadows of roundcurves has been fixed.
  • Fixed a bug that could lead to a crash when rendering motion-blurred curves.
  • Fixed a bug that could lead to a crash when using the radiosity cache with indirectdiffuse while rendering brick map geometry.
  • Ray tracing of reduced memory polygons with displacement and deformation motion blur now behave as expected.
  • Fixed a filtering bug that could cause incorrect results when rendering deep shadows.
  • Addressed an issue that could cause artifacts appear when using object instancing and camera motion blur with a negative value in the shutter range.
  • Fixed a bug that could lead to AOV passes crashing during re-rendering.
  • Addressed an issue that could lead to a crash when calling faceforward() on 3-point, ray-hit grids.
  • Fixed a crash or null data when using array vertex shader args bound to primvars when displacement was present.
  • Fixed an issue that could lead to NaNs on degenerate quads in Sigma with motion blur or Depth of Field.
  • A bug that prevented "useshadowmethod" from working properly with distant lights has been fixed.
  • The transform applied to local environment lights now works properly for translation.
  • Addressed an issue with the interpolation of face varying data that could lead to incorrect normals.
  • Fixed a random crash that could occur if the display displaychannel was passed point-like type.
  • Fixed a bug that could cause artifacts when using "samplebase" in areashadow() with adaptive sampling turned off.

Changes in 18.0_1283038

Miscellaneous Changes in 18.0_1283038

  • There is a new /prman/dice/maxhairlength setting in rendermn.ini that can be used to change the default maxhairlength value if the corresponding "dice:maxhairlength" option is not set in the .rib file.
  • There have been improvements to avoiding self-intersections when using Attribute "trace" "decimationrate" with displacements.

Bug Fixes in 18.0_1283038

  • Fixed a bug that could potentially cause a crash if gather() is passed a zero length direction vector.

  • Addressed a licensing issue that could arise when a license is tied to a USB dongle.

  • Fixed incorrect z AOV output when using a method-based Imager shader.

  • Addressed an issue that prevented REYES-style re-rendering from working correctly.

  • Fixed a ray-traced subsurface() bug that could lead to artifacts when using Attribute "trace" "decimationrate".

  • Fixed a ray-traced subsurface() bug that could lead to incorrect results when using deformation blur.

  • Addressed an issue that could lead to NaNs when computing area shadow maps.

  • Addressed a subsurface() sampling bias issue.

  • Fixed a directlighting bug that could cause incorrect results for diffuse and specular contributions.

  • Addressed issues with incorrect shader and object space transforms when using instancing and ray-traced displacement.

  • Fixed a bug that could cause artifacts in ray-traced subsurface() when using MIS.

  • Fixed a bug in motion-blurred, ray-traced loop surfaces.

  • Addressed a bug that could lead to uninitialized ray hit position, normal, and distance for motion-blurred round curves with dicing enabled.

  • Fixed a bug wherein environment lights were being diced, inadvertently.

  • Addressed a bug that could lead to a crash when using ray-traced subsurface() with a single sample and both the brdf and bssdf are being sampled.

  • Addressed a bug that caused corrupted camera ray differentials in multi-threaded path tracing mode (both rendering and re-rendering), leading to incorrect results.

  • Fixed a bug in the Geometric Area Light hierarchy that could cause a crash.

  • Several issues with REYES re-rendering have been addressed:

    • Class-based shaders that access non-default output parameters now work properly.
    • An issue with AOVs on multigrids has been addressed.
    • Deep texture mattes are now baked properly.

Changes in 18.0_1246900

Miscellaneous Changes in 18.0_1246900

  • There is a new option - "shade:saveshaderstate" - which can be used to override/in lieu of the /prman/saveshaderstate .ini setting on an as-needed basis.
  • The attribute() function can now query "trace:decimationrate".
  • PRMan's buildid is now accessible via the API.

Bug Fixes in 18.0_1246900

  • Fixed a subsurface scattering bug that could cause artifacts when using "switchbrdf".
  • An issue with subsurface() that could cause incorrect cross-surface color bleeding has been addressed.
  • Fixed a slowdown for indirectdiffuse() and occlusion() with "samples" 4 (or fewer) in scenes with procedural primitives with huge bounding boxes.
  • Fixed a bug that could cause large cracks/holes in displaced poly meshes.

Changes in 18.0_1239756

Important Differences in 18.0_1239756

  • The Point Cloud API version number has been changed to 5, from 4.

  • The sampling method for ray-traced subsurface() scattering has been improved. The new method produces less noise for the same number of samples in nearly all cases. With the new sampling method, the "smooth" parameter is no longer needed for ray-traced subsurface() and is ignored. (Note that "smooth" is still used for point-based subsurface()). The of number traced rays will increase a bit with the new sampling method (these are visibility rays that are necessary with the new sampling method), but the lower noise is well worth the slight overhead.

    The old sampling method can be requested with the following rendermn.ini setting:

    /prman/subsurface/samplemethod  18

Miscellaneous Changes in 18.0_1239756

  • OpenVDB support has been improved:
    • Users can now specify the override class for the density and velocity grids in an OpenVDB file if the class is not set.
    • Users can now pass an optional second float argument to the DSO that will be used as a multiplier on the velocity data, e.g. if the velocity values are expressed as units per second.
  • txmake() supports a new option - "-extraargs exrlatlong" - which can be used to indicate that the input is already in EXR input space and does not require conversion.
  • ObjectInstance supports a new parameter: "uniform int identifier:id", which can be used to override Attribute "identifier" "int id" for the purpose of id AOVs.
  • occlusion() and indirectdiffuse() now accumulate opacity and stop shooting continuation rays when the "othreshold" limit has been reached.
  • The AlembicProcPrim is now supported on Windows. Note that this requires Alembic 1.5.

Bug Fixes in 18.0_1239756

  • Fixed a bug that could lead to corruption when changing crop windows during re-rendering.
  • Addressed a bug that prevented object IDs from being properly output in an AOV during re-rendering.
  • Addressed a shared state issue that could lead to hanging during re-rendering.
  • Baking volumes for REYES re-rendering now works as expected.
  • Addressed an issue with plausibleVolume wherein indirect diffuse samples were not being properly reduced, causing an inadvertent slowdown.
  • Fixed a cacheing bug with ray-traced volumes that could cause incorrect results and artifacts.
  • Addressed issues for transmission artifacts caused by underdicing of opacity-cached volumes.
  • Fixed issues with path tracing of heterogeneous volumes.
  • Addressed issues with OpenVDB volumes and motion blur caused by a velocity grid stored at a different resolution than the density grid.
  • Fixed a bug that could lead to a crash when rendering volumes via the raytrace hider using Attribute "dice" "sphericalprojection".
  • Fixed a bug that could lead to a crash when AOVs are used with VolumePixelSamples.
  • Atmosphere shaders now work as expected when using the raytrace hider.
  • Addressed a txmake issue that prevented EXR "displaywindow" transformations from being applied properly.
  • Addressed a bug in txmake() that caused incorrect conversion monkey business with latlong EXR inputs.
  • Fixed a bug that could cause a crash when running out of file descriptors while using brick maps for texture3d() and as renderable primitives in the same render.
  • Fixed a bug that could lead to spurious errors when making RxTexture calls.
  • Fixed a potential memory leak in TxFile stats.
  • Several issues with the textureatlas() shadeop have been addressed.
  • Fixed a bug that prevented edits to environment textures from being properly applied.
  • Fixed a dtexmerge bug that inhibited its ability to support arbitrary non-RGBA dtex images.
  • Addressed an issue that could cause multi-segment motion blurred offscreen procedurals to be expanded unnecessarily.
  • Addressed race conditions in nested instancing that could lead to a crash.
  • Fixed issues with nested procedurals inside an object instancing definition attempting to use primitive variables attached to object instances.
  • Addressed a crash that could occur if range curves are used as Geometric Area Lights.
  • Fixed a bug that could lead to infinite splits of BLPs under certain circumstances.
  • Addressed a bug in ray-traced LOD that could occur in scenes with objects that have different transformations.
  • "Old style" imager shaders now properly return Ci and Oi.
  • An issue with brick map statistics has been addressed.
  • Addressed an issue that could cause problems when rendering ginormous images.
  • Fixed issues with the "switchtobrdf" parameter to subsurface() wherein it might be ignored or cause random splotches in the results.
  • Under certain circumstances, the red channel of ray-traced subsurface() could be undersampled, particularly for low values of "samples".
  • Fixed a bug that could lead to incorrect results if __computesOpacity is not present.
  • Fixed a bug that could lead to plugins generating grids larger than MaxGridSize.
  • Addressed an issue that could cause incorrect results or segfaults when generating AOVs in path tracing mode.
  • A bug that could lead to a race condition when rendering with the raytrace hider has been fixed.
  • Fixed a bug that introduced holes and incorrect primvar interpolation in ray-traced geometry.
  • Addressed a bug in indirectspecular() that could lead to a crash when shading for the radiosity cache.
  • Fixed bugs in ray-traced volumes which could lead to artifacts when using cached diffuse lighting and/or opacity.
  • Fixed memory corruption when computing shadows on Geometric Area Lights.
  • Fixed a bug where dPdu/dPdv were sometimes computed incorrectly on polygons.
  • The raytrace hider now provides good stratification in "distribution" mode whether a shader stratifies over one sample per camera ray or many.
  • Fixed a bug that could cause crashing when rendering multisegment motion blur with area shadows.
  • Addressed a bug when using deformation motion blur with the radiosity cache, which could lead to overly noisy or wrong results in indirect diffuse and subsurface scattering.
  • Fixed a bug that could affect blobbies when using the "uniformdepth" refinement strategy.
  • Crop windows now work as expected for non-interactive path tracing.
  • Under certain circumstances, the red channel of ray-traced subsurface() could be undersampled, particularly for low values of "samples".
  • Fixed a bug that could lead to infinite splits when using extremely large geometric area light environment spheres.
  • Fixed a bug that could cause erroneous clipping when using geometric area light environment spheres.
  • Addressed an issue that could cause Rtx remapping errors.
  • Fixed a curves/bounding box bug that could cause performance degradation when rendering deforming curves with samplemotion or via the raytrace hider.
  • Addressed an issue with multi-segment deformation blur.
  • Fixed a bug in subsurface() that could create a visible and unnecessary intensity difference (compared with previous versions) for high albedos.
  • Addressed a txmake issue that prevented EXR "displaywindow" transformations from being applied properly.
  • Fixed a bug that could lead to AOVs being erroneously duplicated when in path tracing mode.
  • Addressed an issue that could lead to incorrect values for member values of type "shader" set in construct().
  • Fixed a bug wherein mattes were ignored in AOVs when rendering with the raytrace hider.
  • Addressed an issue that could lead to incorrect orientation for Geometric Environment Lights.
  • Fixed a bug that prevented editing of procedural environment lights during re-rendering.
  • Addressed an issue with attribute faceedits and instancing.
  • Fixed a bug that could cause an infinite loop when splitting blobby volumes and using refinement.

Documentation Changes

Updated Application Notes

Known Issues

Geometric Area Lights

  • The re-rendering mode of the raytrace hider does not allow adding or deleting area light
  • "Illuminate" currently does not work with area light sources.
  • Area lights do not work with curves, points, volumes, and blobby geometry.
  • Motion blur and sampling from motion-blurred geometry is not supported.
  • Currently, directlighting() is the only supported interface for area lights.

Polygon Rendering Optimizations

  • For simple polygonal meshes, the new implementation provides about the same speed and memory performance as the previous implementation.

stdrsl Shaders

  • plausibleVolume is missing an init() call on the shading context. This may result in slower runs of the shader.