Prev |
Next
PhotoRealistic RenderMan 12.5
|
|
|
Release Notes
|
These release notes describe significant changes and
enhancements to RenderMan® Pro Server for the 12.5
release over the 12.0 release.
Ray tracing calculations have been dramatically
accelerated, up to a factor of three. These speed-ups will
be most apparent when computing effects that are
ray-tracing intensive, like ambient occlusion and ray
traced shadows. Ray tracing memory requirements have also
been noticeably reduced. There are no changes to the
shading language, so these gains do not require rewriting
or even recompiling your shaders.
PRMan 12.5 extends subdivision surfaces to support
hierarchical editing, which allows for exact control over
components of the subdivision mesh at finer levels of
subdivision. More information can be found in the Hierarchical
Subdivision Surfaces Application Note.
An API to read and write point cloud files has been
added. More information can be found in the Baking
3D Textures Application Note.
The visibility attributes have been simplified and new
attributes have been added to control the behavior of
surface shading at ray tracing hit points.
Attribute "visibility" "int specular" [0|1]
Attribute "visibility" "int diffuse" [0|1]
Attribute "visibility" "int transmission" [0|1]
Attribute "visibility" "int camera" [0|1]
These attributes now simply control the visibility of the
object to a certain ray type. "Specular" rays are those
rays that have an angle less than the value specified by
the "specularthreshold" option, and are shot by
functions like trace() and
gather(). "Diffuse" rays are those that are shot by
functions like gather(), occlusion() and
indirectdiffuse() and have an angle greater than
the "specularthreshold". "Transmission" rays are
those shot by the transmission()
call. "Camera" visibility governs the visibility
of the objects in the scene to REYES (independent of
ray tracing).
Attribute "shade" "string specularhitmode" ["primitive"|"shader"]
Attribute "shade" "string diffusehitmode" ["primitive"|"shader"]
Attribute "shade" "string transmissionhitmode" ["primitive"|"shader"]
Attribute "shade" "string camerahitmode" ["primitive"|"shader"]
These new attributes control whether or not a shader is run at
the hit point of a ray of the given type. The
"primitive" hit mode for specular, diffuse, and
transmission rays means that the shader is not run at the
given hit point. Instead, the Color and Opacity attributes
defined on the object are returned. The "shader"
hit mode executes the surface shader of the hit object to
determine the color and opacity to assign to the hit
point. "camerahitmode" is unique, in that it is
used to give a hint to the REYES shading system as to
whether or not the shader must be run to determine the
opacity of a given object. If it is set to
"primitive" the shading system will obtain the
opacity from the Opacity attribute, which can improve the
efficiency of determining whether the object is occluded
by other objects in the scene or not. "shader"
mode causes the shading system to run the shader to
determine the opacity of the object.
NOTE: These "visibility" and "shade"
attributes must have inline type declarations, since the
old "visibility" attributes are still supported for
backwards compatibility and the inline declaration is
what distinguishes the new attributes from the old.
The RiResource
call, in conjunction with the new RiResourceBegin
and RiResourceEnd
calls, now allows for the graphics attribute state to be
saved and restored at any time in the RIB stream. Saved
attribute states can also be used with the new hierarchical
subdivision surface functionality. PRMan currently
implements the "shading", "transform",
and "all" subsets.
-
Facevarying values are computed correctly for many-sided
polyhedra faces.
-
Incorrect bucket clipping behavior seen on very large
RiPoints has been fixed.
-
Level of detail is now calculated with respect to the
frame camera (instead of the world camera) if the frame
camera is specified as the reference camera for computing
dicing rates.
-
Primitive variables of type hpoint once
again are interpolated correctly for subdivision surfaces.
-
ObjectInstanced curves no longer crash.
-
The handling of knot vectors with illegal multiplicity
of knots has been improved.
-
For most geometric primitive types, the level of detail
calculation is no longer affected by the speed of
geometry. In previous releases, fast moving primitives
would (wrongly) cause the detail used to be higher.
-
The dicing of loop subdivs has been improved, which in
turn improves the quality of derivative
calculations.
-
Problems with ObjectInstanced polyhedra (particularly in
support of facevarying data) have been
addressed.
-
An issue where 1D hair had their normals sometimes
reversed when a negative scale appeared in the camera
transform has been addressed.
-
Ray tracing of geometry that undergoes large motion blur
has been accelerated greatly.
-
Bias issues on ray-traced, nonplanar polyhedra faces have
been reduced.
-
A slowdown introduced in scenes with large undisplaced
polygons has been removed.
-
rayinfo() now sets the "origin" and
"direction" values for the two extra ray hit
shading points.
-
gather() "ray:xxxxx" queries for the properties
of a particular sample, such as
"ray:direction", did not always report values
when the ray was culled for some reason, such as depth
or importance thresholds. The gather "miss"
block will execute in these cases, and now these queries
are filled in with correct values that would have been
used if the culling had not occurred.
-
The string "samplepattern" is now recognized by
gather() as a special category string
(gather's first argument). This string causes
gather() to generate correctly stratified and
distributed rays within the sample cone described by the
subsequent arguments, but gather itself will not actually
shoot any rays. Instead, the gather() "else"
block is executed once per sample, after filling in any
requests for "ray:direction", which can be useful
for shaders that want to do other types of direction-based
lookups but don't want to generate their own sample
distributions.
-
Random number generation used to create ray sampling
patterns has been slightly modified to improve
bucket-parallel rendering. This may produce slightly
different images for the same inputs compared to previous
releases, due to the differences in sampling patterns.
-
A new Attribute "trace" "int atmospheres" [0|1]
has been added, which is similar in spirit to
"trace" "displacements". A strict
interpretation of the RenderMan specification demands
that any Atmosphere shader attached to a surface should
be ignored by rays that hit the surface. Instead, if
the shooting surface has an Interior or
Exterior shader bound, then that volume shader is used
to modify the Ci, Oi found at the ray hit. This new
attribute allows the hit surface Atmosphere to be used
as a fallback if neither Interior nor Exterior are
defined on the shooting surface (mode 1). Thus a wall
which appears foggy to the camera will also appear foggy
in a mirror without having to attach the fog to the
mirror as an Exterior. The old behavior, mode 0, is the
default.
-
calculatenormal() now works correctly during
ray tracing when called on points other than
P.
-
Level of detail was sometimes incorrectly calculated for
occlusion() rays. This has now been
fixed.
-
The renderer now has much better speed and memory
behavior when dealing with renders that access tens of
thousands of texture maps.
-
The generation of deep shadow maps now respects
dirmapping.
-
DtexGetPixelZRange was missing from the deep
texture API. It has been added.
-
BGR targa files are supported better in
txmake and sho.
-
The texture subsystem now properly allows for TIFF
textures larger than 64k x 32k pixels.
-
The generation of deep shadow maps is no longer affected
by setting the depthfilter to
midpoint.
-
The shadow map driver will now correctly write out TIFF
textures less than 16 by 16 pixels in size.
-
An issue with the four vector version of the
environment() shadeop when used inside a conditional has
been addressed.
-
Compression of brick maps has been improved
new brick maps will typically be 20-40% smaller,
and reductions of up to three times have been
seen. Also, the brick map format number has changed from
2 to 4.
-
Brickmaking using multiple input point cloud files now
works correctly; previously, only a fraction of the points
were inserted.
-
The renderer now avoids baking duplicate data when
parallel rendering (-p:2 or netrender).
-
A trailing comma in bake3d()'s displaychannels
parameter no longer counts as a channel.
-
bake3d() no longer tries to interpolate at ray
hit points (even if "interpolate" has been
set).
-
bake3d() no longer crashes if the number of
points in a shading grid is much larger than the default
289.
-
bake3d() now correctly deals with C:/ absolute
style paths.
-
texture3d() can read point cloud files
directly (however, we still recommend using brick map
files for complex scenes).
-
texture3d() no longer will ignore large blurs
when "adaptivefilter" is on.
-
ptfilter now allows varying albedo and diffuse
mean free path length in the subsurface scattering
diffusion approximation. The albedos and diffuse mean
free path lengths must be baked into the input point
cloud file along with the surface illumination.
-
Subsurface scattering diffusion simulation with ptfilter
now requires that micropolygon areas are baked along
with the illumination. See Application Note 37
"Translucency and subsurface scattering".
-
The radius value baked out with each point in a point
cloud now corresponds to the longest micropolygon
diagonal length at the shading point.
-
ptviewer
has a new optional command-line argument: -cropbbox.
-
Icf files can be rendered in parallel again.
-
ptrender
now supports a new command-line argument
-dspyargs, allowing arbitrary parameters to be
passed to the display driver.
-
ptrender
camera projection mode (-project camera) now
works as expected - points are projected to the image
plane of the camera from which the point clouds were
rendered. -splat zsplat has also been fixed and
is a recommended mode for camera projections.
-
There is no longer a limit on the number of
brickmaps that can be accessed during the lifetime of a
render.
-
A new setting /prman/brickmap/maxfiles controls
the number of opened file descriptors reserved for use
by the brickmap subsystem. Any accesses over this
maximum will cause file descriptor recycling to
occur.
-
The memory requirements for brickmake
have been reduced, allowing for the conversion of larger
pointcloud files.
-
texture3d now correctly warns about
incorrect variable access from a brickmap.
-
The performance of brickmap reading has been improved
dramatically.
-
The coordsystem parameter of bake3d
and texture3d can now take the value of
"shader".
-
Issues related to the use of RxTexture3d from a
DSO, or when used in conjunction with point clouds, have
been addressed.
-
bake3d and texture3d now support the
use of the value "_disable" for the
"coordsystem" parameter, which disables the
transformation from current to world space when writing
points to the file. This is useful e.g. when baking (u,
v, 0) data to a point cloud in order to avoid the
culling of points that may transform to nearly identical
positions.
-
Issues preventing the usage of multiframe bakes to
multiple files during -p:2 mode renders have been
addressed.
-
If the texture3d() lookup normal is
(0,0,0), the normals in the brick map are now
ignored. This avoids having to go to deep brick map
levels to resolve incoherent normals. See the 3D
baking app note, section 5.5.
-
The ptfilter ssdiffusion parameter
-unitlength now works correctly.
-
The OpenEXR display driver now supports checkpointing
(enabled by prman -recover), and the PXR24
compressor (selected with "compression"
"pxr24"). Also, it now writes out correct data
windows when crop windows are being used.
-
AOV images no longer show pinprick holes when written
from geometry with zero opacity.
-
AOVs can now ignore the Matte directive.
Adding "matte" [0] to a Display or
DisplayChannel line allows that AOV to entirely ignore
Matte, thus forcing the AOV to show up for that object
in the final image. (By default, "matte" [1] is
in effect the AOV responds to Matte.)
-
The Targa display driver now correctly handles AOVs
without swapping the blue and red channels.
-
The MayaIFF display driver now supports AOVs correctly.
Additionally, its support of 16-bit output (and PRMan's
support for reading 16-bit MayaIFF files) has been
improved.
-
The transform() shadeop now allows transforms
from built in spaces to
ScopedCoordinateSystems.
-
Lightsource shader parameters overridden by explicit
illuminance "send" directives now correctly
inherit the sent variable's detail (uniform vs. varying),
rather than failing with warning S70011 due to
detail mismatch between the sent variable and the
nominal detail of the shader parameter. The explicit
forward-message-passing mechanism for the RSL
illuminance() function was introduced in release 12.0:
illuminance(..., "send:light:lightparam",
var). This override of the nominal parameter detail
is similar to the way attached primitive variables can
override the value and detail of a shader parameter.
-
The area() shadeop now accepts an optional
parameter which indicates the metholodogy used to
compute the area. area(P, "shading") is
equivalent to area(P) when smooth derivatives
are enabled (the default). area(P, "dicing")
computes the exact geometric area without using smooth
derivatives.
-
New attribute
and option
queries have been added.
-
A new "lightcache"
parameter is supported by the illuminance
construct, which allows more fine grained light shader
cache control (rather than requiring the use of "P=P"
prior to calling multiple illuminance statements).
-
gather, illuminate, illuminance,
solar no longer have an arbitrary limit on the
number of possible arguments.
Strings in RIB files may now contain "variables" which are expanded
when the RIB is parsed by the renderer. These are references to Attributes
and Options which are in scope at the time that the string is parsed.
For example:
Attribute "user" "string mytexsuffix" ["daytime"]
...
Surface "mood_wall" "string texname" ["mood${user:mytexsuffix}.tex"]
The dollar-sign ($) in this example is the indication to the RIB parser that it should
look for an expandable name. The following variable styles are allowed:
$name ${name} |
all attributes, then options, are searched for "name"
("$Frame" is the current frame) |
$namespace:name ${namespace:name} |
attributes, then options,
of the particular type are searched for "name" (e.g. "user:var") |
$qualifier:namespace:name ${qualifier:namespace:name} |
the Attribute or Option qualifier specifies exactly which name to query
(e.g. "Attribute:user:var") |
Since the dollar-sign was not previously "reserved"
for this use, it is possible that existing RIB files may have have strings containing
it which should not be subjected to this kind of expansion. Therefore, this is an
optional behavior which must be enabled by specifying the distinguished
"name expansion" character in either rendermn.ini or as an Option at the top of a
particular RIB file:
rendermn.ini: /prman/ribvarsubstchar $
inline in RIB: Option "ribparse" "string varsubst" ["$"]
-
An issue that caused catrib to report bad error
messages (e.g., P01001 NO MESSAGE: can't open message
file) has been fixed.
-
Issues related to combined shading and the vpvolumes
shading strategy have been addressed.
-
The vpvolumes
shading strategy now correctly takes surface
orientation into account when using the normals to
determine whether Interior shaders can be applied.
-
The RiClippingPlane, RiContext, and
RiGetContest symbols are now properly available
to DSOs.
-
RiClippingPlane now functions correctly when
using orthographic projections.
-
The zmin and zmax pixel filters now
work correctly when the Display they are attached to has
"matte" [0] as well. Note that in this
scenario, a primary display of "z" will also show
"matte" [0] behaviour as well, which is a
limitation.
-
Linux builds are now able to better report peak memory
usage up to 4 gigabytes. Note that beyond 4 gigabytes,
memory statistics may be inaccurate this is a glibc
limitation, not a PRMan limitation.
-
Timing statistics are now accurately computed per frame
on Windows.
PRMan 12.5.1 Changes
- A memory corruption bug that caused unpredictable
results when using occlusion() or indirectdiffuse()
on 1D curve primitives was addressed.
- The gather() parameter "maxdist" may now be
either uniform or varying.
- The gather() parameter "othreshold" is now
only used to determine when automatic ray continuations
should terminate. Its "reciprocal" is no longer used
to decide whether a ray has accumulated enough opacity
to be considered a hit or a miss; instead, a new gather
parameter, "ohitthreshold" now controls this.
- A bug in the shading language illuminance("send:light")
message passing mechanism that would sometimes cause light
parameters in unintended lights to be altered was fixed.
- Several uniform vs. varying tests have been improved
in the shading language illuminance() function related to
"light:varname" and "send:light:varname".
- The special "raytrace" texture name parameter to the shading
language functions shadow() and environment() is no longer
matched for slight spelling variations.
- Added RiSystem
to request execution of arbitrary commands
from within the context of the RIB stream.
This can be disabled via rendermn.ini:/prman/RiSystem_ok 0
-
A new Option
"shutter" "int clampmotion" has been added which
modifies the way motion blur is interpolated relative to
shutter boundaries.
-
The performance of ray-traced curves has been improved.
-
A new creasemethod
tag has been added to hierarchical subdivision surfaces,
allowing for Chaikin's curve subdivision algorithm to be
used on multiedge creases with different edge weights.
-
Problems with ray-traced hierarchical subdivision surfaces
losing attribute edits on faces have been addressed.
-
ptmerge now uses the correct matrix when combining
point clouds, allowing the result to be correctly visible
in ptviewer or sho.
-
ptviewer correctly displays baked vector or normal data.
-
PRMan's statistics output now displays the amount of time
spent in I/O for brick maps.
-
TIFF textures are no longer opened using
mmap(). On some platforms, in situations where
very large TIFF textures are being used, this can greatly
increase the amount of memory available to the renderer.
-
The renderer now has more graceful behavior when confronted
with more than 4 coincident surfaces. To avoid a very
expensive compositing operation, the renderer now uses a
better approximation which works well if the surfaces all
have approximately the same opacity.
-
Shadow maps (both the standard and deep types) can now be
rendered correctly with CropWindows (the result is
treated correctly by the renderer when read back in with
shadow()).
-
The renderer no longer crashes when ray tracing a scene
containing only a single RiProcedural.
-
txmake now by default preserves the bit depth of
the input image when writing out Pixar format textures. (It
already did this for TIFF format textures.)
-
Issues related to deep shadow renders with midpoint
depthfilters have been addressed. The deep shadow still
ignores the midpoint depth filter, but the primary pass
should now have correct data.
-
Ray tracing is now better behaved when used with
multisegment motion blur. Previously, rays were launched
with times outside the current motion blur segment time,
which often resulted in spurious hits or misses.
-
dsview
now updates the pixel window on click.
-
A new Hider
option "int maxvpdepth" has been added, allowing
for control over the maximum number of visible points
considered for compositing or deep shadow map creation.
-
A new error metric for the occlusion() and
indirectdiffuse() functions, "maxvariation", has been added. The error
metric determines where the hemisphere must be sampled
(which is time-consuming) and where nearby results can be
interpolated (which is very fast). This new error metric
is better and more intuitive than the old "maxerror" error
metric, and should be used instead. See the documentation
of occlusion() and indirectdiffuse() in "built-in
functions" for more info.
-
A new parameter for occlusion() and indirectdiffuse(),
"samplebase", has been added. It specifies the jittering of the hemisphere
ray origins (as for gather). The default value is 0 (no
jittering). A value of 1 corresponds to jittering over the
size of a micropolygon.
-
The indirectdiffuse() and occlusion() functions used to
always shoot rays of type 'diffuse'. We now assign their
ray types the same way it's done for gather(): the ray type
is 'diffuse' if the coneangle is larger than the
specularthreshold option, and 'specular' otherwise.
-
The indirectdiffuse() and occlusion() "hitmode" "primitive"
used to get the color/opacity from the hit object's
Color/Opacity attributes. Now interpolated values of the
vertex variables Cs/Os are used instead (if present), and
the attributes are only used if those vertex variables are
not present.
-
The extern keyword can now be applied to variable
length arrays in the shading language.
-
The limits:othreshold and limits:zthreshold options
now return the correct type, color, when queried from the
shading language.
-
The size of a macro definition has been bumped to 128K in slpp.
-
Issues with the radii computed by bake3d() when
shading 1D hair and points have been addressed.
-
The renderer now supports the use of multiple
attribute state subsets when performing a resource
restore.
PRMan 12.5.2 Changes
-
Hierarchical attribute edits on top level, extraordinary
faces of Catmull-Clark subdivision meshes have been fixed.
Note that Loop subdivision meshes still have issues with
these edits on top level, extraordinary faces; a work-around
is to ensure all such faces have been triangulated.
-
Brick map improvements.
- A new brick map format that better
deals with incoherent normals, data from both sides of a
thin surface, and baking on doubleshaded geometry has been implemented, and the
brick map format number has changed from 4 to 5. More
details can be found in section 5.4 of the Baking
3D Textures application note.
- Better filtering
during lookups: the brick map filter is no longer
constrained to being a cube; the filter size can now differ
in the x, y, and z directions. (This corresponds to the
rectangular filters used for 2D texture lookups.)
- The
bricks stored in the brick cache are now more compact; for
a given cache size the brick capacity will be higher.
- The texture3d() "lerp" parameter has been fixed.
- The
brick map I/O and cache statistics have been improved.
-
A new optional parameter "hitsides" has been added to the
gather(), trace(), transmission(), occlusion()
and indirectdiffuse() functions. "hitsides" can be
"front", "back", or "both". When "hitsides" is "both"
(the default for backwards compatibility), rays can hit
both the front and back side of one-sided surfaces. When
"hitsides" is "front", there is only a hit if the dot product I.N
is negative. When "hitsides" is "back", the dot product I.N must be
positive.
-
A new optional parameter, "environmentcolor", for
indirectdiffuse() has been added. (The parameter already exists for
occlusion().) This parameter makes it possible to mix and
manipulate color bleeding and environment illumination
independently of each other, either in shaders or in
post-production.
-
The OpenEXR display driver no longers writes channel names
containing three-digit number sequences. This may affect
the ordering of color channels (depending on the API used,
they may be sorted alphabetically, which will be in BGR
order).
-
A bug introduced in 12.5.1 that caused /prman/hider/mpcachedir
settings in rendermn.ini to be ignored has been fixed.
-
The dtexEvalPixel function (part of the deep
texture API) no longer returns NaN results on coincident
depth samples.
-
Support for Targa and BMP source images has been improved.
-
The ray tracing system's support for interpolated Os on
geometry has been fixed.
-
Printing to stderr in a RunProgram procedural on Windows
now works as expected.
-
Issues with the DisplayChannel call not correctly
parsing inline declarations of filter and
filterwidth have been addressed.
-
A problem handling early subprocess termination in -p:2 renders
has been addressed. In some situations, this may have resulted
in infinite "recvfrom" loops in the master process.
-
A problem involving skipped execution of some lightsource shaders
at ray hit points under unusual circumstances has been fixed. The
unlit portions of the affected object would sometimes appear to
be missing in reflections.
-
Variable substitution in RIB string paramaters is now properly disabled
in inactive branches of IfBegin-Else-IfEnd blocks.
-
A ray tracing sample ordering problem that sometimes caused very
bright or dark spots scattered across dense meshes has been fixed.
-
A problem parsing trace group membership names has been fixed,
it would sometimes cause membership lists to be truncated in
binary RIB files.
-
A problem fetching certain user attributes from ray-hit points using
gather has been fixed. The problem only affected "attribute:varname"
fetches of 3-component values.
-
Objects for which the "vpvolumes" shading strategy attribute
is set now exhibit better small-grid combining behavior during regular
surface and displacement shading.
-
RiInterior shaders executed on regular camera-visible geometry via the
"vpvolumes" shading strategy will now properly be called to
execute on sub-intervals within their volume region when non-vpvolume
objects are "floating" within it.
-
Attribute look-ups from Interior shaders in vpvolumes mode now always
properly return values from the attribute scope of the object to which
the shader is attached, which is not always the same object that
defines the end of the volume interval to be shaded (P).
-
A linking problem for the point cloud API has been fixed:
linking with a dummy drand() function is no longer required.
-
The random number seed for hemisphere sampling has
changed, so noise patterns in ambient occlusion and
indirect diffuse results will be different. This change was
necessary to fix systematic noise that occurred for very
high frame numbers. The change also makes hemisphere
sampling slightly faster.
-
Fixed incorrect samplebase size on triangular grids. This bug occasionally
caused, for example, splotchy ambient occlusion on polygonal models.
-
Baking on implicit surfaces without specifying a radius per
baked point caused PRMan to crash; this has been fixed.
-
In rare circumstances, the data baked from a shading grid
would not be written to the point cloud file; this 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. |