Prev |
Next
PhotoRealistic RenderMan 11.3
|
|
|
Release Notes
March, 2003 |
These release notes describe significant changes and
enhancements to the RenderMan® Toolkit for the 11.3
release over the 10.0 release.
Combined Shading
The renderer now has the ability to shade several geometric
primitives at the same time, provided that you follow a few
simple rules when writing shaders. If you follow
these
rules, small objects such as leaves, grass blades, hairs,
pebbles, etc. will shade up to 4-5 times faster (in the
limiting case where the objects are far away, and are diced
into a single micropolygon each). This can speed up the
overall rendering times for complex scenes by up to a factor
of 3. Even in moderate cases, where individual objects turn
into 20 or 30 micropolygons each, your shaders can execute
up to twice as fast.
Tentative Hiding
PRMan 11 now attempts to resolve visibility in its entirety
before shading. In nearly all cases this causes a frame to
render faster. Only in the case of displaced geometry will PRMan
11 maintain the old behaviour, and in this case hiding can be
controlled via a new
Hider "occlusionbound" parameter.
Eyesplit Improvements
PRMan no longer discards primitives that reach the eyesplits
limit. Primitives that reach the eyesplits limit are split
further by a threshold value (controllable by an option), and
then immediately diced. This can result in decreased image
quality (and a warning to this effect will be issued), but
typically leads to much better results than the old behavior of
discarded geometry.
Curve Optimizations
A new Attribute for curves makes thin hair-like curves much
cheaper to shade, and more memory efficient especially when
spanning multiple buckets:
Attribute "dice" "hair" [1]
This attribute should only be used for curves which are truly
hair-like (very thin in screen space).
Deep Shadowmaps
Support for "deep shadowmaps" has been added. This new output
format stores more information per pixel than a normal
shadowmap, and thus allows for better antialiasing,
semi-transparent shadows, and limited cases of motion blurred
shadows when used instead of normal shadowmaps.
Creation of these new shadow files is
achieved with a new display driver, deepshad,
while the shadow()
shadeop has been upgraded to support deep shadow maps directly.
Shadowmap Improvements
The renderer now significantly optimizes for the case of shadow
maps which contain large empty regions.
The renderer now has improved filter behaviour when making
shadow map calls. This may result in significantly different
shadows between PRMan 10 and 11 (this is most noticeable
when making 4-point shadow() calls) , but should lead
to fewer self-shadow artifacts and better looking shadows.
Micropolygon caching
Previous versions of PRMan tried to prevent the number of
micropolygons resident in memory from growing too large. In
particular, the extreme displacement strategy was
employed; however, while it was effective at reducing the memory
footprint, extreme displacement resulted in redundant shading
computation and longer render times.
Version 11.0 of PRMan now provides a new strategy: it will cache
transient micropolygons to disk when it is detected that there
are a relatively large number of them. By default, caching is
activated once more than 6MB of transient micropolygons have
been created.
Micropolygon caching can be controlled through several new
hider options.
Subdivision Mesh Stitching
PRMan 11.0 allows two subdivision surfaces to be joined together
seamlessly along a shared boundary curve, in order to ensure
that no holes appear between seams even under extreme
deformation or displacement. More details are provided in the user
manual.
Double-sided Shading
Two-sided primitives can now be shaded twice, once on each
side, using the new Attribute "sides" "doubleshaded".
Shader Profiling Images
A new variable that can be used in conjunction with arbitrary
output images has been added that allows the renderer to create
an image that profiles how long it takes to shade each
micropolygon as it renders:
Display "+costfilename.tif" "tiff" "__CPUtime"
A new tiff utility program called tiffnorm can then be
used to convert the data in the cost file, which stores the
amount of time it took to shade each micropolygon in seconds, to
an easily displayed and modifiable 8-bit tiff
image. tiffnorm -q input.tif will dump the size and
mix/max values of the cost image to stderr. tiffnorm -m
input.tif output.tif will output a psuedo-color image
scaled to the min/max values in the cost image. The user can
also scale the image manually with the -l [minval] and -h
[maxval]. tiffnorm -help will give a brief list of
command options.
An RSL preprocessor is now part of our distribution and can be
relied upon as a uniform preprocessor across platforms for
shaders compiled with shader
.
$(RMANTREE)/etc/slpp
is ANSI-C compliant and supports
C++ style comments. We encourage pre-processor
standardization for RSL programs but if your shaders don't
compile with this release, simply remove slpp from your
distribution and the old behavior will be restored. The shader
compiler also now defines the following preprocessor constants:
__PIXAR__, __PRMAN__, and
__PRMAN_RELEASE__=XXYY, where XX is the major and YY is
the minor release number (i.e. 1100). It also now accepts the
"-E" flag which prints post-preprocessed shader code.
Non-Raster Oriented Dicing
Non-raster oriented dicing, introduced in PRMan 10.0 for NURBs,
has also been implemented in PRMan 11.0 for subdivision
surfaces, bicubic patches, and bilinear patches.
Hider Motion Sampling
A new Hider
"samplemotion" parameter has been added which allows the
sampling of motion blurred micropolygons to be disabled. This
allows for faster rendering of heavily motion blurred pictures,
while still allowing the dPdtime variable to be
computed as a separate arbitrary output variable pass (for use
in postprocess motion blurring).
-
The renderer can now create a statistics report on all files
accessed over the lifespan of the render using the new Option "statistics"
"filelog".
-
Rendered TIFF images now store the 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.
-
RiPoints now motion blur correctly in z-depth.
-
In rare cases large linear curves could split infinitely. This
is no longer the case.
-
Conditional RIB parsing using IfBegin now correctly
handles fully-qualified Option names such as
"$Option:user:renderPassType"
-
CSG is not supported for raytracing.
-
Area light sources as defined by the RiAreaLightsource call
have not been implemented. However, many types of area lights
can be still be effectively represented in the shading
language.
-
Shaders are currently not evaluated during photon tracing.
Workaround: use the implemented built-in photon shading
models.
PRMan 11.3 Changes
-
User-attribute scoping has been fixed so that attributes defined
in inner scopes are now correctly popped and inaccessible to
subsequent queries in the outer scope.
-
User-attribute state is now correctly checked when determining
whether grids can be combined for shading.
-
A bug involving the recycling of file descriptors for deep
shadow maps has been fixed.
-
Ray-traced shadows would sometimes leave small "unshadowed"
grid regions if the surface geometry of an intervening blocker
object was displaced. This has been fixed.
-
The rayinfo() shade-op would sometimes report
incorrect depth and type information to shaders running on
displaced surfaces when those shaders were running in response
to a ray hit. This has been fixed.
-
irradiancecache() parameters maxdist,
maxerror, and maxpixeldist can now be
uniform.
-
More accurate filter sizes are now computed when shading ray
traced geometry.
-
Bugs in raytraced displaced bilinear patches and polygons
have been addressed.
-
The parametric space for raytraced displaced patches and
NuPatches is now correct even when the original parametric
range was not the unit square. Also fixed incorrect shadows
cast by the same.
-
A bug involving degenerate NuPatches when computing occlusion
has been fixed.
-
Normals at ray hit points now consistently point in the
correct direction (previously they were sometimes directly
opposite).
-
The geometry cache used for raytracing has been significantly
improved.
-
A bug related to the ordering of facevarying data on a
single-faced polygon mesh has been addressed.
-
A severe memory leak related to polygon meshes has been
addressed.
-
A problem which caused some ray-tracing hit tests to
over-refine the intersected surface leading to apparently
stalled renderings has been addressed.
-
Fetching vertex variables from primitives using the
"primitive:varname" syntax when using gather now
works correctly.
-
TIFF textures created from 16 bit source data now have correct
data in successive levels of the mipmap pyramid.
-
The renderer now allows extrapolation of occlusion/irradiance
values within a distance corresponding to 1/2 pixel projected
into the 3D scene. This speeds up occlusion on small geometry.
-
The point, normal, samples, and maxdist parameters to
occlusion(), indirectdiffuse(), and
irradiancecache() are now allowed to be uniform.
-
The fresnel() shading operator no longer issues a
warning if the angle between I and N is < 90 degrees.
PRMan 11.1 Changes
-
Numerous performance optimizations and quality improvements
have been added for hemisphere sampling, irradiance, and
occlusion (primarily affecting the irradiance,
indirectdiffuse, and occlusion shadeops).
-
Raytracing bias is now applied correctly during photon
tracing. Note that as a result the contributions of photons
toward caustics and color bleeding may be significantly
stronger between 11.0 and 11.1 since generally more photons
will be deposited in the photon map. Also an issue with
photon maps containing more than a million points has been
addressed.
-
A bug where trim curves were incorrectly applied during
raytracing has been fixed.
-
Two facevarying bugs (one related to a single-faced polygon
mesh, the other related to motion blur segments not matching
shutter times) have been addressed.
-
A bug leading to overly aggressive antialiasing during
raytraced displacements has been addressed. Also, raytraced
displaced BLPs now maintain correct parametric space.
-
A bug in multibounce, multisample gather() calls leading to
a crash on Irix has been fixed.
-
RunProgram RiProcedurals can now be specified relative to the
procedural searchpath.
-
(Linux, IRIX) SIGHUP will now correctly interrupt the render
only for the purposes of printing statistics as advertised.
-
(Linux, IRIX) Signal handling has been made more robust
especially when interacting with child processes. This
addresses problems seen with nested RunProgram
procedurals. Interprocess I/O in this case has also been
improved.
-
(NT) In conjunction with an updated alfserver, PRMan will now
reliably clean up its micropolygon cache files when a render
job is interrupted by Alfred.
-
The attribute() shadeop now supports a new query:
"LODFraction". Returns a single float between 0 and 1
which describes the chance that the currently shaded geometry
will contribute to the final color of the pixel based on the
current DetailRange and Detail settings.
-
The gaussian filter for the shadow() shadeop now works
correctly again.
-
Option "trace" "maxdepth" is no longer arbitrarily
restricted to a maximum depth of 10. Setting this number
higher will allow raytracing to proceed to any depth.
-
Shader compiler type checking on gather() arguments
has been improved.
-
A problem in which gridpattern() sometimes left speckles
in "oblong" grids has been addressed.
-
(IRIX) Crashes during the generation of deep shadow map with
color information have been fixed.
-
An interaction between arbitrary output variable images and
raytracing (leading to artifacts in the former) has been
addressed.
-
(Linux, IRIX) Dirmapping is now correctly applied to
c:/path style paths, even on UNIX platforms.
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. |