Prev | Next



RPS 16.0 Release Notes

Welcome to RenderMan Pro Server 16!

This release represents another significant milestone for global illumination and re-rendering with PRMan. We've greatly increased the efficiency of global illumination, both in terms of raw performance and thread scalability as well as in memory consumption. We've also introduced new RSL support to make writing physically plausible shaders easier and more efficient than ever, described in detail in a new application note.

A new raytrace hider has been added that allows you to bypass the REYES front-end and directly trace primary rays. It has application in both interactive and final-quality rendering. The raytrace hider is well suited for a subset of rendering applications where scene complexity doesn't exceed system memory. As a re-renderer, it is attractive for lookdev and previs applications due to its low startup cost and support for a broader range of scene edits. As a final-frame renderer, it supports esoteric sampling effects due to its arbitrary camera projection and full temporal shading. For final-quality relighting applications, the REYES re-renderer (a.k.a. "Lumiere") remains attractive due to its scalability and support for partial recomputation. Both re-renderers now support shader-instance edits, while the raytrace re-renderer alone supports camera edits.

Ray-traced shadows have been greatly improved through a combination of low-level improvements and the addition of new RSL function, areashadow. The new function better expresses the underlying shadowing requirements to the renderer, which often results in larger ray bundles and therefore significant speed gains. The areashadow() function supports tracing directly into the scene and the tracing of deep shadow files. Traceable deep shadows offer an advantage over direct scene tracing by reducing the memory overhead associated with a scene by leveraging rasterization and texture-caching. Rasterization carries with it some disadvantages, though, so you'll need to carefully evaluate the tradeoff between direct and deep-shadow modes. Because of the potential speedups and expressivity associated with areashadow(), we recommend that current uses of the transmission() function be evaluated for conversion.

New controls to reduce costs associated with ray-traced displacements and to automatically simplify ray-traced geometry introduce new acceleration and memory-reduction opportunities. A new shading mode also allows shaders to selectively replace ray-hit shading with texture3d lookups.

To round out the set of ray tracing improvements, we are introducing a new Application Note, The Importance of Importance. The single most significant control over the cost of ray tracing in PRMan is the number of rays your shaders choose to cast. In this appnote we describe some of the well-known tricks to prune the potentially large ray trees that recursive ray tracing algorithms can produce too easily. We hope that presenting this information in an easily digested, RSL-centric form will encourage you to employ these tricks in your production shaders.

While these new features and optimizations make ray tracing ever more attractive, the REYES (a.k.a. stochastic) hider can still be significantly more efficient in memory consumption, displacement shading, and motion blur speed. Certain non-physical lens and shading effects are only possible with the REYES hider, while other physical effects may only be possible with the raytrace hider. Our hybrid REYES/rays architecture lets you select the sweet spot for your shot or show.

Of course, no RPS release would be complete without a large collection of general improvements and we're pleased to offer a bumper crop in version 16.

In the realm of point-based techniques, we've added support for the baking of spherical harmonic visibility. This can be coupled with a new txmake environment map encoding to produce fast low-frequency environment lighting. A new getpoints() RSL function provides direct access to data stored in point cloud files. We've also implemented the long-requested "worldspace" dicing mode in this release to simplify baking pipelines.

A number of extensions to our deep texture file format and subsystems have been made in this release. We've extended the file format and output driver to support deep compositing, allowing you to deliver rgba data directly into deep texture files. We've generalized the dtex file format to support multiple subimages in a single deep texture file; each subimage can be comprised of any number of channels and have its own image resolution and coordinate systems. We've written example deep-compositing applications built atop our new RixDeepTexture API. This new C++ API will be available in the form of a freely redistributable shared library, librix.so/dll. We hope that this combination of enhancements and APIs will help to promote a standard multi-view deep compositing workflow like that pioneered by the folks at Weta Digital. We've also added a new deep method, areashadow, that produces the deep texture data suitable for use by the new areashadow RSL function. Also, traditional deepopacity files will be significantly smaller due to an improved compression technique.

A new texture-synthesis plugin type has been added that allows plugins to deliver texture data directly to PRMan's texture cache, where it is automatically antialiased for delivery to shaders via the texture() RSL function. A texture plugin is provided with this release that allows you to treat SVG files (a standard vector image format) like standard pixel-based textures. The SVG plugin allows you to deliver arbitrarily high texture resolution without paying the usual penalties of disk-space and I/O. We've also completely overhauled our texture-conversion subsystem, txmake, and can now convert ultra-high resolution textures on multi-core CPUs very efficiently.

We've generalized support for multi-segment motion blur by removing the venerable 6-sample limit and by adding support for multi-segment camera blurs. We've introduced a new shading strategy in which a single shading result can be reused across all motion segments.

Volume support continues to improve in RPS 16. We've extended the RiVolume primitive to support ImplicitField plugins and significantly sped up the ray tracing speed.

In the shading subsystem, we've implemented a just-in-time (JIT) optimizer for .slo files. At load-time, we specialize shader function invocation according to context and retarget code to special SSE-optimized variants in some conditions. On typical scenes we've seen 20% speedups due to this optimization. We've also added a new pattern generation RSL function, knoise, a variation of the Gabor Noise presented Siggraph 2009. Finally, RPS 16 introduces the beginnings of a new stdrsl library of shader functions that we intend to grow over time. Distinct from our previous hodgepodge of RSL source examples and toy shaders, the stdrsl shader library is intended to be a true resource for your production shaders. Our first release includes support for SphericalHarmonics.h and AreaSamplers.h.

Details of the release are enumerated below.


Ray Tracing and Re-rendering

Function Default Type
gather() "specular"
indirectdiffuse() "diffuse"
occlusion() "diffuse"
trace() "specular"

New Point-Based Rendering Features


Motion Blur Enhancements


New Deep Compositing Features


New Procedural Texture Plugin

We now support texture synthesis plugins to deliver arbitrary texel data to our texture cache subsystem. Plugins respond to renderer requests to fill texel buffers that are delivered in an automatically antialiased form to consumers of plugin via the texture RSL function. Arguments to the plugin are encoded in the filename argument using standard web URI syntax to support a combination of standard and plugin-specific parameters.


New stdrsl Library

We now provide RSL code intended for inclusion by your production shaders. The stdrsl shader library is a collection of supported RSL code that leverages the expressiveness of RSL structs and centralizes the computation of various standard computations. The RSL source can be found below $RMANTREE/lib/rsl/include/stdrsl. The shader compiler is aware of this special location and so clients should refer to stdrsl components as follows:

#include <stdrsl/SphericalHarmonics.h>

New librix

A new library has been developed that exposes a subset of our standard APIs to a broader range of users. The intention is to facilitate the use of our standard file formats by pipeline tools other than our own. A version of librix will be loosely coupled with an RPS release in the usual sense: features present in a new release of RPS will only be available via the associated librix. Tools linked against older versions of librix should be forward-compatible with future RenderMan versions but with limited access to new features. We've also packaged librix as a separately downloadable library and plan to license certain of these libraries under very liberal terms.

C++ Binding for RIB Generator

A dependency-free library to write RenderMan-standard RIB files based on a simple C++ extension to the venerable C-binding.

DeepTexture API

A new C++ binding to read, write, and modify deep texture files. Deep compositing applications should be able to build solutions atop this library.

Subdiv API

An implementation of Pixar's subdivision surface technology. This API allows you to subdivide geometric meshes in a way that is 100 percent compatible with PRMan's implemention. It can be used to integrate Ptex workflows into paint packages, and for other special effects.

Additional Enhancements and Changes

Rendering

  • World-Space Dicing: there is a new dicing strategy that tries to deliver micropolygons whose size is independent of camera projection and measured in worldspace units. This has applications in bake passes where camera-based strategies may cause insufficient shading frequency for far-away objects. This strategy does not guarantee that all micropolygons will meet the criterion; although micropolygons will never be larger, in cases of overmodeling, micropolygons may be smaller than the world distance requested.

    Attribute "dice" "string strategy" "worlddistance"
    
  • New SubdivisionMesh Mask: we now support "bilinear" as a mask argument to SubdivisionMesh. The bilinear scheme simply renders high level 4-sided faces to bilinear patches, and subdivides all n-sided faces to n blps. Like other SubdivisionMeshes it supports all hierarchical edits, is guaranteed to be watertight, can be used with the Rix Subdivision API, and can be used in conjunction with PTex.

  • Rif Improvements

    We now support specification of Rif chains within RIB files. A new structure comment, rifcontrol, allows you to append and delete portions of the current Rif chain. In addition, new C-entrypoints have been exposed to allow plugins to modify the current Rif chain.

  • The point cloud file format has been bumped to 2. This new file format makes texture3d() lookups in large organized point cloud files faster (as much as 5-10 times faster).

  • RiSides, RiDetailRange, RiOrientation, and RiReverseOrientation are now supported inside ObjectBegin/End.

  • RiSubdivisionMesh now validates its primvar inputs and, much like RiCurves, will not accept the primitive if the primvar counts are wrong.

  • ImplicitField DSOs are now supported by RiVolume.

  • RiPoints can now set falloff as a varying or constant float falloffpower primvar, instead of using the "float pointfalloffpower" hider option. Pursuant to this, the "float pointfalloffpower" hider option is now deprecated.

  • New methods have been added to the subdivision surface API which allow for queries to be returned efficiently in the appropriate transform space. Also, in this release, the header file "RixSubdEval.h" is now a required include file (in addition to "RixInterfaces.h").

  • There are two new attributes for RiCurves:

    • Attribute "dice" "int preservecv" [1] can be used to guarantee that a curve's CVs are fully represented in the grid. The default value is 0, or "off".
    • Attribute "dice" "int roundcurve" [1] ensures that curves without user-provided normals better mimic tubes.
  • There is a new option to RiCamera, extremeoffset, which disables certain multi-camera rendering optimizations that may lead to bucket artifacts when the separation between cameras is large.

RenderMan Shading Language

  • Kernel Noise: there is a new RSL function, knoise(), that calculates noise similar to Gabor Noise (Siggraph 2009), with many of the same properties. knoise() is filtered and gives the user control over the frequency window, number of octaves, and amount and direction of anisotropy.

  • sincos(): there is a new RSL function, sincos(), that calculates the standard trigonometric functions sine and cosine.

  • shaderinfo(): there is a new RSL function, shaderinfo(), that queries the current shader pipeline stage.

  • textureinfo() Improvements:

    • textureinfo("type", ...) will now return "brickmap" or "pointcloud" if that is the type of the (3D) texture file.

    • textureinfo() can now get information from point clouds.

    • textureinfo("shcoeffs", ...) will retrieve optional spherical harmonic coefficients from an environment map.

    • There are three new supported queries:

      "fileformat" - returns a string with the values: "pixar", "openexr", "tiff", or "deepshadow".

      "islatlong" - returns an int with 1 if the texture is a latlong texture.

      "iscubeface" - returns an int with 1 if the texture is a cubeface texture.

  • The occlusion() and indirectdiffuse() functions can now output a float array of spherical harmonic coefficients of the directional visibility as an output variable. The number of coefficients is the square of the number of bands, embodied in the new parameter "shbands". The "clamp" parameter must be on (1). If "maxvariation" is higher than 0, the coefficients can be interpolated between shading points. Note that this is (currently) for point-based occlusion and indirectdiffuse calculations only.

  • There are two new parameters to the subsurface() function: "scatter" and "absorption". They are an alternative to "albedo" and "diffusemeanfreepath".

  • Struct methods can now be invoked on non-writable structs, provided they don't write to the struct. For example:

    struct bar {
            float foo;
            public void getfoo() { return foo; }
    };
    

    used to fail when calling getfoo() if the struct it was invoked on was not writable. We now correctly infer the constness of each method.

  • There are three additional new parameters for gather():

    • "weights" is an array of color weights, one for each ray in the array of rays that can be passed in via the "distribution" parameter. Assigning different importance weights to each ray can be useful for importance sampling. Note that "weight" is synonymous in this case.
    • "rayconeangle" (an array of floats) can be used to explicitly set the ray spread. Note that "rayconeangles" is synonymous.
    • "float importancethreshold" can be used to override the "trace" "importancethreshold" attribute.
  • Class-based shaders can now write to dPdTime. The third argument to displacement may (optionally) be dPdTime.

  • The random numbers for hemisphere sampling are now "more" random. This change will likely result in image differences compared with pre-16 renders involving ray-traced indirectdiffuse() or occlusion().

  • There is a new attribute() query - "geometry:frontfacing" - which enables improved querying of backfacing normal behavior on double-shaded geometry.

Statistics

  • Statistics Improvements: PRMan now provides more statistics. Additionally, there is a new application note, Extensible Stats Diagnostics, which provides helpful tools and tips for parsing PRMan's stats.

  • Users can now specify the maximum number of reported displacement bounds problems, via an option or an ini setting:

    /prman/statistics/maxdispwarnings 100
    

    or:

    Option "statistics" "int maxdispwarnings" [0]
    

    A value of zero turns off the check and reports all displacement problems.

  • Timers for statistics are now more accurate on Win64 and Linux kernels that support nanosecond timers.

  • There is a new "Ray traced procedural memory" stat. This number reflects the memory tracked by the renderer as it attempts to obey the proceduralmemory limit specified by the user.

  • Statistics for ray tracing memory have been improved.

  • Memory tracking for statistics is improved.

  • Light cache hits and misses are now included with the shading statistics.

Utilities

  • txmake Improvements
    • txmake can be instructed to compute the spherical harmonic representation of the environment map. The new option, -shbands, causes the SH encoding to be included into the resulting texture file. These values can be queried by shaders using the RSL function textureinfo.
    • txmake has been rewritten from the ground up to support more optimal mipmap generation. We can now convert extremely high resolution textures in reasonable memory footprints.
  • sho: There is a new version of sho, based on IceMan. sho is now able to send 32-bit float images to dspy (using the -native option), and it can open deep shadow files. Channel selection is improved and is based on channel number.
  • dsview Improvements: The deep shadow viewing utility, dsview, now supports pan and zoom. Use + and = to zoom in, - to zoom out, drag with middle mouse button to pan, and 1 to resets zoom and pan. The a/z keys step through subimages and files.
  • ptviewer now supports coloring by any element of float or color array channels. float[3] channels can also be displayed as an rgb color.
  • ptfilter -organize 0 can now be used to unorganize point clouds. It reads one or more input files (which may be organized) and writes out an unorganized point cloud.
  • There are two new command line options for netrender:
    • -d dispType specifies a display type (e.g. it, x11, etc.).
    • -crop xmin xmax ymin ymax defines a crop window, overriding the CropWindow specified via RIB.
  • The txinfo utility now prints the spherical harmonic coefficients if they are present in an environment map texture.

Miscellaneous Speedups

  • SIMD Optimizations: PRMan now analyzes shaders and rewrites them on the fly, retargeting code to use SSE on the CPU and specializing shadeops after analyzing the shader, resulting in shading execution speedups of up to 20%.
  • transmission() has been refactored, showing performance gains of up to 20%.
  • Computation of color bleeding and occlusion has been sped up, whether using ptfilter, indirectdiffuse(), or occlusion().
  • Multithreaded point-based calculations have been optimized.
  • There is a new, faster lookup routine for latlong environment maps used in the miss case for occlusion calls, resulting in a 50% speedup for occlusion with environment map-heavy renders.
  • ptexture() is faster, particularly in terms of threading performance.
  • Performance has improved for filtering with filter regions.

Other

  • There is a new PNG display driver. It accepts 8-bit A, RGB, and RGBA displays.
  • Point clouds and brick maps can now contain array data types.
  • We now make sure that a ray hit point lies inside the micropolygon, and clamp the computed u,vs to lie inside the 0,1 range.
  • There is a new rendermn.ini setting to control the default connection protocol chosen by netrender client when attempting to connect to a server. This new ini setting defaults to "tractor" protocol; any string other than "tractor" will revert to the old nrmserver/alfserver connection set-up protocol. The environment variable NRM_TRACTOR continues to work, and overrides the ini setting, if present in the client user's environment. The command-line switch -T, introduced in 15, will override the both, if present.
  • The default value for /prman/constantmemorylimit setting in rendermn.ini, introduced in RPS 15, is now 1, meaning that the memory limit is constant regardless of the number of threads being used, resulting in less memory used by the cache for the same RIB settings.
  • PRMan now utilizes OpenEXR 1.7, which includes support for "multi-view" images in .exr files.
  • The default size for the ray tracing tessellation cache (a.k.a. GUT cache) has been increased from 60MB to 200MB.
  • The Ptex libraries have been updated, providing bug fixes and performance improvements.
  • Support for half floats has been added to deep textures. Use "string type" ["half"] on the display line in RIB, and pass DTEX_TYPE_HALF to dtexAddImage() to generate them.

Bug Fixes


Changes in 16.1

New Features

  • Re-rendering now supports co-shader instance editing.
  • Re-rendering now supports invalidating and reloading shaders.
  • There is a new "weight" parameter for indirectdiffuse(). "weight", a varying color, is multiplied on the (automatically computed) importance of diffuse hemisphere and sphere rays.
  • areashadow() supports two new parameters: "mapbias" and "mapbias2". "mapbias" is used as an equivalent to the ray-traced areashadow() parameter "bias" when not tracing rays. "mapbias2" can be used to help control the case where a ray could skip through geometry (due to aliasing between the ray and the map) seen obliquely from the shadow map camera by widening the z-range, which makes this less likely to happen, at the expense of potentially making partial shadows darker.

Performance Enhancements

  • The performance of areashadow() has been improved.
  • Threaded performance has been improved in cases where the renderer is emitting many exception messages.

Miscellaneous Changes and Bug Fixes

  • The Deep Texture Rix interface is now available through libprman as well as librix.
  • Motion blur when using the radiosity cache has been improved.
  • Several issues with camera motion blur, particularly relating to multi-segment motion blur, have been resolved.
  • Addressed issues with ray tracing Loop subdivision surfaces when using the radiosity cache.
  • Improved accuracy when ray tracing polygons.
  • Fixed a bug that could inadvertently conflate coshaders that were identical in all respects except handles. Similar shaders might incorrectly appear to be null.
  • Warning/error messages given by indirectdiffuse() and occlusion() related to spherical harmonics computation have been improved.
  • Ray tracing (particularly transmission()) stats have been improved.
  • Improved the accuracy of the shaded results stored in the medium-resolution radiosity cache.
  • Fixed a bug in gather(): asking for "surface:Ci" would prevent any additional primitive variables from being returned in the same query.
  • Addressed an issue that prevented clean installs of Renderman.app from properly functioning (OS X only).
  • Addressed several issues related to transforms involving "framecamera" space.
  • Derivatives of vertex entities on ray-traced NURBS are now calculated correctly.
  • Fixed a bug in (u,v) computation at ray hits on NURBS surfaces with coarse and medium tessellation rates.
  • A bug in areashadow() that prevented mixing ray-traced shadows and area shadow maps has been fixed.
  • Addressed an issue with specifying a deep shadow cache size larger than 4 GB.
  • Fixed a bug that caused ray-traced spheres to interpolate varying/vertex primvars incorrectly.
  • Addressed an issue with the motion bounding boxes for non-moving, displaced geometry.
  • Fixed a bug in the distribution of rays for sphere (not hemisphere) sampling: the distribution was not uniform - more rays were shot in directions near the poles (plus and minus z directions) than near the equator.
  • Fixed a bug in area shadow maps that could occur with very dense fur and/or hundreds of layers of opaque surfaces.
  • Fixed a ray tracing LOD selection bug.
  • GeometricApproximation motionfactor and focusfactor now correctly respect the dicing camera if enabled.
  • Fixed a bug in dicing of moving implicits with a dicing camera enabled.
  • Fixed a bug preventing gather from utilizing an array of weights that was larger than the maximum number of samples; excess weight values are now simply ignored.
  • Fixed a bug that could potentially cause gather() to use incorrect coneangle values.
  • Fixed a bug that could cause the renderer to ignore any user-applied "bias" setting when a ray origin was moved due to decimationrate.
  • A Ptex filtering bug wherein a mipmap level on non-quad faces could be skipped, incorrectly, has been addressed.
  • Addressed superfluous (duplicate) point cloud warnings.
  • The MakeBrickMap omitgeometry default value was 1 (on); now it is 0 (off) similar to brickmake's default and in accordance with the documentation.
  • The refinement method will now be run from shader objects bound in either the Surface or Displacement slot. If refinement methods are defined for both objects, the Displacement's refinement method is run first, followed by the Surface's refinement method.
  • Fixed a radiosity cache shading bug that could lead to incorrectly shaded curves.
  • Attribute "trace" "int samplemotion" [1] now works properly with indirectdiffuse().
  • Addressed an issue with degenerate BLPs that could lead to NaNs.
  • Several issues with time sampling during ray tracing have been addressed.
  • Addressed an issue that could cause shader compiler errors when overloading return detail.
  • areashadow() weights now work as expected.
  • A bug that could cause prman to crash when using the Slo API in a rendering context has been fixed.
  • Addressed an issue that could result in a crash or errors when using a filterregion variable declared as a class member (and therefore uniform, by default) with ptexture() (which requires varying variables).
  • An arbitrary limit on the number of parameters on a Display line has been removed.
  • Addressed bugs occurring with primitive variables when rendering an RiVolume which used an implicit field DSO.
  • Fixed a bug that caused normals on ray-traced implicits to be reversed under certain circumstances.
  • Addressed an issue that could cause slowdowns when using shader objects that specify a displacement method in conjunction with a displacement bound of zero.
  • AOVs from vpvolumes now function properly with multi-camera setups.
  • Addressed incorrect results returned in the plausibleConductor shader.
  • Fixed a Windows-only bug in generateSamplesEnv() that could lead to a crash when using plausibleEnvLight.
  • Fixed a bug that prevented the multires display driver from working on Windows for launched prman processes.
  • All display parameters are now sent to every image opened in a LOD hierarchy when using a multires-capable display driver during re-rendering.

Changes in 16.2

New Features

  • There is a new ray-traced implementation of `subsurface() <subsurface.html##subsurface`_ that uses the Radiosity Cache to provide faster results. subsurface() takes a new optional parameter, "mode" (which defaults to "pointbased"), that can be set to "raytraced".

  • The indirectspecular() function now supports the importancethreshold parameter.

  • The gather(), indirectspecular(), trace(), and ray-traced environment() functions now terminate low-importance rays (with importance below importancethreshold) using Russian roulette, resulting in fewer rays fired, decreased runtime, and no visual difference in rendered images.

  • The splitting and dicing of off-screen geometric primitives has been improved. There are two new dicing oracles and a new attribute to control the splitting and dicing of gprims outside the viewing frustum:

    Attribute "dice" "offscreenstrategy" "clamped"
    Attribute "dice" "offscreenstrategy" "sphericalprojection"
    Attribute "dice" "offscreenstrategy" "viewfrustumdistance"
    

    The default is viewfrustumdistance.

  • There are three new shading functions - readprimvar(), readaov(), and writeaov() - which can be used to interact with AOVs and primitive variables without requiring the primvars or AOVs to be in the parameter list for a shader.

  • The directLighting() method has a new default variance reduction heuristic, based on multiple importance sampling methods described by Eric Veach. Users can choose between the original heuristic and the new via a new "heuristic" parameter that accepts either "veachpower2" or "pdfpower2" as a value. For more information, please consult the Physically Plausible Shading in RSL application note.

  • Deep texture files used for holdout mattes can now be alpha only, by specifying the mode "a" in the Display line.

Miscellaneous Changes

  • The refinement() method no longer leads to suboptimal split situations and generally has much improved behavior.
  • The performance of ray-traced RiVolumes when using the radiosity cache has been improved, particularly for volumes that are mostly empty space.
  • Memory usage when baking point clouds has been significantly reduced (by as much as 100X per point cloud).
  • The interaction of deep holdout mattes with volumes has been improved.
  • We now support a Linux-only memory limit option.
  • There is a new statistic for radiosity cache memory.
  • The frequency of calls to the ImplicitField BoxMotion method made by the RiBlobby primitive has been reduced.
  • The memory consumption by the subdiv API's RixSubdivisionFace::EvaluateOnLimit() call has been reduced for extraordinary faces.
  • OpenEXR compression has been changed from zip to zips; this improves -recover capabilities and improves compatibility.
  • The raytrace hider now respects setting jitter 0 when in fixed sampling mode.

Bug Fixes

  • Fixed a rerendering bug that could result in a crash if you issue an instance edit for a shader without providing an __instanceid.
  • Re-rendering now runs construct() on shaders on every edit, matching the semantics of off-line rendering.
  • An issue with wrongly backface-culled RiCurves and Option "limits" "gridmemory" has been fixed.
  • A bug that could cause bucket-aligned artifacts on stereo blobby volumes has been addressed.
  • The shader compiler no longer complains when matching non-output to output polymorphic function signatures.
  • RtxPlugins now warp correctly when used as texture maps inside evaluate/generateSamplesEnv().
  • Fixed a crash that could occur when using evaluate/generateSamplesEnv().
  • Fixed a motion blur error that could occur if a motion block ended slightly ahead of the shutter.
  • Fixed an issue with evaluate/generateSamplesEnv() that could occur when textures with more than three channels were used.
  • We no longer emit thousands of T10004 errors if the texture is not mipmapped.
  • Eliminated a crash that could occur when requesting one channel from an svg texture.
  • Reduced ray tracing memory usage on some scenes where procedural unloading is enabled.
  • Fixed a bug in the spherical harmonics Euler angle decomposition: genRot2zyzRot() in stdrsl/SphericalHarmonics.h.
  • The correct index of refraction from point clouds or brick maps is now used in photon scattering.
  • Fixed a bug in multibounce volume colorbleeding: for volume points, the conversion from irradiance to radiosity must multiply by Cs * extinction. Users should note that this may change rendered images significantly.
  • Camera multisegment motion blur and object multisegment motion blur with a moving camera now behave as expected.
  • Fixed a bug that could cause subtle differences between AOVs and main color (Ci) on volumes when Attribute "volume" "string depthinterpolation" is set to "smooth".
  • Diffuse rays fired from a surface now correctly interact with volumes.
  • transmission() rays fired through volumes now correctly execute the proper volume shader in all circumstances.
  • Fixed a bug that could cause transmission() to inadvertently reuse the same areashadow map.
  • Fixed a shading bug in transmission() that could result in incorrect opacity when the radiosity cache is disabled.
  • Fixed several issues with indirectdiffuse() and occlusion() when automatically continuing rays through transparent objects (including volumes).
  • Fixed a bug that could cause NaNs when ray tracing NURBS patches with deformation motion blur without enabling samplemotion.
  • Fixed a bug in the ptviewer utility that could lead to a crash.
  • Fixed a bug in the sample manager library (SampleMgr.h) that would cause it to return the incorrect sample count.
  • The shader compiler will now issue a warning when encountering initializers with variable length arrays.
  • Fixed a bug in decimationrate functionality for rays at depth > 1 and in the raytrace hider. The bug would show incorrect or missing ray hits with decimationrate values different than 1, which could sometimes result in slower render times, NaNs, or a crash.
  • generateSamples and evaluateSamples now properly return a uniform float error code.
  • Addressed a grid-combining race condition that could cause the renderer to crash.
  • A bug in areashadow() that could cause shadows to apparently disappear when using orthogonal shadow maps has been fixed.
  • Polymorphic return type detail is now correctly matched for RSLPlugins.
  • The rendermn.ini option - /prman/statistics/emitoncrash - is now spelled correctly. Note that the previously misspelled option is still valid, for backwards compatibility.
  • Fixed a bug that could lead to a crash when setting Option "trace" "float decimationrate" to 3.
  • Fixed a minor bug in the Python statistics scripts.
  • Fixed an issue with memory statistics accuracy.
  • A bug that could cause errors when using "it" as the framebuffer when rendering with the raytrace hider has been fixed.
  • A Windows-only bug that prevented the txinfo utility from working properly has been fixed.
  • Fixed a compression bug that would corrupt shadow maps on very rare occasions.

Changes in 16.3

Miscellaneous Changes

  • The ordering of ray tracing and area shadows have been inverted. Ray tracing is now performed first and area shadows are not computed when rays report back opaque values.
  • The distribution includes new plausible shading examples (in $RMANTREE/lib/examples), including a representation of the directlighting integrator written in RSL.
  • RiCurves supports a new trimrange parameter, a uniform float[2] that specifies a starting and ending v clip value.
  • There is a new optional parameter - Option "dice" "maxhairlength" - that enables finer dicing for hair. When enabled, hairs are split into roughly bucket-sized chunks, which improves the accuracy of their bounds and therefore ray tracing performance and memory-lifetime management. The default - -1 - inherits the optional bucketsize parameter value - min(bucketsizex, bucketSizeY).

Bug Fixes

  • Addressed a bug that could lead to excessive noise when using the plausibleEnvLight, particularly at higher intensities.
  • Fixed a bug that could prevent ray-traced shadows from rendering properly in scenes using LOD or, under certain circumstances, cause scenes rendered with the raytrace hider to (incorrectly) render completely black.
  • Motion blurred geometry declared within ObjectBegin/ObjectEnd is functional again.
  • Fixed a bug that could prevent Rtx Plugins from being properly loaded.
  • Fixed a bug that could case the re-renderer to crash when performing edits on surface shaders with co-shaders.
  • Fixed a bug that could cause crashes in plugins that use the Subdivision Surfaces API on ray-traced meshes.
  • Fixed a bug that could result in a crash when ray-traced subsurface scattering exceeded the size of the radiosity cache.
  • Fixed a bug in ray-traced subsurface scattering that allowed illumination to leak through a blocker.
  • Fixed a bug that prevented crop windows from working during interactive re-rendering.
  • Fixed a bug that could cause unwarranted increases in shader setup and binding time.
  • Fixed a precision bug that could lead to missing ray hits.
  • A ray tracing bias bug in ray-traced subsurface scattering has been fixed. In addition to fixing issues wherein the ray tracing bias was incorrect, this fix also prevents crashes that could occur under certain circumstances.
  • Fixed a ray self-intersection bug when Option "trace" "decimationrate" was set to non-power-of-two values. Before this fix, very large trace bias values were necessary for "decimationrate" 3, 5--7, and 9--15.
  • Fixed incorrect ray hit (u,v) values on some parts of displaced and undisplaced triangles and triangle meshes. These showed up as incorrect colors at the end of diffuse rays when the radiosity cache is used.
  • Fixed a bug in that could result in a crash when calling transmission() within a co-shader when a split procedural resulted in no traceable objects in a scene.
  • Several issues that could arise when reloading shaders during re-rendering have been addressed.
  • The d_socket display driver has been updated to make network nameserver lookups more reliable.

Changes in 16.4

New Features

  • Improved Grid Combining - There are two new features that foster a higher degree of grid combining for shading.

    • There is a new attribute:

      Attribute "shadegroups" "attributecombining" ["strict|permissive"]
      

      which allows the user to relax the rules governing whether or not two grids can be combined and shaded together when a shader uses the attribute() shadeop. The default is "strict". See the Attribute Values section of the Tuning Scenes for Combined Shading application note for more information.

    • There is a new hint to the renderer that a shader does not care about shader space. Adding the parameter:

      uniform float __ignoresShaderSpace = 1
      

      to a shader tells the compiler the shader does not use shader space. Grids from gprims that have identical shader sets but different shader spaces will be allowed to combine into a single group for greater shading efficiency. See the Different Shader Spaces section of the Tuning Scenes for Combined Shading application note for more information.

  • randomstrat() - There is a new randomstrat() function, which can be used to fill in a slice of a samples array with stratified random numbers.

Miscellaneous Changes

  • Deep AOVs can now be generated using arbitrary pixel filters, instead of just a 1x1 box filter. Note that there can be significant time overhead in the generation of these deep AOVs, especially when Option "limits" "deepshadowerror" is set to a low number.
  • Holdout mattes may now use deep texture files generated using arbitrary pixel filters, and the matte behavior is now more correct at the silhouette edges of objects. Note that when a deep holdout matte is specified, there are now some new limitations: resolving time may increase substantially when using large pixel filters, and subpixel imager shaders can no longer be used simultaneously.
  • There is a new "excludesubset" parameter, which can be used by any ray tracing shading function to specify a subset of objects to exclude from ray tracing calculations.
  • There have been several improvements to the ray-traced iteration of the subsurface() shadeop:
    • subsurface() now accepts a "maxdist" parameter, if provided.
    • subsurface() can now take a "label" parameter, a la gather() et al.
  • areashadow() now accepts a "maxdist" parameter.
  • There is a new photon mapping shadingmodel: Attribute "photon" "string shadingmodel" ["refractive:ior=..."], which allows users to set the index of refraction to any number greater than or equal to 1.
  • The sho utility supports a new option - -urlscheme - which causes sho to automatically strip the URL protocol scheme prefix before opening the named file.
  • The shader compiler now allows array element assignments via a fetchvar operation (->) from one shader to another.
  • Removed the limitation on the maximum number (128) of photon maps allowed in a render.
  • Ray derivatives in the raytrace hider have been improved.
  • The allocation of radiosity cache and tessellation cache data has been improved. Previously all of the memory for these caches was allocated on first use, causing potentially large memory footprints in the face of light actual cache usage. Memory for these caches is now allocated lazily, decreasing memory footprint for renders that use the caches sparingly.

Bug Fixes

  • A crash caused when rendering RiBlobby in conjunction with highly detailed implicit field DSOs has been fixed.
  • A bug that could cause incorrect images when rendering volumes whose object-to-world transform has a negative determinant has been fixed.
  • Vertex values computed by a implicit field DSO used in conjunction with RiVolume are no longer wrongly multiplied by the field function value.
  • dPdtime values computed by a implicit field DSO used in conjunction with RiVolume now behave correctly when used in conjunction with a moving transform blur.
  • Motion blocks that include the time value of zero now behave correctly.
  • An issue with incorrect bounding of objects with multisegment motion blur, frame shading frequency, and displacement has been fixed.
  • Fixed a bug in areashadow() that could lead to incorrect normal and bias directions.
  • Addressed an issue in the implicit cone plugin that could lead to NaNs.
  • Fixed a bug that could lead to incorrect subsurface scattering results when using "followtopology".
  • The re-renderer now properly uses instanceIds when they are provided during a rebinding edit of a light, addressing a bug in which light instance edits could fail when re-rendering.
  • Passing an incorrect path to bake3d() via the filename parameter no longer causes the renderer to crash. Needless to say, it still won't find the file.
  • Addressed memory leaks that could occur when reading organized point clouds.
  • Fixed a bug that could lead to a crash when using ray-traced subsurface() with the maximum ray depth set to 1.
  • Fixed a bug that could lead to NaNs when using shadow().
  • A bug that could lead to the renderer crashing when an empty array of maps is passed to areashadow() has been fixed.
  • A bug in the provided stdrsl surface shaders that resulted in incorrect displacements has been fixed.
  • Fixed a bug that could lead to extremely slow environment map lookups when using ray-traced occlusion() or indirectdiffuse() with "coneangle" 0.
  • Addressed a bug in -recover mode that could result in artifacts when using multiple displays and multiple cameras.
  • textureinfo() now returns the correct number of array elements when obtaining color spherical harmonic coefficients.
  • Fixed a bug in ptfilter that overwrote the envdir z component with invalid values when using color bleeding, computing spherical harmonics while using a positions file.
  • Fixed a bug that could lead to a crash after tracegroup memberships were removed.
  • Fixed resizing of varying-length array result variables by texture3d().
  • Fixed texture3d() to no longer silently ignore type mismatches between file data and result variables.
  • Fixed a (rare) bug wherein the ray differentials of rays from a grid with most/many points having their run flags "off" could be 0, erroneously.
  • The ray type is now properly taken into account when examining the hitmode attributes on objects.
  • Fixed a bug wherein multi-threaded, multi-host renders via netrender could erroneously deem themselves "finished" before all buckets had been delivered.
  • Fixed a bug in the Python binding that prevented hierarchical subdivision surfaces from working properly.
  • Fixed a bug wherein a co-shaders begin method might leave some points uninitialized within a varying conditional.
  • Addressed an issue wherein remapped imager shaders would not display correctly.
  • Fixed a bug that could result in incorrect primvar values (e.g. s and t) on motion-blurred general polygons and polyhedra if a motion sample time value did not match a shutter boundary time.

Known Issues


Deprecated


Addenda

Docutils System Messages

System Message: ERROR/3 (release_notes/rnotes-16.0.txt, line 1201); backlink

Unknown target name: "subsurface() <subsurface.html##subsurface".

Prev | Next


Pixar Animation Studios
Copyright© Pixar. All rights reserved.
Pixar® and RenderMan® are registered trademarks of Pixar.
All other trademarks are the properties of their respective holders.