RenderMan 11.5.3 Release Notes
PhotoRealistic RenderMan 11.5.3 |
|
|
Release NotesMarch, 2004 |
||
Introduction
These release notes describe significant changes and enhancements to Pixar's RenderMan� for the 11.5.3 release over the 11.3 release.
- Release notes since 11.5
Changes to the renderer between 11.5 and 11.5.3. - Multi-Processor レンダリング
The renderer can now utilize multiple CPUs on the same system to increase rendering speed - Scene Analysis
Substantial acceleration for scenes which have complicated shaders and geometry - Acceleration of
Ambient Occlusion and Indirect Illumination
Faster calculation of these effects -
Enhanced "Baking" of Ambient
Occlusion and Indirect Illumination Enhancements
These effects now render at a higher quality, particularly when animated - Deep Shadows Enhancements
Deep shadows now have an open API and other enhancements - Hider Subpixel Output
A new option for outputting an image with subpixel resolution -
Sample-Resolution, Z-Stencil (Depthmask) Hider
New hider computes visibility at a frontier defined by depths in a shadow map - RiPoints Improvements
RiPoints are now rendered as disks, which are faster and more memory efficient - Improved facevarying on Subdivision
Surfaces
A new facevarying interpolation scheme for subdivision surfaces has been implemented - Lossy Compression
A new compression scheme was added for floating point images - User-Specified Mipmap Levels
Users may now manually specify levels of a mipmap through txmake - Extreme Motion Depth of Field Blur
Option to increase motion samples for rare case of extreme blur- Shader Compiler Optimizations
New shader compiler optimizations reduce the run-time resources used by complex shaders- Handles As Strings
RtLightHandles and RtObjectHandles can now be cast to RtStrings.- Miscellaneous Changes and Bug Fixes
Many parts of the release have had small changes and bug fixes - Shader Compiler Optimizations
Multi-Processor レンダリング
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.
Scene Analysis
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.
Acceleration of Ambient Occlusion and Indirect Illumination
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.
Enhanced "Baking" of Ambient Occlusion and Indirect Illumination
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 application note.
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: Global Illumination: Baking Occlusion for a カメラ Fly-through.
Deep Shadows Enhancements
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 テクスチャ API for more information.
Hider Subpixel Output
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.
Sample-Resolution, Z-Stencil (Depthmask) Hider
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 Improvements
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.
Extreme Motion Depth of Field Blur
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.
Miscellaneous Changes and Bug Fixes
ジオメトリ- 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.
- 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".
- シェーディング 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.
- 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.
- 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.
- 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.
- 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.
- レンダリング 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.
- シェーディング 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.

