Prev |
Next
PhotoRealistic RenderMan 11.5.3
|
|
|
Release Notes
March, 2004 |
These release notes describe significant changes and
enhancements to Pixar's RenderMan® for the 11.5.3 release over
the 11.3 release.
The renderer can now utilize multiple CPUs on the same system to
process a frame in parallel. The new mode can be enabled
explicitly on the command-line with the new "-p"
option:
prman -p frame1.rib
By default, the render will automatically detect the number of CPUs
on the system and apply each one to part of the image. You can also
specify the degree of parallelism by giving an explicit count:
prman -p:4 frame1.rib
The multi-processor behavior can also be enabled implicitly through
rendermn.ini by adding the following setting
/prman/nprocessors 0
A value of 0 (zero) indicates that all available CPUs should be
used, otherwise a positive integer can be used to specify a fixed
degree of parallelism; a negative integer specifies the number of
CPUs to leave unused, i.e. -1 would mean "use all but one"
of the available CPUs.
Note that this rendering mode consumes licenses in a "pairwise"
fashion: in other words, each pair of processors will check out
one license.
A sophisticated improvement in scene analysis can substantially
reduce the time spent in shader execution. The performance increase
becomes more dramatic as scene or shader complexity increases.
Computing indirect illumination and ambient occlusion is dramatically
faster typically by a factor of two. In addition, we now bake more
indirect illumination and ambient occlusion information (without using
longer compute time) in icf/ocf files, which results in much more robust
results when reusing the baked values in animations.
Baking has been substantially improved in PRMan 11.5, and there have been
many changes to how files are written. Irradiance cache files now store
more data, which results in a higher quality representation of the effect,
but also results in a larger cache file. Note that this quality
improvement comes at no performance cost. More data is stored; no more
calculations are performed than before. For more information refer to the
Global Illumination App
Note #35: Baking Ambient Occlusion & Indirect Illumination
Irradiance cache files are now written out on-the-fly during
rendering (baking) instead of when the entire render has finished.
Baked cache files can now be merged using txmake. Here is an example:
txmake -occlusion cache1.ocf cache2.ocf cache_combo.ocf
For more info on combining caches see: App
Note #35: baking occlusion for a camera fly-through
Enhancements have been added to "deep
shadowmaps." Most notably, deep shadows now have an open API
for implementing further customizations.
See Application
Note #38: Deep Texture API for more information.
PRMan now has an option to force the hider to emit every subpixel into
the final image:
Hider "hidden" "subpixel" [1]
This generates an image which is PixelSamples -times larger,
but has every unfiltered color and depth available for perusal. For
example, asking for a 640x480 image with PixelSamples 4x4, but with
subpixel output, would generate a 2560x1920 unfiltered image.
Note that this option does not work with arbitrary output variables.
PRMan's normal hiders compute visibility at the image plane; this new
hider computes visibility at a frontier defined by depths in a shadow map.
The RIB syntax for using this new z-stencil hider is as follows:
Hider "depthmask" "zfile" ["shadowmap.sm"] "reversesign" [0] "depthbias" [0.01]
The "zfile" option, takes a shadow map file (created with
txmake -shadow or RiMakeShadow ). This new hider will then cull surfaces
which are nearer (or farther) than the frontier defined by the depth
values in the shadowmap.
The parameter "reversesign" controls whether z-depths greater
than or less than the depth mask are culled. The default value of 0 culls
all geometry in front of the depth mask. Setting this parameter to 1
allows the depth mask to be used to cull geometry behind the mask.
The parameter "depthbias" controls the amount of bias applied to
the mask. The default for this parameter is 0.01. Raising this value will
prevent self-intersection problems in cases where two surfaces are
extremely close.
NOTE: The shadowmap passed to the depthmask hider must be at sample
resolution (See subpixel output
above). This means the width of the shadow map must be the width of
the image being produced by the hider times the x-component of
PixelSamples. Similarly, the height of the shadow map must be the height
of the image being produced by the hider times the y-component of
PixelSamples. If these conditions are not met, the result is undefined.
RiPoints are now rendered as single "microdisks"
instead of double micropolygons in other words, they are now true disks
instead of hexagons. This representation is more efficient: in a scene with
lots of points, ~20 % savings in total render time was seen for heavily
motion blurred shots and ~40% for large DOF/motion blur settings.
Also, since half the number of MPs need to be
generated, and in the MB/DOF case, the extra information carried around per
microdisk is less than the equivalent micropolygon, memory devoted to MPs
alone should be reduced by at least 50%.
Improved facevarying on Subdivision Surfaces
A new interpolation method has been implemented
for facevarying data attached to subdivision surfaces. This new scheme
preserves part of the old behaviour: it maintains discontinuities in
facevarying data on adjacent faces, as well as preserving the interpolation
of such data right up to the edge of these discontinuities. However, at the
same time, continuous facevarying data is now smoothly subdivided across
adjacent faces. In other words, this method avoids the linear
"kinks" often seen in the old facevarying method, even where the
facevarying data was continuous.
The new method is enabled by default. To revert
to the old method, a new tag has been added to subdivision surfaces: facevaryinginterpolateboundary.
This tag accepts one integer argument. A value of 0 selects the old-style
method, while a value of 1 selects the new, smoother method. As well, the
default behaviour for subdivision meshes which do not have this tag can be
controlled through the rendermn.ini setting /prman/catmark/facevaryinginterpolateboundary;
setting this to 0 or 1 will set the same behavior by default as described
above.
Lossy Compression
Lossy floating point compression for texture maps
is now supported. Usage of this command is as follows:
txmake -lossy -float input.tif output.tx
The output texture is stored in a new format that
should provide better compression for floating point textures while still
preserving much of their dynamic range.
Lossy textures aren't backward compatible: if you
try to use them with earlier releases of PRMan you will get an error. If you
specify -lossy with non-floating point textures, the argument is silently
ignored for now, but other lossy compression schemes may be implemented in
the future.
User-Specified Mipmap Levels
The user can now specify what is inserted into
each level of the mip-map through the -usermipmap option to txmake. Usage of
this command is as follows:
txmake -usermipmap picnames txtname
The files in picnames correspond to the levels in
the pyramid (first name in picnames = highest resolution level of the
pyramid). Note that there are several rules for generating these "user
mip-maps":
- The first image determines the transformation matrix to be put into
the texture.
- The first image determines the texture's dimensions.
- All images listed in picnames must have the same number of channels.
- An image listed in picnames must be at least as large as the
corresponding pyramid level (a 4x4 image can't go into an 8x8 image).
- Images in picnames must all be the same relative dimensions (i.e., a
4x2 image and a 4x4 image are not compatible, but 4x4 and 8x8 are
compatible as is a 4x2 and a 8x4.)
- Unless the format is "tiff" (see txmake
options), no image listed in picnames can be larger than the first
image.
- Unless "single" is chosen (see txmake
options), then the last image listed in picnames will be filtered up the
rest of the pyramid.
In some cases where a large amount of motion blur is used with depth of
field, sampling artifacts could cause an undesirable result. A new flag,
"extrememotiondof," has been added to the hider to improve
sampling accuracy in these cases. Usage of this parameter is as follows:
Hider "hidden" "extrememotiondof" [1]
This flag causes a slower but more accurate sampling method
to be used to alleviate the artifacts. Due to the performance degradations
of this sampling method, this flag should only be used when necessary.
Shader Compiler Optimizations
The shader compiler now applies additional code analysis and
optimizations to shader source code when creating executable
shaders. The resulting reduction in "dead code"
improved reuse of temporaries will improve the run-time resource
utilization for complex shaders.
Handles As Strings
RtLightHandles and RtObjectHandles can now be cast to
RtStrings in all contexts. In the case of lights, the value of
the RtString will be the same as the string handle supplied in
RIB (if the light was created that way). In addition, an
RtLightHandle can now be synthesized from an RtString; the
string value (not the blind handle address) will be used to
decide which light is illuminated. This is useful for being
able to call RiIlluminate on a light in an DSO without
requiring the actual RtLightHandle returned from
RiLightSource.
Also, when a string value in RI_HANDLEID is passed to
RiLightSource in a DSO context, the RtLightHandle returned is
guaranteed to have the same string value.
Geometry
-
Optimizations have been made to Curves to prevent infinite
splits, and provide more accurate derivatives on degenerate
geometry.
-
The interpolateboundary tag for subdivision
surfaces now accepts an optional single int argument, as
described in the revised 3.3 draft specification.
-
The calculatenormal()
shadeop now works correctly on Curves with Attribute
"dice" "hair".
-
An issue which could lead to multiple invocations of the same
RunProgram procedural has been addressed.
-
Memory for string tags is no longer owned by the renderer when
using the RiSubdivMesh call in a DSO context.
-
Spurious G25022 messages which were emitted for traced subdivs
with stitch curves have been removed.
Raytracing
- When using gather() to retrieve output values from
surfaces hit by rays, prior releases required the shader on
the hit surface to reference the desired variables so that they
would be available for message passing. This restriction has
now been lifted for the case of "primitive" queries, such as
fetching "primitive:u" or "primitive:v" from the hit surface.
These so-called graphics state variables will now be
properly queried, even if the hit surface is using Surface "null".
-
Shading of traced, motion blurred objects has been improved
(when Attribute "trace" "samplemotion" is turned
on). In particular: P and N are now properly interpolated in
time; motion blurred odd-sided polygons should now be faster
to trace; transformation blurred extraordinary faces on
subdivs are bounded correctly.
-
Primary, noncamera rays launched from moving geometry are
now biased in time, greatly alleviating self-intersecting
issues due to movement.
-
Raytracing is now able to handle nonplanar polygons, in the
same way that REYES can. It also better handles many-sided
polygons.
-
Procedural primitives are now more efficiently raytraced.
Global Illumination
-
Attribute "irradiance" "maxpixeldist" has been
added.
-
The occlusion
and indirectdiffuse
shadeops now accept new arguments: "bias", "distribution",
"handle", "filemode", "maxerror", "maxpixeldist", "falloff",
and "label". Also: they now warn about unknown coordinate
systems passed to the "coordsystem" parameter.
-
Irradiance cache files can now be used even in the absence of
traceable objects in the scene.
-
Speed improvements have been made when using occlusion in "r"
mode, far away from the occlusion data stored in the file.
Shading Language
-
The step
and mix
shadeops can now use colors to perform step and mix operations
on a component by component basis.
-
The calculatenormal
shadeop is now safer to use inside conditionals when using
centered derivatives.
- The "random" and "checkerboard" patterns from the
gridpattern() shader function now generate the
proper results. Note that these patterns are not
convergent, so they should not be used to drive a "while"
loop that expects to eventually exit on convergence.
Texture Maps
-
Rendered TIFF images now store camera matrices; these matrices
will be kept around if the TIFF image is converted to a
texture, and may then be queried with the
textureinfo() shadeop.
-
The quality of texture lookups along the seams of
latitude-longitude environment maps has been improved.
-
The RiTransformPoints and RxTransformPoints
calls now first search for named
RiScopedCoordinateSystems before consulting the
global RiCoordinateSystem list.
-
txmake -filter now supports the same filters as the
renderer.
-
TIFF texture shadowmaps now work properly with non power of two
dimensions.
-
txmake now reads MayaIFF format files correctly on little
endian platforms.
Other
-
The prman executable now accepts the -woff command line flag
to turn off Xcpt warnings (i.e. prman -woff R50006 test.rib).
-
server
searchpaths are now specified and searched independently
of local searchpaths.
-
librib's treatment of RiScopedCoordinateSystem is now correct.
-
Duplicate user attributes are now correctly popped with the
graphics stack.
-
Netrender now correctly handles gzipped RIB files used in
conjunction with ReadArchive statements; also, speed issues
related to general ReadArchive usage in netrender have been
addressed.
-
The midpoint depth filter now correctly respects the opacity
threshold.
-
PRMan now reports the correct amount of memory in use when
exiting due to an out of memory condition.
-
PRMan no longer flushes display tiles upon a fatal exception
error.
-
The shader compiler is now much faster at dealing with nested
polymorphic functions.
-
Issues with arbitrary output variable support for opacity
thresholding have been addressed.
PRMan 11.5.1 Changes
-
Several issues related to occlusion were addressed, including
the use of occlusion on RiCurves, and grid artifacts seen in
certain circumstances when maxerror is set to 0.
-
Memory usage has been greatly reduced for some rare
pathological cases (related to large displacement bounds or
very long curves).
-
The detail method passed to the Subdivide method of DSO
procedural primitives is now more accurately computed; it is
no longer computed using clamped integer values (the screen
width and height in pixels), and now smoothly ramps up from
zero as the object grows larger on screen. Note that for small
objects, this generally means the computed detail will be
smaller than in previous releases.
-
A cineon to 16-bit texture conversion issue has been fixed.
-
An issue related to the missing StatsGetCurrentMem
symbol in the devkit has been resolved.
-
(Windows) An issue where an Alfred-launched rendering could
hang while using multiprocessor mode (-p) has been addressed.
-
Netrender will now consume a single license for each pair
of remote server slots (similar to prman -p), when those
slots are located on the same physical host.
-
Irma now correctly checks for the standard platform license,
rather than a beta license.
PRMan 11.5.2 Changes
-
A slowdown introduced in 11.5 related to the usage of the
environment() shadeop has been fixed. Also: the
environment() shadeop did not correctly handle a
direction of uniform detail in 11.5; this has been fixed.
-
Crashes seen when rendering polygon and subdivision meshes
with a mix of uniform and facevarying data have been fixed.
-
Rendering of extremely dense deep shadow maps is now more
robust.
-
An issue with the bounding boxes computed during raytraced
displacements (manifesting as eyesplit problems) has been
addressed.
-
Fixed a crash observed when rendering subdivision surfaces
with a mix of uniform and facevarying data, motion blurred in
a time block which didn't match the shutter.
-
Grid artifacts seen with doubleshaded and stitching (both
enabled) have been addressed.
-
Shading artifacts on tiny subdivision faces during raytracing
have been fixed.
-
Photon map tracing of polygon meshes will now use the correct
normal; previously, this could lead to performance problems.
-
Very large micropolygons (ie due to a very large motionblur
factor) at the right edge of the frame will no longer lead to
wrongly culled grids.
-
Multiprocessor (-p) renders no longer read defaults from
netrman.ini.
-
The rayinfo() shadeop's return value can now be
correctly assigned to a uniform value. Also, it correctly
returns the camera ray origin when called from non-raytraced
grids.
-
Message passing of arrays with uniform detail now works
correctly.
-
Displacement after the first bounce during photon map
generation no longer crashes the render.
-
A better warning is now issued when DSOs are opened by the
renderer using an absolute path.
-
The shader compiler now supports a new -lintdso flag,
which causes useful diagnostic messages to be emitted when
failing to load a shared library in the include path. Also:
the shader compiler should have better performance in the face
of many shared libraries in the path.
-
A Linux version of the renderer compatible with gcc-3.2.2 is
now available. Developers who create their own DSOs using
gcc-3.2.2 should download and install this new release as well
as the matching devkit. This version addresses run-time
loading problems between DSOs built on new systems and the
renderer's internal symbols, especially with respect to C++
symbols. The prior Linux releases have been based on
gcc-2.96, and were suitable for platforms such as Red Hat 7.2,
whereas the gcc-3.2.2 build is compatible with the Red Hat 9.0
stock compiler tools.
PRMan 11.5.3 Changes
-
RiEnd() in librib no longer closes stdout.
-
Fixed an issue with the exit status reported by incomplete -p
parallel mode renders.
-
ErrorHandler "abort" and "ignore" are
correctly supported by netrender and parallel renders.
-
More reliable error codes are returned from early abnormal
termination during parallel mode renders.
-
Displacement bounds warnings are now issued only if the
geometry is truly displacing and when the end of frame
statistics are set to level 2 or higher.
-
RiBlobby surfaces now correctly handle array type vertex variables.
-
RiCurves with a large width now utilise memory more
efficiently.
-
RxAttribute() and RxOption() now return more reliable error codes
when the corresponding attribute or option is not found.
-
RxOption now supports new searchpath queries.
-
User options and attributes can now be integers. They will be
cast to a float when queried from the shading language.
-
The precedence of AOVs set by multiple shaders of different
types now correctly reflects shader execution order. In other
words, an AOV of the same name set by an atmosphere shader
overrides the value from the surface shader.
-
The "environmentcolor" variable is now correctly set by
occlusion() when the cache is being used in "r" mode.
-
occlusion() now uses cached data correctly when
no geometry is traceable.
-
A problem with ReverseOrientation and polygon meshes during
raytracing has been addressed.
-
The bounding box is no longer suboptimal for subdivision
meshes which undergo heavy displacement and transformation blur.
-
A (mostly raytracing related) memory leak of strings bound to
shaders from geometry has been plugged.
-
Displacement is again correctly applied to both sides of
doubleshaded geometry.
-
Fixed an issue related to raytraced oversplitting of motion
blurred NURB patches.
-
A crash which occurred when atmosphere shaders raytraced from
displaced geometry has been fixed.
-
The renderer better handles out of memory conditions.
Statistics reporting in such cases is also now more reliable.
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. |