Welcome to RenderMan 22.4!

Welcome to RenderMan 22.4. This release introduces improvements to the previous RenderMan.

Please dive right into the release notes below for more detailed information on the latest version of your favorite renderer!

RixRNG Generator class API change requires a recompile of Bxdfs and Integrators for 22.4

What's New



Miscellaneous Changes

  • Additions to "it", the Image Tool

    • The Image Tool, "It" has a new "Commands > Standard Color Chart" menu to create a standard color rendition chart
    • The "Diff..." command in 'It' can now produce absolute valued difference images

    • Added a new Heat Map command to 'It'. This is useful to colorize float AOVs like sampleCount, difference images or CPUTime.
  • Improved optimizations for large OSL networks that share computations across scatter, opacity, and volume evaluation for bxdf's that correctly categorize their inputs using extended RixSCAccess modes

  • Updated PxrSurface to take advantage of extended RixSCAccess modes

  • New optional iridescenceBumpNormal and glassBumpNormal parameters have been added to PxrSurface
  • Exposed default (Ri) error handlers via RixInterface
  • Restored C compatibility of ndspy.h
  • Reduced overhead of accessing textures via OSL
  • Iridescence now participates in the specularEnergyCompensation (its Fresnel, ie EdgeGain vs EdgeFace, is accounted for in the substrate's compensation, exactly in the same way and at the same level as specular and rough specular)
  • Checkpoint recovery is now more verbose by default. Set /prman/recover/verbosity to 1 in rendermn.ini to return the old level. The new default is 3

  • Added built-in "__faceindex" AOV

  • PxrVolume now supports the user lobe "DiffuseAlbedo"
  • PxrVolume has a new extinctionDistance parameter. It is useful to set a very low density in scene-wide volumes and only works with homogeneous float or color density
  • Oren-Nayar (i.e. diffuse with diffuseRoughness > 0) is now more energy conserving
  • PxrOcclusion now obeys Ri:Matte objects
  • Improved shadow results from PxrShadowDisplayFilter

  • The PxrDirt pattern and the PxrOcclusion and PxrDirectLighting integrators now ignore volumes entirely

  • Displacement bound is applied more strictly producing more obvious and easier-to-debug clipping artifacts when misconfigured


  • Fixed possible crash related to long transformation paths

  • Fixed the NP and Nl values provided to display plugins when using a worldorigin other than "world"

  • Fixed a bug causing artifacts in LPE AOV outputs when rendering with more than one indirect sample in PxrPathTracer, in the presence of volumes mixed with glass or subsurface

  • The built-in variable dPdtime is now correctly computed for transform blurred volumes which do not have velocity wired into their shading network

  • Fixed an issue where many threads calling RiObjectBegin at the same time could lead to non-unique object handles being generated

  • Fixed a bug that could lead to failure of portions of a shading network when using mixed C++ and OSL patterns

  • Fixed a bug where deep images may have the negative values in the last channel in the channel list turned positive

  • PxrUnified's adaptive progressive photon mapping feature, broken in previous 22 releases, now works again

  • Fixed an issue where linear curves with motion blur could appear clipped or disappear completely if option curve:minwidth had a value greater than zero

  • Avoid possible crash with stack allocations
  • Equiangular sampling in PxrVolume is now correctly disabled when using an integrator that does not support volumetric single scattering (like PxrVCM or PxrUnified)

  • Improved interpolation of normals in deforming polygons and pretessellated subdivision surfaces. Dark or inconsistent illumination could be seen on object edges when the deformation had a rotation component

  • When PxrBump()'s surfaceNormalMix parameter is greater than 0.0, the resulting bump normal was not normalized. Now it is -- just like in all the other cases

  • Subsurface objects which overlap volume envelopes now no longer render with artifacts (e.g. dark lines) that follow the edge of the envelope

  • Fixed shading derivative calculation for volumes
  • "it" now launches correctly on OS-X
  • Varying opacity/presence now works on RiCurves
  • Fix possible crash with long AOV names
  • Fix rendering artifact in PxrDirt and PxrOcclusion with large numSamples
  • Matte and Holdout attributes correctly compute alpha now with PxrPathtracer, regardless of BXDF
  • Alpha for holdouts when using VCM integrator are now correct
  • Fixed a bug where autocrop combined with negative crop windows could cause the EXR driver to crash
  • Alembic archives now render with correct smooth normals
  • PxrRoundCube was incorrectly scaling its texture filter size and was also impacted by another low-level bug in the renderer
  • RixShadingContext::Transform was incorrectly returning radius^2 instead of radius

API Changes

  • A RixRNG Generator class API change requires a recompile of Bxdfs and Integrators
  • Added projection FOV query from RixRenderState::GetOption as Ri:ProjectionFOV
  • The six RixRNG single-point sample generation functions DrawSample*D() and GenerateSample*D() now have an extra parameter 'i' which is the shading point index. (Same as in RenderMan 21, but with the index as last parameter rather than first.) Most Bxdfs and Integrators use the multi-point versions of these functions, so no change is needed there; nonetheless, this change requires a recompile

  • Fields that are not valid in the RayCtxInfo struct have been removed. The RixRenderState::GetRayCtxInfo() method should be considered deprecated and will be removed in a future release

  • The RixIntegratorContext::GetNearestHits() methods have been extended to allow volumes to be ignored. New versions of these methods have been added which simplify the optional parameters; the old versions should be considered deprecated

  • Add RixIntegratorContext::k_MaxRaysPerBatch to API. This defines the maximum limit of numRays that can be passed to GetNearestHits and GetTransmission

Interactive/Live Rendering Limitations

RenderMan Pro Server Limitations