Reyes Rendering is Removed
- RenderMan is now based on modern raytracing techniques to create a simple path to beautiful images.
- Only the "raytrace" and "bake" hiders are retained in this release.
RSL is Removed
- The RenderMan Shading Language (RSL) has been deprecated. RenderMan will print a warning if used and return black or artifact.
EXR Orientation has changed
- txmake no longer manipulates input images to conform to the OpenEXR latlong specification. An input image is converted directly to an OpenEXR format latlong texture with no image manipulation. The -extraargs exrlatlong flag is no longer needed or supported.
RiPoints as Spheres
- RiPoints without normals are now treated as spheres when ray tracing. P and N values will be as if the point was a sphere. RiPoints cannot be used for shading models which require bump mapping or tangent vectors (i.e. anisotropic specular models).
Better Defaults for Rendering
- The default hider is "raytrace", default bxdf is PxrDiffuse, and the default integrator is PxrDefault.
- Trace displacements is now on by default.
- The shadingrate default has been increased to improve performance since shading quality is not affected.
- A default value for darkfalloff improves rendering performance for many scenes, especially those with dark areas that were potentially over-sampled.
- New C++ APIs for creating sample and display filters has been added.
Diffuse and Specular Depth defaults have changed
- Originally introduced in as an option, PxrPathTracer now tracks the diffusedepth and speculardepth separately from each other based on which lobe of the BSDF is sampled. Previously rays that have both diffuse and specular contributions increment both the diffuse and specular depths. The new behavior is more intuitive and produces expected results when adjusting the trace:maxdiffusedepth and trace:maxspeculardepth attributes. This comes at the cost of, in some cases, effectively doubling the number of indirect ray bounces which can cause look differences and/or increase render times.
- Matrix variables attached to the geometry can now be accessed by shaders.
- API changes to RixLight that removes erroneous properties (fixed sample count, IES profile, area normalize and light group name) from the base class and accommodates them through the existing GetProperty API.
- It is now valid for RixLightFactory::CreateLight() to return NULL. If so, the light is not created.
- A DestroyLight method was added to RixLightFactory. The renderer will call this when destroying a light.
- Support was added to allow access to arrays of floats/points/vectors/normals/colors which are bound to geometry in OpenShadingLanguage.
- There are new GetBidirFlag() and SetBidirFlag() methods on the RixBXLobeSampled struct, which can be used to signal bidirectional integrator support between BSDFs, integrators, and lighting services.
- The GetInstanceParamTable() entry point for per-instance parameter definition has been removed in favor of an instanceTable entry in the InstanceData to be optionally populated by the CreateInstanceData() call.
- Please note that for displacement shaders when setting a displacementbound, “shader” space is an alias for “object” space.
- Changing offsetS/T of each of the X, Y, and Z tri-planar projections in PxrRoundCube to be 0. The old default was an offset of 1.
- By default, RenderMan no longer combines hits across different instances that share the same Bxdf into a single shading context. This is the more correct behavior if shading variation is desired between instances, but may lead to a loss of efficiency otherwise. Attribute "shadegroups" "attributecombining" may be set to "permissive" to re-enable the old behavior if the instances are guaranteed to be identical in shading.
- The intensity of IES profiles is now directly proportional to the number of lumens per lamp (we ignore input watts). If the number of lumens is not specified, we default to 1700 lumens, the equivalent of a 100W incandescent light bulb. Should you wish to revert to the old intensity computation, you can disable this through a new option : 'Option "user" "int iesIgnoreWatts" '
- Heatmap statistics have been improved visually as well as their numerical results.
- Prman now issues a warning and avoids a potential crash when geometry has s, t, or st primvars with the wrong type.
- Improved error reporting when a -capture output or inline archive rib buffer exceeds the maximum size supported.
- Changes have been made to improve layering workflow with PxrSurface and PxrLayerMixer.
- The memory requirements for heterogeneous volume rendering has been substantially reduced, especially when using many volume samples during single scattering.
- 'directlightinglocalizedsampling' has been deprecated as part of an improved light sampling scheme.
- LocalQueue is now part of the RenderMan distribution.
- An issue with using autocrop and OpenEXR images has been fixed.
- Camera "focusregion" has been deprecated. Its use will now trigger a warning.
- There is now a Delete() callback in the RixLightFactory API.
- Light plugins can now safely return NULL from RixLightFactory::CreateLight method.
- New AOV "float rawID" that passes through integer id values to the display driver unchanged. For example, using: Attribute "identifier" "int id"  on an object will result in the display driver receiving a value that is -nan if the bits are interpreted as a float, but the original 4294699949 is interpreted as an unsigned int.
- Portal Lights will now return white if the DomeLight does not have a texture specified.
- PxrDistantLight now has emissionFocus and emissionFocusTint parameters.
- Removed some obsolete Reyes stats.
- Improvements have been made to the thread scheduling for dense procedurals and meshes.
- Displacement bound stats are now available in expert mode.
- OSL shaders can register a nodeid and classification through OSL metadata
- RiVolumes that use DSO plugins no longer use filtered evaluations. This improves performance in some cases.
- Legacy photon mapping has been removed. Please use the PxrVCM integrator instead.
- OSL no longer generates a warning when it fails to find an Attribute or Option value.
- The OSL getattribute() call now supports fetching primitive variables using the "primvar" object name and special PRman built-in variables such as the tangent vector "Tn" via the "builtin" object name.
- RenderMan now supports up to 12 user lobes in LPE. Previously this was limited to 8.
- The integrators are now responsible for managing the emission from camera visible lights. Previously this was handled by a bxdf.
Bug fixes in 21.0
- Invert T for texture baking now works
- Missing specular reflection on the backside of surfaces with PxrDisney bxdf when rendered with the PxrVCM integrator has been fixed.
- A numerical issue in the SolveSpline() function in RixShadeFunctions has been fixed.
- Fix a crash in OSL optimization when the type is not included in a parameter name.
- Bug fix for crash with multiple FrameBegin/FrameEnd blocks.
- Fixed a bug causing potential for crash when using a deep output display.
- A bug that caused the denoiser to only fail on Windows has been fixed.
- Fixed bug where RixLightFactory::CreateLight returning NULL would crash the renderer
- Raytrace hider stats are now properly included for a render terminated asynchronously.
- Patch "bicubic" primitives that ended up with a very coarse dicing rate (perhaps due to instancing) are now traced correctly.
- Fixed an issue where subsurface scattering might introduce artifacts in the PxrVCM integrator.
- CompTrans now works with any number of indirect samples (before it was working with only 1 sample).
- Fixed a crash when using PxrRamp on invalid positions/colors
- Fixed a mapping error when S and/or T are less than 0.
- Resolved an intermittent crash when loading procedurals concurrently.
- Fix a bug where a tilted lens would result in part of the image being clipped.
- Fixed potential crash when more than 32 volumes are all overlapping.
- Integrator geometric AOVs now respect the Matte attribute.
- Fixed a bug where the commandline -res option would crop instead of scaling if 'Camera "world"' was used in the RIB. This affected RFM generated RIB.
- ...many many more!
RenderMan Pro Server
- Analytical lights placed inside volumes may yield artifacts when made visible to the camera. As a work around, the light camera visibility should be turned off, and a geometry with a similar shape should be used (visible to camera, invisible to transmission and indirect rays), with the proper emissive bxdf.
- It is not possible to access array primvar data in OSL. This will be fixed in a future release.
- It is not possible to read string primvars in OSL shaders. This will be fixed in a future release.
- Using the '.' character in the handle for an OSL shader could cause unpredictable results during re-rendering.
- Instances are not support for baking
- 3d baking: no direct bake-to-ptex support
- PxrBakePointCloud cannot directly render ptex
- No RixPTC/pointcloud API (so PxrBakePointCloud cannot read ptc files)
- Sample/Display filter plug-ins do not have access to lighting services for light dependent effects, e.g. lens flare.
- NURBS and subdmesh geometry render with patchy artifacts during interactive re-rendering.
- Adding new mesh light on existing geometry results in double geometry.
- Camera visibility changes are not respected during Live Rendering.
- In OSL networks feeding the Displace shader, array, struct, integer and string connections are currently not supported. This will be fixed in a future release.PxrSurface does not output correct albedo for use with Denoise. This will be fixed in a future release.
- For PxrUPBP, If the light source is inside a volume, that volume needs to be defined as Volume “box”
- For PxrUPBP, To get a volume caustic, the object casting the caustic needs to have higher intersectpriority than the volume.
- For PxrUPBP, Overlapping heterogeneous volumes are not working yet. (However, overlapping homogeneous volumes do work.) This will be resolved in the future.
- PxrUPBP and PxrVCM may yield slight differences between path tracing, bi-directional path tracing, and VCM/UPBP algorithms.
- PxrPortal may yield artifacts when generating photons for PxrVCM / PxrUPBP. This will be fixed in a future release.
- When attempting to access an array primvar, you must first check the size of the array primvar and allocate the appropriate space. Not doing so may lead to a crash.
- Points and curves cannot have mesh lights attached to them.