PhotoRealistic RenderMan 12.0 |
||
Release Notes |
These release notes describe significant changes and enhancements to RenderMan® Pro Server for the 12.0 release over the 11.5 release.
The renderer no longer requires eyesplits options or attributes. Users will no longer experience warnings about eyesplits, long delays before rendering starts, or excessive splits that waste memory. The options and attributes are silently parsed, but will be deprecated in future releases.
The renderer now has support for 3D texture maps. Arbitrary 3D data can be written to a sparse volumetric file (a "pointcloud") with the new bake3d shadeop. These pointcloud files can be inspected using ptviewer, filtered using the new utility ptfilter, and converted into a 2D image file using ptrender. In order to facilitate efficient rendering of large sets of baked data, the renderer now supports a new MIP map representation called brick maps that are suitable for efficient filtering and caching. A brick map is created from a point cloud file using a new utility brickmake. Brick maps can be inspected with brickviewer and high-level info about the contents of a brick map can be found with brickinfo. Arbitrary 3D data in brick map format can then be read in with the new texture3d shadeop. More information can be found in the Application Note Baking 3D Textures: Point Clouds and Brick Maps.
Interior and Exterior shaders are now supported for ray tracing. For example, smoke described by an Interior shader can be evaluated by refraction rays sent inside an object from its Surface shader. Calls to trace() now automatically select the appropriate volume shader to run, if one is attached to the object; the surface normal is compared to the ray direction to pick whether the ray is traveling through the object's interior or exterior domain. Shaders using gather can get the automatic behavior by fetching "volume:Ci" or they can explicitly specify "interior:Ci" or "exterior:Ci" if they have a better idea of whether they are shooting a refraction or reflection ray.
The renderer now supports optional Atmosphere and Interior volume shading of camera samples, after visibility processing is complete. This is an alternative to the traditional per-primitive Atmosphere shading and the new ray traced volume support. This new mode allows Atmosphere and Interior shaders to correctly take motion blur and depth of field sampling into account, without requiring ray tracing. More details can be found in the shading strategy section of the user manual.
Biasing issues for ray tracing have been greatly reduced. In other words, the trace bias attribute can now be reduced by a factor of 10-100 times before self-intersection becomes an issue again.
Trace and gather rays now automatically continue through partially
transparent objects (Oi < 1.0), accumulating color and opacity along
the way, just like typical camera samples. Previously this effect
required cooperation from the shaders on the hit surfaces. Shaders
which implement refraction and diffusion effects should ensure that
Oi=1.0
and then cast their own refraction rays, as before.
More information can be found in the introductory
ray tracing Application Note.
gather()
can now send arbitrary
local variables with each ray, to be used as parameters in shaders on
the hit surfaces. These overrides for existing parameters are far
more general than the existing "label" mechanism, and the
receiving shader need not use rayinfo()
or be otherwise
"ray-aware" to use them. The RSL Features
section of the manual has
more details.
Similarly, surface and volume shaders calling illuminance()
can now send parameter overrides to lightsource shaders
directly. Illuminance() can now also fetch
back auxilliary values computed inside lightsource shaders as well.
These extensions, which share the gather() messaging syntax,
complement the existing lightsource
and surface
message passing functions: the new "forward" send requires no
special knowledge in the lightsource, and variables other than
predefined "output" parameters can be fetched.
PRMan now supports Loop subdivision meshes. The Loop subdivision scheme is defined for triangles, and results in meshes that are more memory and speed efficient, and have fewer artifacts than the Catmull-Clark scheme when dealing with meshes made primarily of triangles. Loop subdivision meshes are created by passing the RI_LOOP ("loop") as the scheme parameter to the RiSubdivisionMesh call, and support all standard tags defined in the specification, as well as the stitching and improved facevarying extensions.
Catmull-Clark subdivision surfaces now have much lower peak physical and stack memory requirements. This is particularly true for dense meshes that take up large amounts of screen real estate, as well as ray traced meshes. Also, various constraints on subdivision mesh topology have been removed, making it easier to convert arbitrary polygon meshes into subdivision surfaces. In particular, a mesh no longer needs to be a single connected surface multiple disjoint pieces will still be rendered individually. Also, singular vertices (vertices shared by faces which belong to disconnected meshes) will be automatically split. However, all edges must still be manifold (incident to at most two faces).
Polyhedra (i.e. the PointsPolygons and PointsGeneralPolygons calls) are now much more efficient to render.
PRMan now has much better support for triangles (whether they come from polygons or the new Loop subdivision surfaces). In prior releases, PRMan rendered triangles at the same speed as a rectangle twice its size (or to put it another way, triangles rendered at half the speed of rectangles). This is now no longer the case. Also, pinhole artifacts that sometimes occurred between triangles are now no longer present.
Display "+foo.tif" "tiff" "varying color[4] foo"
PRMan now supports rendering to OpenEXR images using the new "openexr" display driver. In addition, support has been added to txmake for creating texture files from OpenEXR source images.
Support for varying length arrays has been added to the shading language. Formal parameter lists to shaders and function arguments now support an array of indeterminate length, indicated by empty braces:
surface mattearr( float Ka=1, Kd=1; float testarr[] = {}; )
The array length and values will be initialized in RIB by the shader instance or from the geometry. To query the length of these arrays a new shadeop arraylength has been added. Also, arrays can now be assigned to each other, or compared for inequality.
The midpoint depthfilter has been made more useful by the addition of a new visibility mode:
Attribute "visibility" "midpoint" [1]
Objects which have midpoint visibility but no camera visibility are considered visible when midpoint depthfilter is active, and take part in the two surface hider computation, but only as the second surface. Such objects can be considered shadow receivers but will not be shadow casters.
PRMan now supports the concept of an alternate camera for dicing and multiple strategies when performing dicing. These are chosen via two new parameters of Attribute "dice": "strategy" and "camera".
A new class of RenderMan plug-in, Ri filters support filtering of read-archives, inline archives, and procedural primitives. Ri filters are compatible with librx, including the -catrib flag. More information can be found in the Application Note Plug-in Ri Filters.
Netrender requests are now routed through Alfserver's site-customizable AlfEnvConfig procedure in alfserver.ini. This handler script allows renderfarm servers to select different installed versions of PRMan, and make environment variable and setuid changes, on a per-request basis. The keyword specified with netrender -R keyword is now treated just like Alfred's built-in RemoteCmd -envkey keyword, which means that a consistent set of environment and setuid rules can be applied to all processes launched by Alfserver. Any existing (deprecated) Alfserver -rmap mappings are still applied, followed by AlfEnvConfig handling.
Pixar Animation Studios
|