Blue Moon Rendering Tools -- Summary of recent changes
------------------------------------------------------

Summary of fixes for 2.4.0.8, a.k.a. 2.4.0h, Nov/1999
-----------------------------------------------------
rendrib:
  * Bug fix: Finally fixed a bug that would make some frames dimmer,
    only when rendering multi-frame RIB files, and only with
    certain PixelSamples combinations.
  * Bug fix: Sometimes using -frames would cause a core dump.


Summary of fixes for 2.4.0.7, a.k.a. 2.4.0g, Sep/1999
-----------------------------------------------------
slc / runtime SL interpreter:
  * Bug fix: rayhittest() returned incorrect results.
  * Bug fix: color/float was too conservative in avoiding divide by
    zero -- it would set the color to zero if the float was < 1.0e-6.
    Now it just does the division, no matter what value you use.
rendrib:
  * Bug fix: PatchMesh didn't correctly parse "constant" arguments.
ribout:
  * Bug fix: PatchMesh didn't output the correct number of values for
    varying and uniform arguments.
  * Bug fix: SubdivisionMesh didn't output the correct number of values for
    varying and vertex arguments.


Summary of fixes for 2.4.0.6, a.k.a. 2.4.0f, Jul/1999
-----------------------------------------------------
rendrib:
  * Bug fix: Combination of true displacement (not bump) with reversed
    handedness resulted in incorrectly inside-out primitives.
rgl:
  * Bug fix: the combination of both ortho projections and crop windows
    caused an incorrect aspect ratio when displaying with rgl.
ribout:
  * Fixed bugs in SubdivisionMesh output.


Summary of fixes for 2.4.0.4, a.k.a. 2.4.0d, Jun/1999
-----------------------------------------------------
slc / runtime SL interpreter:
  * The implementation of the SL comparison (i.e. == or !=)
    of two vector or colors was botched.  Now is fixed.  This was only
    a rendrib fix; there's no need to recompile your shaders.


Summary of fixes for 2.4.0.3, a.k.a. 2.4.0c, Apr/1999
-----------------------------------------------------
slc / runtime SL interpreter:
  * Bug fix: imager shaders crashed when using functions that required
    calculation of derivatives.  Also, imager shaders ran with the wrong
    "P" positions (they were off by 1/2 pixel).
  * Bug fix: transformations to and from "NDC" space were sometimes
    wrong.  Now fixed.
  * A bug (or misdesign?) made derivatives of user vertex data to be
    incorrect.  Now this works properly.

Miscellaneous:
  * farm: now correctly skip RIB lines with comments when searching for
    the desired resolution.



Summary of fixes for 2.4.0.2, a.k.a. 2.4.0b, Feb/1999
-----------------------------------------------------
slc / runtime SL interpreter:
  * Bug fix: if you displaced P, using calculatenormal for N, then
    lit using area lights with "nsamples" > 1, in some cases the wrong
    light values were used.  This is now fixed, and amazingly, with
    the bug removed some scenes render faster.

rendrib:
  * Fixed but that made some radiosity calculations incorrect.  It usually
    wasn't noticable, but sometimes it turned objects bright red!  Turned
    out to just be a typo.

Miscellaneous:
  * mkmip was changed to do its magic directly, rather than produce
    a RIB "MakeTexture" command and pass it to rendrib.
  * Bug fix: for certain resolutions, mkmip/MakeTexture crashed on some
    platforms.
  * We've finally fixed the problem with searchpaths on Windows.



Summary of changes from 2.3.6 to 2.4.0 (January 1999)
------------------------------------------------------
slc / runtime SL interpreter:
  * New SL raytracing support:  isshadowray(), raylevel(), visibility(),
    rayhittest(), fulltrace().
  * Support of arrays in SL.
  * Support of the "matrix" type in SL.
  * Bug fix: ambient lights (those not containing illuminance or solar
    statements) did not have access to certain surface variables such
    as Ps. Now fixed. (Non-ambient lights were fine all along.) (2.3.6a)
  * Bug fix: Area light shaders weren't being run with s,t,u,v initialized
    (this making it difficult to color an area light based on a texture
    lookup). (2.3.6a)

rendrib:
  * New attribute:  Attribute "render" "visibility" allows you to make
    certain objects appear in reflections only or shadows only (but
    invisible from the camera).  See the user manual for more info.
  * Bug fix: true displacements on polygons that *also* had "N" specified
    at their vertices resulted in the wrong normals being used for shading.
    The same bug was also fixed for bilinear patches.
  * Bug fix: bicubic patch meshes specified with Pz didn't compute their
    x and y components correctly. (2.3.6a)
  * Bug fix: near and far clipping were done with respect to Euclidean
    distance from the camera, rather than strictly z distance. (2.3.6a)
  * Bug fix: numerical tolerance errors made torus intersections flakey
    under some circumstances. (2.3.6a)
  * Bug fix: triangles had their parameters mapped wrong in some
    circumstances.  Now fixed, and also triangles take a bit less memory
    then before.
  * Bug fix: a memory leak in rendrib caused lots of swapping and other
    odd behavior for high-res frames. [2.3.6b]
  * Bug fix: Rational NURBS and rational bicubics sometimes were bounded
    incorrectly, causing sections to be oddly "clipped." [2.3.6b]
  * Bug fix: shadows were not properly motion blurred. [2.3.6b]
  * Bug fix: RiCoordSysTransform only worked for "named" transformations
    (i.e. those declared with RiCoordinateSystem), not the predeclared
    ones (like "NDC" or "world").
  * Bug fix: orthographic cameras with a Scale before WorldBegin could
    result in the wrong camera view.
  * Bug fix: radiosity didn't work properly for instanced objects
    (ObjectBegin/ObjectEnd/ObjectInstance), it previously reported zero
    indirect energy.  Now this is fixed.
  * More robust handling of trim curves with umin/umax that are 
    out-of-range compared to their knot vector values.

rendribv:  rendribv has been superceded by rgl -lines
  
rgl:
  * -lines option now replaces rendribv.
  * -sketch option for novelty "pseudo-hand-sketched" look to previews
  * -unlit causes surfaces to be lit by a single simple light source at
    the camera, and for the lights in the actual RIB file to be ignored.
  * Previews of PRMan's new primitives:  points, curves (previewed as
    line segments), and subdivision surfaces (previewed as points
    polygons meshes with smoothed normals)
  * Bug fix: NURBS did not display correctly under certain circumstances 
    due to numerical inaccuracies.


Miscellaneous:
  * Support and documentation for using BMRT and PRMan together with
    the "rayserver" paradigm.  See the docs for details.
  * "farm" script -- allows a single frame to be subdivided with separate
    subsections renderered on different machines, then stitched together
    when done.
  * There's a new program, "mkmip".  It is a TIFF file converter -- turns
    an ordinary scanline TIFF file into a tile-based multiresolution TIFF
    file.  The texture mapping in rendrib still accepts TIFF files as
    image textures (rather than any proprietary formats like PRMan), but
    if the TIFF file happens to be tile-oriented, the runtime system can
    significantly reduce the amount of memory used for texture mapping
    by swapping in and out only the exact tiles needed by the renderer.
    I strongly recommend using "mkmip" on your texture to optimize rendering.
  * Revamping of the HTML documentation.
  * In all three renderers, support of the RIB Procedural primitives 
    DelayedReadArchive and RunProgram.
  * slctell - make the output more similar to that of PRMan's "sloinfo".
  * slctell/libslcargs: slc previously compiled the initializers of colors
    in such a way that libslcargs couldn't tell what the default values
    were, even for fairly trivial cases.  This is fixed now -- you should
    notice that slctell (and any program you write using libslcargs) now
    are much better at reporting the default values of color parameters.
  * The example shaders and scenes have been changed somewhat.




Summary of changes from 2.3.5 to 2.3.6 (January 1998)
-----------------------------------------------------
slc / runtime SL interpreter:
  * To avoid confusion with DSO's, slc now names compiled shaders
    with the extension ".slc" instead of the poorly chosen ".so".
    Rendrib will still read the old .so files.  To go along with this
    change, the old "sotell" and "so.h" have been renamed to "slctell"
    and "slc.h", respectively.
  * To keep compatibility with PRMan, the direction of "I" inside an
    atmosphere shader is the same as in the surface shader (it used to
    be opposite sign).  Watch out for this change in your existing
    volume shaders!
  * Shader functions now compile to slightly faster code, and also are
    now truly call-by-reference as the spec says (before they were
    call-by-value-return, which is very subtly incorrect).
  * Removed restriction on max # of labels in a compiled shader.  This
    previously prevented some very large shaders from compiling.
  * Better support of vector/normal types (transform correctly, etc.).
  * The fresnel() function has been fixed -- previously, the returned
    Kt value was simply 1-Kr, but now it's the correct physical amount.
  * The shader interpreter now correctly handles hsv->rgb and hsl<->rgb
    color transformations (it didn't know about these before).
  * Bug fix: opposite/adjacent now work -- for some reason, the compiler
    didn't accept them before.
  * Bug fix: though diffuse() and specular() responded to the __nondiffuse
    and __nonspecular parameters to lights (as described in the PRMan 3.5 
    documentation), phong() did not.  Now phong responds correctly.
  * Bug fix: incorrect compile for color / color and point / point. [2.3.5a]
  * Bug fix: incorrect compile for certain space transformations. [2.3.5a]
  * Bug fix: vtransform didn't understand about "NDC" space. [2.3.5b]
  * Bug fix: "screen" space transformation were wrong, as they were
    not independent of field of view. [2.3.5d]
  * Bug fix: Du() and Dv() of a point thought they were returning a
    float, rather than a vector/point. [2.3.5d]
  * Bug fix: incorrect code was generated for a=b=c expressions. [2.3.5d]
  * Bug fix: default point shader parameters (i.e. those *not* specified
    on the RiSurface line) were sometimes transformed incorrectly.
  * Bug fix: lightsource() didn't work properly. [2.3.5f]
  * Bug fix: Interior and Exterior shaders didn't work quite right.  Now
    they run on the results of any trace() rays, using the Int/Ext shaders
    of the object that did the tracing, not the object that the traced
    rays hit (if you catch my drift).
  * Bug fix: st coordinates weren't mapping correctly for triangles
    (3-sided Polygons). [2.3.5f]

rendrib:
  * When rendering to the display, if instead of hitting 'ESC' to exit,
    you hit 'w', rendrib will write the window as an image file.
  * Area lights have been enhanced and debugged, and should now produce
    more accurate, less noisy images.  Big improvements should be 
    especially noticable for area lights composed of cylinders or spheres.
    Warning: in the process, some changes to area light shaders were
    necessary -- see the new arealight.sl for a correct example of how
    to code area lights.
  * The dicing strategy for bicubics/NURBS has been altered slightly
    because it was underestimating dicing rates for patches which
    were mostly flat, but had parametric distortions.  This may increase
    dicing rates even for objects which didn't need it before, possibly
    making certain bicubics and NURBS a little more expensive than before.
    But the results are more correct, and you can use either ShadingRate
    or Attribute "render" "patch_multiplier" to reduce tesselation rates.
    But the good news:  bicubics & NURBS are now handled in a way that's
    a bit more efficient in memory usage.
  * Fix to radiosity parameters: there was an inconsistant use of
    "patchsize", "elemsize", "minsize".  Now these are expressed in
    units of the current coordinate system in effect at the time of
    the Attribute "radiosity" statement.  (This is the intuitive way
    that everybody probably always expected it to work.)
  * There was a 1/2 pixel offset disparity between BMRT images and
    PRMan images.  This was noticable if carefully compositing images
    together from the two renderers.  They now match exactly.
  * Bug fix: Large displacements on quadrics resulted in screwed up
    s,t,N on the surface.
  * Fixed bug for user "uniform" vertex variables for polygons,
    points polys, and points general polys.  [2.3.5a]
  * Issue error message for palette TIFFs as texture maps (used to
    silently give wrong results for palette images).  [2.3.5a]
  * Bug fix: RiOrientation outside the world block, and before any
    transformations at all, would cause a crash. [2.3.5a]
  * Bug fix: 16 bit TIFF output was broken under Linux. [2.3.5b]
  * Fixed bug that under extremely rare texture mapping circumstances,
    would crash rendrib. [2.3.5b]
  * Fixed bad bug (new to 2.3.5) which incorrectly calculated dicing
    rates for bicubics behind the camera, resulting in huge memory 
    waste. [2.3.5b]
  * Yet another subtle fix to polygon handedness under certain 
    conditions. [2.3.5b]
  * Bug fix: incorrect behavior of Exposure for framebuffer display renders.
  * Bug fix: Transform acted like ConcatTransform when motion 
    blurred. [2.3.5d]
  * Bug fix: Matte objects (using RiMatte(1)) sometimes behaved incorrectly.
    [2.3.5d]
  * Bug fix: user-supplied "st" values did not interpolate correctly
    for patch meshes with >1 patch.  Other primitive types, and params
    other than "s" and "t" were not affected by the bug.[2.3.5d]
  * Bug fix: torus rendering would, very rarely, enter into an infinite
    loop. [2.3.5e]
  * Bug fix: Made NURBS rendering more robust to numerical precision errors
    (prompted by strange renderings of some objects exported by
    Rhino). [2.3.5e]
  * Bug fix: Varianced-based sampling (which I don't recommend using anyway)
    made "hot pixels".  [2.3.5f]
  * Bug fix: true displacements on NURBS weren't setting their normals
    properly.

rgl & rendribv:
  * rgl and rendribv now maintain full attribute stack, so they get nested
    attributes (like colors) correct now.
  * rgl has been considerably sped up (due to GL call esoterica).
  * The "image fidelity" of rgl has been greatly improved, particularly
    in correctly previewing handedness, sidedness, and lighting.
  * New options to rgl: -dumprgba, -dumprgbaz, -1buffer, -offscreen allow
    various options related to saving rgl images as files rather than 
    only sending them to the display.  Read the manual for details.
  * Eliminated unnecessary warnings about invalid RiIlluminance handles.
  * rgl: Fixed a longstanding bug that sometimes displayed the image 
    incorrectly or strangely offset.  [2.3.5e]

Client library (libribout.a):
  * Opens a pipe if the first char of argument to RiBegin is '|' (much
    like file opening conventions in Perl).

Miscellaneous:
  * Overhauled organization of the RIB parser to once and for all get
    rid of any limitations on parameter list lengths, etc.  The parser
    can now handle truly collossal RIB files (~1Gb with no problem).
  * Fixed RIB parser: it previously got confused by comments (#)
    that occur in the middle of a multi-line RIB statement.  Now it
    works the right way. [2.3.5c]
  * Many fixes to the RIB parser's ability to correctly parse binary RIB.
  * A new program, "composite", does simple alpha compositing of images
    rendered using BMRT.  Please check the HTML docs for details.




Summary of changes from 2.3.4 to 2.3.5 (Jan 1997)
-------------------------------------------------

slc / runtime SL interpreter:
  * Fixed bug that prevented assignment of strings in shaders.  (Passing
    strings in was okay, but you couldn't reassign their values.)
  * Bug fix: slc reported argument errors for the "distance" function,
    even when it was being used correctly.

rendrib:
  * Limited support of true displacements!
    (use Attribute "render" "truedisplacement" [1]).
  * Finally fixed some very subtle problems with handedness and one sided
    primitives.
  * Now supports arbitrary filter support sizes.  Previously, there was
    a bug which restricted filter supports to a max of 3 pixels.
  * Fixed bug: previously, objects' screen space bounding boxes were not
    properly expanded for DOF effects.  This occasionally "clipped" regions
    when extreme blur was used.
  * New options: "limits" "texturememory" and "limits" "geommemory".
  * New attributes: "light" "nsamples" [n] (allows you to increase sampling
    of an area light independent of PixelSamples).
  * Vertex variable interpolation is now done correctly for bicubics and
    NURBS.  Note that NURBS now interpolate user "varying" variables in
    the same way as PRMan 3.6 and later, *NOT* in the obsolete way that
    PRMan 3.5 and earlier used.
  * Fixed bug that dumped core when rendering a scene with zero objects.
  * Fixed incorrect rendering of tori for wacky combinations of negative
    thetamax, phi, radii, etc.
  * Fixed a bug that sometimes caused a floating point error/crash
    when using object instancing (only showed up on Linux).
  * Attribute "trimcurve" "sense" is now understood.
  * Fixed bug in RiSkew that transformed incorrectly if the two vectors
    passed to RiSkew were not perpendicular.
  * Fixed bug that computed incorrect derivatives for triangles.
  * Improved SL calculations of derivatives in a way that avoids some
    subtle errors that the software was previously prone to.

rgl & rendribv:
  * Fixed bug in RiSkew that transformed incorrectly if the two vectors
    passed to RiSkew were not perpendicular.

client library (libribout.a):
  * Fixed a bug that incorrectly freed memory if you made many calls
    to RiBegin/RiEnd.
  * Fixed a bug in RiPatchMesh that expected the wrong number of varying
    arguments (like "N") for bilinear patch meshes.

libsoargs:
  * To match PRMan, SO_GetName now returns the shader name, not the
    shader *file* name.

Miscellaneous:
  * The BMRT user manual is now distributed in HTML.
  * For all RIB-eating programs, BMRT now supports RiReadArchive (just
    like PRMan 3.6) as an include mechanism for RIB files.  The old
    ##Include is no longer supported, being completely replaced by
    RiReadArchive!
  * libsoargs.a: Fixed a bug that sometimes caused certain parameters
    of the shader to not be reported.
  * Improved error reporting of RIB parsing errors and unknown
    option/attribute tokens.




Summary of changes from 2.3.3 to 2.3.4 (June 1996)
--------------------------------------------------

slc / runtime SL interpreter:
  * No longer required that parameters be initialized to constants.
    Now any expressions are okay for parameter initialization.
  * Fixed bug that did not allow assignment to function parameters.
  * Rendrib occasionally got confused between displacement and surface
    shaders' "shader" space.  Now fixed - shader spaces should be correct.
  * Rendrib previously didn't handle shaders with >64 parameters.  Now
    it's unlimited.
  * Fixed bug in fresnel(), which was calculating the transmission
    direction incorrectly.
  * The highlights produced by specular() now more closely approximate
    those by PRMan (which does not use the standard specular function).
    You can revert to the old (standard) behavior using Option "render"
    "prmanspecular" [0] (details are in the docs).

rendrib:
  * Fixed outstanding bugs with object instancing, and now object
    instances calculate their radiosity correctly.
  * Fixed bicubics that specify homogeneous points ("Pw").
  * Fixed handedness errors -- normals should all be correct now.
  * Vertex variables finally working properly!  Bugs regarding vertex
    variables are fixed, and the parser and client library are also a bit
    better at catching errors regarding vertex parameters.
  * NURB and patch mesh parameterization should now be correct (before
    it always parameterized on [0..1] for each patch).
  * Improved quadrics when radius < 0, zmin > zmax, thetamax < 0, and
    other strange circumstances.
  * Bug fix: behavior was wrong for Option "radiosity" "minpatchsamples".
  * Improved dicing of small bicubics & NURBS.
  * Attribute "light" "cache" "off" no longer needed for volume shaders
    to work correctly -- rendrib figures out itself when it can cache
    light values.
  * GeneralPolygons with holes are fixed (previously, the holes were
    not always shaped correctly).
  * Interior & exterior shaders were not necessarily called correctly.
    Now they are correctly called based on the surface normal.
  * Bug fix: RiTransform inside a motion block caused a core dump (but
    all other blurred transformations were okay).  Now fixed.
  * Better behavior for crop windows: only output pixels inside the crop.

rgl & rendribv:
  * Fixed bug that drew tori incorrectly.
  * Bug fix: RiTransform inside a motion block caused a core dump (but
    all other blurred transformations were okay).  Now fixed.
  * Fixed bicubics that specify homogeneous points ("Pw").

Miscellaneous:
  * New example scenes: smoke/atmospheric effects, dresser/specular-to-
    diffuse illumination, teapots/glass and shiny examples.
  * New shaders: clamptoalpha, glass, wood2, wallpaper_2stripe, noisysmoke.
  * Fixed parser bug that sometimes dumped core with a particular
    combination of ##Include, EOF, and gprims.




Summary of changes from 2.3.2 to 2.3.3
--------------------------------------

slc / runtime SL interpreter:
  * Support for the new SL features introduced with PRMan 3.5,
    including: min/max with >2 arguments;  point and color args for
    min, max, clamp;  optional basis string for spline;  ptlined;
    filterstep;  message passing between shaders.
  * Fixed compiler bug which choked on certain expressions involving
    constant color triples (e.g., f * color (1,1,1) ).
  * Better function polymorphism (makes better guesses about the
    return type of noise() and texture() when you don't explicitly cast).
  * Working Deriv() function.  In fact, to the best of my knowledge,
    all documented SL functions now work properly.
  * slc accepts cpp arguments (like -I to give include path).
  * Fixed SL interpreter runtime bugs on the DEC Alpha.
  * Transformations from & to "screen", "raster", and "eye" spaces
    are fixed, as well as named coordinate systems.

rendrib:
  * New -zoom <scale> command line switch, lets you "zoom up" pixels
    when used in conjunction with -d switch.
  * Uses OpenGL for framebuffer display, and supports framebuffer
    display for non-SGI platforms (using the Mesa library).
  * Fixed bug that made CSG objects display incorrectly when used in
    conjunction with the -d flag, where the argument was > 1.
  * Named coordinate systems now work properly (were broken before).
  * New -pos <x> <y> command line option forces position of window
    for rendering to framebuffer.
  * Fixed minor errors with radiosity meshing for tori and spheres.
  * Parser is a bit smarter with undeclared tokens -- instead of
    crashing, it tries hard to extract values anyway.
  * Fixed obscure bug involving calculation of NURBS and bicubic
    bounds.  It didn't appear to render incorrectly, but the bounds
    weren't as efficient as they could have been.
  * Fixed bug which caused >4 sided polygons to have parts missing.
  * Removed many of the fixed limits in sizes of arrays which can be
    read by the parser (mostly problems with for PointsPolygons).

rendribv:
  * Now uses color by default, but has -nocolor option, and
    default background is now {.1,.1,.1} instead of {0,0,0}.

rgl:
  * Now uses OpenGL.
  * rgl now distributed for many non-SGI platforms (using the
    Mesa library to implement the OpenGL calls).

libsoargs:
  * Fixed bug where files didn't close when libsoargs was done with them.
  * SO_SetShader incorrectly returned 1 for okay, 0 for error.  Now it
    correctly returns 0 for okay, -1 for error (to match Pixar's library).
  * The svd_detail field of SOvissymdef records were sometimes incorrectly
    set to SO_DETAIL_UNKNOWN.  This has been fixed.
  
libribout:
  * Fixed but with output of Quantize directive.






Summary of changes from 2.3.1 to 2.3.2
--------------------------------------

rendrib:
  * Trim Curves fully supported!
  * Optimizations for rendering NURBS and bicubics (now are much faster,
    especially when the patches are mostly flat).
  * Improved RiOrientation.
  * Fixed bug with bicubic height fields.
  * Improved texture filtering.
  * Accepts absolute paths for shader names.
  * Bug fixed -- all standard parameters work for all polygons.
  * Radiosity bug fixed -- previously handled 1 sided surfaces with
    reversed handedness incorrectly.
  * Radiosity bug fixed -- normals at sphere's poles not computed correctly.

slc / runtime SL interpreter:
  * setcomp() fixed.



