Introduction |
New Features |
Performance Enhancements
Miscellaneous Changes and Bug Fixes |
Deprecated
Changes since 13.5
Welcome to RenderMan 13.5!
Once again, the latest release is a significant step forward on the evolutionary
path of our world-renowned rendering technology. Here are the highlights of
Release 13.5. Follow the hyperlinks to learn more details behind the new
features.
New Features
- Shader Objects and Co-Shaders
- Shaders can now have member variables and multiple methods.
For example, a surface shader can define displacement and opacity
methods, and share state with them via member variables.
- Shaders can call methods and read member variables of other
shaders. For example, an illuminance loop can be replaced by
a for loop that calls a method in each light shader, and a
light shader can call methods in the surface shader.
- Scene descriptions can now include co-shaders that allow
custom shading pipelines to be expressed in the shading language
itself. For example, layers of a surface appearance can be expressed
as separate shader instances, which are combined by a shader that
calls the displacement, opacity, and surface methods of each layer.
- Multi-Camera Rendering
you can now render a frame from multiple viewpoints simultaneously in a
single pass, in far less time than it would take to render the frame in
multiple passes.
- Arbitrary Bucket Orders
you can now choose different bucket rendering orders with:
Option "bucket" "string order".
- Other New Shading Language Features
RSL now features resizable arrays, nested return statements, short-circuiting logical operators, and more.
- More flexible photon emission and scattering
photon emission and scattering can be controlled by point clouds,
making photon mapping possible for more types of light sources
and surfaces (for example textured surfaces).
- pixar.license The 13.5 release makes
use of a new licensing system, which includes a new license
file format and a new PixarLicenseServer for floating
licenses. Sites will need to install the new server in
parallel with their old server if both 13.5 and older releases
will be used simultaneously. License "host-IDs" are likely the
same as before, with the exception of FlexLM dongle-based IDs,
which cannot be supported by the new system. There may be
Alfred or other queuing system integration implications when
using PixarLicenseServer. Please see the licensing
documentation for installation and other details.
Performance Enhancements
Miscellaneous Changes and Bug Fixes
Geometry
-
An issue with non-raster oriented dicing for Loop
subdivision surfaces resulting in infinite splits has
been fixed.
-
The new attribute Attribute
"procedural" "string attributes" allows
procedural primitives to override their own inherited
graphics state, without affecting the graphics state
inherited by contents of the procedural.
- Fixed a crash that could arise when reporting statistics for
implicit surface plugins.
Hiding and Visibility
-
Dithering patterns are now repeatable even with changed
CropWindow or bucket order settings. They are
also now repeatable in multithreaded runs.
- A new hider "opengl"
has been added which takes advantage of OpenGL
acceleration. This hider supports all geometry types,
pixel samples, arbitrary output variables (depending on
OpenGL implementation), and pixel filter usages. It has
limited (inaccurate) support for transparency, trim
curves, and deep shadow output. It currently does not
support motion blur, jitter, depth of field, usage of
depthmasks, arbitrary clipping planes, CSG, matte objects,
and visible point shading.
- The "paint" and "zbuffer" hiders are
supported again, and have been improved. Previously, these
hiders did not provide support for RiCurves,
RiPoints, RiPixelSamples,
RiPixelFilter, RiTrimCurve, and crack
elimination; this is no longer the case. Motion blur,
transparency, jitter, depth of field, arbitrary output
variables, depth masking, arbitrary clipping planes, level of
detail, CSG, matte objects, and visible point shading are
still not supported in these hiders.
- Hider "hidden" "maxvpdepth" now works as a limiter on visible
point memory, and not just as an upper bound on the depth complexity of
deep shadow maps.
- Errors seen when using sigma
hiding in conjunction with depth of field or points have been
corrected, and the speed improved.
- A new Attribute
"stochastic" "int pointfalloff" [0|1] adds a
transparency falloff for RiPoints, which can be shaped with
the "stochastic"
"pointfalloffpower" option to the
"stochastic" hider.
Texture and Shadow Maps
- The texture() function can now use elliptical
filter regions. This reduces blur in extreme cases such as
highly warped texture coordinates, grazing viewing direction,
or extreme perspective. Set the "filter" parameter
to "ewa" (for 'elliptical weighted average') or add
the line '/prman/texturefilter ewa' to the rendermn.ini
file.
-
Fixed crash during read of invalid texture files.
-
The jittering used during shadow lookups is now
properly consistent through multithreaded renders.
-
The RxShadow and RxSoftShadow calls,
when used with a single input point, now apply jitter
correctly.
-
The Rx texture related functions now handle the
same set of parameters as the equivalent texture related
shadeops; the added parameters include "filter",
"width" and "zlerp".
-
The filtering of highly blurred cube-face environment map
lookups has been improved, particularly in the corners
and along the cube edges. Previously, the returned result
was too dark.
Point Clouds and Brick Maps
-
We now allow more than 64 variables in point cloud files and
brick maps. This enhancement required a prototype change in
the point cloud API function PtcOpenPointCloudFile(),
from:
PtcOpenPointCloudFile(..., char **vartypes, char **varnames)
to:
PtcOpenPointCloudFile(..., char ***vartypes, char ***varnames)
RMAN_POINTCLOUD_API_VERSION can be used to distinguish
between the old and the new API version: it is undefined or 1 in
PRMan 12.5 and 13.0, and 2 in PRMan 13.5.
- If a brick map contains P, N, s and t data and has a shader that calls
the texture() function, appropriate texture filter widths will be
automatically computed. (In earlier releases, those filter widths would be
0, leading to aliasing artifacts.)
- Brick map geometric primitives with opacity data can
now be used to cast semitransparent ray-traced
shadows.
-
Point-based occlusion() can now be used to compute reflection
occlusion. Point-based indirectdiffuse() can now be used to
compute glossy reflections. Examples can found in sections
2.6 and 3.4 of the
Point-based application note.
-
A bug was fixed in the clamping of point-based occlusion() for
uniform distribution. Now there is better clamping and hence
less over-occlusion. (No change for cosine distribution.)
-
Cosine weighting is now used for voxel data accumulation
when rendering brickmaps as geometry which have supplied
normals. This eliminates a class of quadrant artifacts.
-
A crash seen when shading brickmap geometry which
occured in shaders which access __gdu and
__gdv has been fixed.
-
The renderer now provides more comprehensive memory
statistics for brick maps and point clouds.
-
Garbage values are no longer copied into texture3d()
variables if the lookup failed.
-
Ptfilter's -samplebase parameter for occlusion and colorbleeding
has been fixed.
- brickmake now supports the option
-addpn to allow
automatic creation of P and N channels in a brick map without
requiring P and N channels in the input point data.
-
Duplicate baked grid points (which can occur when
netrendering) emitted by the pointcloud driver
can be eliminated by setting the parameter
EliminateDuplicateGrids to 1 on a
DisplayChannel line.
Shading Language
- Most shader error messages now specify the offending source file
and line number (provide the shader was compiled by version 13.0 or
higher of the shader compiler). This feature increases shader
definition memory by 5-10%, since is requires retention of debugging
info. Use 'Option "shading" "debug" [0]' to disable it, or
set /shading/debug to 0 in rendermn.ini.
- Shader objects are cached differently, which might affect shader
memory usage. The size of the shader object cache can be controlled
by a new option ("shading/objectcache").
- The compiled shader file format (SLO) has changed. Old SLOs will
continue to work, but new SLOs will not work in older versions of the
renderer unless they are compiled with the new "-back"
command-line option.
- The shader compiler now typechecks unused functions, which were
previously ignored. Functions are now typechecked in the order in
which they are declared, rather than the order in which they are
called.
- RSL array initialization is now faster and more compact.
Previously an initializer for an array of length N was compiled
into N assignment shadeops. Array constants are now used instead.
- Floating point constants in compiled shaders now have increased
precision.
- Constant folding has been slightly improved in the shader
compiler.
- RSL printf and format strings can now use %i in addition
to %d.
- The global variables "time" and "dtime" are now
varying in RSL. For backwards compatibility, shaders that rely on uniform
time can be compiled with a new "-utime" command-line option.
- Fixed a crash that could arise if the wrong shader type is given
to RiSurface, RiLightSource, etc.
- Fixed a shader compiler bug that corrupted arguments for an
illuminance loop with an empty body.
- A displacement memory corruption issue involving displacement shaders
with output arguments, which could lead to a crash, has been fixed.
- Fixed a typechecker bug that permitted assignment of a scalar to an
array variable.
- Fixed a crash that was caused by a fixed-length format string buffer
in the printf shadeop.
- The renderer now warns if lights are called from a
displacement shader (or method), or from an opacity,
prelighting, or postlighting method. The state of lights (e.g.
AOVs and member variables) is sometimes reset between
displacement and surface shading, so allowing displacement
shaders to call stateful lights can lead to potential
inconsistencies.
- Fixed a message passing bug that affected varying float arrays of
length two.
- Added compiler option "-nolintuov" to disable warning about
relying on input values of uniform output arguments. The warning can
also be disabled by adding "#pragma nolint" before the argument
declaration or use.
- An optional method parameter whose length is unspecified can now
have a default value of any length.
Ray Tracing
- Constructive Solid Geometry (CSG) is now fully supported
for ray tracing.
- The gather() function can now take an array of explicit
ray directions. See the new section
"Explicitly
specifying gather directions" in the updated ray tracing
application note.
- A special token "*" is now supported by Attribute
"grouping" "string membership". Primitives with this
membership will be hit-testable by any ray, no matter what the
subset of that ray, or even if the ray doesn't specify a
subset.
- An error in the computation of the I vector when shading
displaced ray hits has been fixed.
-
Many raytracing pinholes (false ray misses due to floating-point
accuracy) were fixed.
-
We now ensure that the I vector can never be (0,0,0) at
ray hits. (This avoid NaNs if, for example, dividing by length(I).)
- Fixed the shading language rayinfo() function for
the queries "direction", "origin",
"length" which did not always return correct
values at all ray hit points. The fixed version will sometimes
generate slightly different results than before, even in
previously "working" cases; for example directions may be
normalized where they were not before. The "origin"
query now requires a varying output argument to account correctly
for varying "I". Also see the deprecated
section below for a way to compute these values directly,
likely with better performance.
-
The normals for raytraced RiSpheres computed when the
world to camera transform has a negative determinant is
now correct.
-
Shading for ray traced NuPatches with u/v parameter
ranges outside the range of [0, 1] has been fixed.
Displays
- Deep shadows can now be output as the primary display.
- The min, max, zmin,
zmax, and average pixel filters now
allow pixel filter size greater than 1x1. Note that this
may result in differences for scenes that did not
explicitly set the pixel filter; output images may now be
inheriting the default pixel filter width of 2x2, rather
than resetting the pixel filter width to 1x1. An issue
with the zmin/zmax filter related to geometry moving in
depth has also been fixed.
- "a" as an AOV now works identically to
"a" in primary displays. Previously it obeyed
incorrect compositing rules.
- Issues with OpenEXR display drivers and bugs in libz on Unix platforms have been resolved.
- The average and max pixel, and all
depth filters no longer take into account AOV or depth
values from pixel samples which should be considered
invisible due to the opacity threshold limit.
Other
Deprecated
Changes between 13.5 and 13.5.1
Enhancements
- The performance of the renderer in scenes involving ray tracing at deep levels has
been improved.
- There have been two important changes to the
Point
Cloud API:
- PtcOpenPointCloudFile() has been reverted to the pre-13.5
signature and has been superceded by the new function
PtcSafeOpenPointCloudFile().
- The RMAN_POINTCLOUD_API_VERSION is now 3.
- The EliminateDuplicateGrids parameter is now also implemented for the
RIB display driver.
Bug Fixes
- A bug related to the bounding box for multisegment transformation-blurred
procedurals, which could result in inadvertently curtailed blur, has been fixed.
- A bug that could cause the renderer to crash when using a dicing camera without
specifying FrameBegin/FrameEnd has been fixed.
- The -recover mode for display drivers is now functional again. This
option works best in horizontal bucket order with the current TIFF and OpenEXR
display drivers.
- An issue with the brickmake and ptfilter utilities that could
cause name clashes has been addressed (Windows only).
- The Lerp parameter is (once again) properly being turned on with
Disk and Gaussian filters.
- Calling RxBake3d() in a DSO clean-up function no longer crashes.
- Shader class definitions for volume/atmosphere shaders should define a method
named volume as their entry point. Using atmosphere as a
method name has been deprecated.
- Fixed a shader compiler crash involving function redefinition.
- Fixed a bug involving ray-traced shadow calls in new-style light methods.
- Fixed compiler bug in reporting syntax errors when compiling multiple files.
- For backwards compatibility, L is now cleared before executing a light.
- Fixed a bug in sloinfo that omitted the square brackets in the type of
an array parameter with unspecified dimensions.
- Fixed a shader compiler deadlock in certain error conditions (Windows only).
- The RiShader and RiCamera functions, inadvertently stripped, have been restored.
- Several deadlocks in procedurals, introduced in the 13.5 release, have been fixed.
- Fixed a sigmabuffer memory corruption when using AOVs in multi-frame renders.
- Fixed a memory corruption bug when using netrender to create deep shadows.
- Fixed an error message to correctly warn when a 13.0 version of netrender
tries to render to a 13.5 version of prman.
License 5.0.2
- License server handling of check-ins from processes that end prematurely has been
improved. Servers prior to license-5.0.2 would sometimes cause these seats to remain
unavailable for 10 minutes.
- Recognition of multiple hostids on a single host has been improved.
Changes between 13.5.1 and 13.5.2
Enhancements
- There is a new parameter to texture3d():
maxdist.
When performing a lookup in a point cloud, data points that are further away than
maxdist are ignored, and when performing a lookup in a brick map, voxels
that are further away than maxdist are ignored.
- The precision when ray tracing four-sided polygons and polygonal meshes has
been improved.
- The sloinfo utility now accepts shaders with or without a .slo extension.
Bug Fixes
- Several critical bugs introduced in 13.5.1 related to multithreading, point clouds,
ptfilter, bake3d, and texture3d have been fixed.
- A bug that could cause dsview to crash has been fixed.
- An issue regarding threading and displacement shaders executed during prehiding
has been resolved.
- Fixed a bug that inadvertently culled objects that take advantage of the
midpoint visibility attribute.
- A bug related to edge conditions in -recover mode that could inadvertently
erase fully-rendered images has been fixed.
- A memory corruption bug with Deep Shadows has been fixed.
- Several threading deadlocks and race conditions have been eradicated.
- A change in bake3d density introduced between 13.0 and 13.5 has been
rectified.
- A bug that could cause artifacts with displaced, double-shaded geometry has been
fixed.
- Restored netrender exit status zero for cases where the image completes
successfully despite having some unreachable remote servers.
- The netrender client now waits more patiently for remote prman
to clean-up and exit before requesting kill signals from alfserver,
alleviating some end-of-frame signal handler problems.
- A critical bug that could cause a crash when using occlusion() or
indirectdiffuse() with a maxdiffusedepth larger than 1 while
evaluating shaders at the ray hit points (diffusehitmode = shader) has
been fixed.
Changes between 13.5.2 and 13.5.3
Enhancements
- Memory consumption for texture3d() lookups in point clouds has been
significantly reduced.
- The RSL getshader function now returns the most recently bound co-shader
if the specified handle is not unique.
- Typechecking for the RSL gather statement has been improved.
- An RslPlugin function table, which is normally named RslPublicFunctions,
can now be named mydsoPublicFunctions, where
mydso is the base of the DSO filename. This addresses
symbol collisions that arise when RTLD_GLOBAL is used.
Bug Fixes
- A bug that could cause artifacts in secondary outputs from interior shaders has
been fixed.
- Raytracing against polygons/BLPs with no vertex normals when using hitsides
"front" or hitsides "back" now provides correct results.
- A problem with Attribute "grouping" "membership" has been addressed.
- A bug that could cause a crash when rendering polygons using ObjectBegin/End
and ObjectInstance has been fixed.
- A problem with ray-traced occlusion() environment map lookups when using
small coneangles that could cause unwanted blurring has been remedied.
- Certain performance issues with calls to latlong envmaps when inside a conditional
have been fixed.
- ptfilter no longer crashes if subsurface scattering uses a negative albedo.
- A bug that could cause a crash when maxdiffusedepth + maxspeculardepth is
greater than maxdepth has been eliminated.
- prman -recover mode now works correctly for CropWindows.
- A bug that could result in a crash when certain corrupt deep shadow files were
encountered has been fixed.
- NURBS with degree higher than 25 no longer crash.
- A shader compiler bug that allowed illuminate() to be called with no
arguments, which leads to uninitialized L values, has been fixed.
- Fixed a bug in RiShader that prevented procedurally generated co-shader handles
from being matched by the RSL getshader() function.
- Fixed an RslPlugin bug that could cause a crash when iterating over a varying
array of matrices.
- The statsdiff.py script now functions as expected again.
- A shader compiler bug that prevented Ng from being correctly updated
when assigning P in a new-style displacement method.
- Fixed a bug that was causing the opacity method to be skipped in a shader that
also defines a displacement method if no displacement bound is specified.
- Fixed a long-standing bug in the RSL illuminance statement that made fetching
uniform variables unreliable in illuminance loops inside varying
if statements. Please note that this fix could introduce
image differences.
- Fixed a crash that could occur when wavelet noise is called with a zero
filterwidth.
- Fixed a compiler bug that prevented methods from being called like ordinary functions from other methods in the same shader.
- The RSL spline function now accept arrays of knots.
- A crashing bug related to missing faces on subdiv meshes has been fixed.
- Fixed a bug that could cause artifacts in shadow maps when using the midpoint
depth filter in conjunction with opacity maps.
- Pixel filters are no longer wrongly clipped against image or crop boundaries.
- Performance of scenes with empty buckets and/or many arbitrary output variables
has been improved.
- A bug that could cause incorrect alpha values when using shutter opening controls
for motion blur has been fixed.
Changes between 13.5.3 and 13.5.4
New Features
- Users can now assign a float[16] array to a matrix variable in RSL.
Enhancements
- Memory consumption when rendering in -recover mode has been improved.
- The Sigma Buffer's handling of non-color AOVs has been improved.
Bug Fixes
- The handling of rib file names containing spaces or backslashes when using
netrender in "-F" (server i/o) mode has been fixed.
- The renderer will now issue a warning when using subdiv stitch curves to define
a stitch between non-motion-blurred and motion-blurred geometry.
- A bug that could cause varying matrix operations in RSL plugins to operate
incorrectly when called inside a varying "if" statement has been fixed.
- A bug related to attribute edits on hierarchical subdivision surfaces, which could
cause the renderer to segfault when executing multithreaded renders, has been fixed.
- A bug that could cause netrender to stall when rendering stereo images
has been fixed.
- A light caching bug that could cause random highlights to show up in renders
has been fixed.
- A bug that would cause the renderer to crash when rendering deep shadow maps
from multiple cameras has been fixed.
- A bug that would cause the renderer to crash when rendering multiple cameras
in a multi-frame RIB file has been fixed.
- A bug in which a render interrupted twice would not work as expected with
-recover has been fixed.
- A crashing bug when rendering with RunPrograms in multithreaded mode
has been fixed.
- A bug that could cause certain grids to be dropped when rendering motion-blurred
scenes that use Option "shutter" "offset" has been fixed.
- A bug that caused lookups using the attribute() and option()
shadeops to fail with arrays of length one has been fixed.
- A bug that caused renders of multiple CSG objects to fail has been fixed.
- A threading deadlock bug when using co-shaders has been fixed.
- A bug that would cause a core dump when an RSL method was called with wrong
number of arguments has been fixed.
- The global shader variables "this", "surface", and
"light" were inadvertently varying, which prevented them from being passed
as parameters or copied.
- A bug that could cause netrenders of deep shadow maps to fail has been fixed.
- A bug that could lead to a crash when executing multithreaded netrenders (or
netrenders to multiple hosts) of point clouds has been fixed.
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. |
|