Version 5.1 (Released 8/17/2017)

Fixed issue with vchars.mta and symbols.mta not being installed in
the appropriate metafile library location, with help from Rob G.

Added ability to give quoted strings to output= directive in rfluxmtx.

Added ability to digest color (CIE-XYZ) input in pabopto2bsdf.
This change alters the .sir (interpolant) format, so these files
will need to be regenerated. Use the new "#colorimetry: CIE-XYZ" tag
to enable on input.

Rewrote bsdf2klems to support tristimulus color and call wrapBSDF.
Did the same for bsdf2ttree. Function specifications still gray only.

Reduced a problem where rvu or rholo would be slow to quit when
run with many processes on a large model or one with a large
ambient file (taking lots of memory). We were waiting for
processes to quit one-by-one, which takes some time for each
process as it disentangles its shared memory. We now
wait for all the processes together, so they can disentangle
in parallel. It can still take up to a minute in some cases,
but not 10 minutes like it was taking before the fix.

Enabled ambient cache value corral for all levels, not just final two.
This may reduce errors in certain pathological scenes.

Added -in option to rcalc, rlam, and total to limit the number of
input records in hopes of circumventing Windows EOF issues on binary data.
Also added -on option to rcalc and total for logical symmetry.

Increased modifier limit to 10,000 in rcontrib.

Fixed issues with glrad and added zoom response to mouse wheel input.

Added missing definition of "ashik2" material type to reference manual.

Changed genBSDF to calculate device thickness assuming Zmax==0 so
pkgBSDF will generate correct proxy geometry.

Created pabopto2xyz tool to combine different sensor measurements
into a single CIE-XYZ measurement file for color BSDF interpolation.

Jan Wienold updated evalglare to version 1.30

Roland Schregle added out-of-core photon mapping routines, which
may be compiled using the PMAP_OOC macro.

Added -a option to getinfo for easy addition of header lines.

Fixed issue with multiple records on picture output in rcontrib (and rfluxmtx).
Credit to Sarith Subramaniam for pointing out the problem.

Made mkillum more tolerant of non-planar polygons in its sampling routines.

Added "-recover" option to genBSDF to pick up where it left off.

Fixed genBSDF issue that was created incorrect normalization of
Klems output. Thanks to David G-M and Christian Knoflach for
discovering the error. Also improved sampling of indirect irradiance
that showed some slight bias due to poor sample collision avoidance.

Fixed long-standing issue with -aa 0 neglecting textures in calculating
surface shading.

Fixed bug in ranimove introduced during photon map integration.

Added check for steep sections of BSDF in pabopto2bsdf, creating narrower
peakes in those places and mitigating some normalization issues.

Added by Mark Stock to handle 360-degree over/under
stereo views.

Added MAX2SHADE macro to place limit on number of light sources
to precheck for obstructions. (Currently set to 200.) This
avoids excessive start-up times for scenes with many light sources.
Thanks to Axel Jacobs for pointing out the problem.

Added -v option to obj2mesh to print out mesh statistics.

Rewrote bsdf2rad from ground up and made it a standard part of build.

Fixed bug in orientation of Reinhart/Tregenza sample generator in rfluxmtx.

Added ability to perform shadow-testing through unproxied BSDFs with strong
through (direct-direct) component.

Added {+|-}a options to genBSDF and bsdf2ttree for switching off reciprocity

Added bias to see through BTDFs with a strong "through" component
rather than scattering view rays. This is in lieu of peak extraction,
which looked to be too difficult from an implementation standpoint.

Added bsdfview tool analogous to objview but for BSDF files (XML and SIR),
which calls bsdf2rad then rad with a few useful default views.

Version 5.0 (Released 9/23/2015)

Changed rmtxop so it writes out same type as lesser of inputs unless
directed otherwise using -f? option.

Changed order of oconv arguments in rfluxmtx so user can specify input
octree using -i option at the end instead of (or in addition to) a
list of scene files.

Added support for argument expansion to rfluxmtx and bug fixes.

Fixed bug in indirect hemisphere sampling for some corner cases.

Added default specular lobe to BSDF interpolation.

Set minimum number of shadow checks before direct optimization (4).

(Above changes included in 4.2.1 patch release.)

Made header input and output the default behavior for dctimestep and

Changed pabopto2bsdf default behavior to add 90-degree rotation
to bring pgII's definition of "up" in line with Klems axis
conventions. Introduced a new header variable "upphi" to
control this added rotation. Using "#upphi 90" in each
BSDF input file gets back the original behavior, where it
assumes that the up direction is 90-degrees from the X-axis.
The default value of 0 corresponds to PAB's definition of
the X-axis as being "up".

Fixed bug in rsensor related to having many rows (altitude) and
few columns (azimuth) in sensitivity file.

Fixed floating point round-off error in new Hessian calculation
for some sytems (Windows, primarily).

Fixed bug in tensor tree BSDF code that caused bus error on
some systems, and may have been source of other errors as well.

(Above changes included in 4.2.2 patch release.)

Improved ambient extrapolation to avoid zero values. Actual
threshold set to 5% of recorded value.

Changed anisotropic Gaussian and Ashikhmin models so that
illegal orientation vectors are dealt with more gracefully.

Created wrapBSDF tool and incorporated into genBSDF along
with new rfluxmtx computation.

Initial check-in of Roland Schregle's photon map integration.
New 5.0a version designation as suggested by Andy McNeil.

Added left-hand coordinate sytems to rfluxmtx to correct
problems with coordinate axis orientations pointed out by
David Geisler-Moroder.

Added color output to genBSDF (+C option) and support for
color rendering of Klems and tensor tree data.

Fixed another bug in rsensor that caused rays to be generated
on opposite side of hemisphere even where sensitivity was zero.

Fixed bug discovered by Jacob Jonsson in Klems BSDF
interpolator that caused it to over-predict normal
transmittance and reflectance.

Added ability to read input from commands in dctimestep
and rmtxop.

Added photon map support to rad. Fixed some double-counting
issues in photon-mapping spotted by David Geisler-Moroder.

Added photon map support to trad.

Fixed bug in antimatter source testing when antimatter
definition follows potential obstructor in input.

Fixed issue with missing character type identifier at head
of genBSDF XML output.

Prompted by Roland S., added option to have pcompos -a order
rows from top rather than bottom of image.

Changed dctimestep to accept matrix as well as BTDF input
in the VTDs invocation mode. This permits the output of
rmtxop to be used in a pinch when combining multiple BTDF
layers, although interreflection between layers is not
accounted for properly as it is in the WINDOW program.

Added Jan Wienold et al.'s evalglare to distribution.

Version 4.2 (Release date 7/31/2014)

Axel Jacobs added -cp and -palettes options to falsecolor.

Fixed bug in matrix output of genBSDF introduced shortly before 4.1 release.

Made rvu more responsive in multi-processing mode when changing parameters.
Explicit "new" command not needed to show changes, because it goes back
to "immediate mode" once something is changed. Processing will be slow
but response time quick until next "new" command.

Fixed major bug in transmitting proxy material sampling.

Patched cmake build tools (changes by Zack Galbreath).

Removed requirement for pflip -h to be given input file (can pipe from stdin).

Added "Number of processes" slider to trad "Action" pane to control rad -N
option for rvu and batch rendering.

Added -c option to vwrays to repeat pixels for rtcontrib.

Reworked rtcontrib program and renamed to rcontrib. New version runs much
faster, especially on multiprocessor systems, and doesn't require as much
memory. No longer calls rtrace; instead does all the work itself.

Added -d option to genskyvec to produce direct-only (sun no sky) vector.

Added Ashikhmin-Shirley anisotropic BRDF model (ashik2) with help
from Nicolas Boneel.

Added Ruby rewrite of objview.csh by Rob Guglielmetti.

Fixed bug in reciprocity for tensor tree BTDF representations. Thanks
to Andy McNeil for identifying the problem.

Added MNAME and ZNAME variables to ranimove for debugging & testing.

Created pmblur2 command to take motion and depth buffers from ranimove
to compute a better motion blur.

Changed BSDF routines to use updated/corrected XML specification and
removed depracated BSDF support from mkillum.

Fixed behavior of i/o flushing in rcontrib with -c > 1 (averaging). Thanks
to Lars Grobe for help identifying this problem.

Fixed bug in depth-of-field blur where view distance was measured from
fore clipping plane rather than viewpoint. Thanks to Peter A-B for
pointing this out.

Added options to dctimestep to allow multiple time steps (-n)
and multiple output pictures or sensor files (-o). Also added -i
option to specify float (-if) or double (-id) input for sky matrix.

Created gendaymtx program to compute annual sky patch matrix based
on Ian Ashdown's implementation of Perez all-weather sky model.
Output can be sent directly to dctimestep in ASCII or binary stream.

Replaced existing gendaylit.c with improved version from Wendelin Sprenger
and Jan Wienold of ISE.

Improved accuracy of ambient calculation for large -ad settings. Thanks
to Lars Grobe for noticing the problem.

Added -r option to gendaymtx to rotate the sky the specified number of
degrees about the zenith as suggested by A. McNeil.

Axel Jacobs added -pal eco color map that does a blue-red-yellow scale.

Created bsdf2klems tool to convert from various BSDF representations to
Klems basis matrix in XML file.

Fixed problem with inappropriate reciprocity enforcement on tensor
tree reduction in genBSDF. (Thanks to A.McNeil for discovering issue.)

Fixed bug in isotropic tensor tree sampling for impinging rays
exactly normal to surface. Thanks to Peter Apian-Bennewitz for
discovering and pointing out the error.

Fixed double-counting bug in mirror material with alternate type.
Thanks to David Geisler-Moroder for spotting the problem and helping
to fix it.

Created rcollate program to resize and transpose matrix data for Andy
McNeil's 5-phase annual simulation method.

Added epw2wea conversion program by Christoph Reinhart.

Implemented Perlin's improved noise function with help from Rahul Narain.
This will change the appearance of renderings using this function.

Added "origin" command to rvu as requested by John Mardaljevic
to place view origin at selected point in scene.

Switch to Perl versions of objview and objpict written by Axel Jacobs.

Improved rendering speed of scenes with aliases by not entering new
modifiers into table if they are the same as the previously defined
modifier for that name.

Made it so icalc and rcalc search RAYPATH directories for *.cal files
given on command line. This simplifies script writing and makes these
utilities consistent with other tools in Radiance.

Added triangulation routine to handle convex polygons in obj2mesh.

Made backface visibility apply to all material types, including
transparent and translucent materials (except dielectric and interface).
This makes the option useful in cases where adjacent trans surfaces
are placed next to each other by a modeler that only understands
volumetric objects.

Changed dctimestep so that output matrices (-n > 1) are preceded by a
header, and added support for float and double output formats with -o[fd].

Introduced eplus_adduvf program to compute user view factors for EnergyPlus.

Changed image-plane sampling in rpict to use Hilbert curve, which gives
less of a brushed/striped appearance to output pixels with -u- (default).

Added ltview and ltpict Perl scripts contributed by Axel Jacobs, inspired
by Rob Guglielmetti.

Added header variables for NROWS, NCOLS and NCOMP to help standardize
matrix files. This functionality has been incorporated into
rcollate, gendaymtx, and dctimestep.

Created rmtxop utility to operate on multi-component matrices. This
facilitates some daylight matrix calculations, and provides a general
tool for manipulating matrix data.

Introduced new Hessian-based error control in irradiance caching (ambient)
calculation. Since the format of the stored ambient values is different,
the old files will be rejected with an error message and must be removed.
The programs may be compiled with the -DOLDAMB option if this is a problem.

Added -p option to rcontrib to set function file parameters on a per-modifier
basis to simplify bin evaluation.

Created rfluxmtx program to compute flux transfer matrices from a sender
surface to one or more receiver surfaces. (Renamed the file
to in the process.)

Added "-c" option to getinfo to execute command on data segment.

Version 4.1 (Released 11/04/2011)

Changed ranimate behavior so remote login under a different user
doesn't necessarily require the presence of the originating user's
home directory.

Changed standard transmission function normalization back to what
it was in version 3.5, following recommendation of David Geisler-Moroder,
who pointed out that the revised BTDF increased too much at grazing.

Changed rad behavior with -N >1 on single view to call rpiece.

Updated SCons build system for MINGW compilation, thanks to Christian

Added -u option to rlam for unbuffered output.

Modified dctimestep to accept sky vector and daylight coefficient matrix
or list of images to sum together, as suggested by Andy McNeil.

Created genBSDF script to generate BSDF in Windows XML format.

Modified mkillum to accept detailed geometry from BSDF XML files.

Altered obj2rad to ignore zero normals (thanks to Jack de Valpine for
suggestions and help).

Fixed bug in genklemsamp that caused non-uniform sampling over surfaces.

Fixed bugs in rhoptimize and rhcopy for 64-bit compilation.

Made a change to avoid problem using gcc --fast-math compile option.

Changed behavior of rtrace and rtcontrib so that every scanline is
not flushed when both -x and -y are set. This avoids flush delays
in rtcontrib for large numbers of output files and delays while
rendering images using rtrace with the -n option.

Added ability for rsensor to output ray origins and directions
rather than actually loading octree and computing sensor value.

Fixed old bug in obj2rad where it would stop processing and
report a syntax error if the "void" type is used in the map file.

Updated reflection model according to EGSR 2010 paper by David
Geisler-Moroder and Arne Duer.

Replaced C-shell version of falsecolor with Perl script written
by Axel Jacobs.

Changed -sj (specular jitter) option to something called specular
sampling (-ss), which if set less than 1 has the same behavior as
the old -sj, but when set greater than 1, spawns multiple ray
samples from semi-specular surfaces.

Fixed bug noticed by Randolph Fritz that caused ambient sync errors.

Fixed bug in findglare for reading picture files under Windows.

Added options to pvalue to note other color spaces on reverse conversion.
Thanks to Erich Philips for the feature request.

Added BSDF data-driven material type with full sampling support.

Added BRDF calculations to genBSDF.

Bug fixes in rsensor thanks to help from David Geisler-Moroder.

Added variable-resolution BSDF support in renderers and genBSDF.

Created pkgBSDF program to extract BSDF geometry and put it
together with surface description suitable for inclusion in
a Radiance scene.

Muted warning for "no light sources found" when there is at least
one glow object and interreflections are on (-ab > 0).

Fixed long-standing bug that caused underestimation of reflection
when specular component was below -st threshold in non-metals.

Checked in cross-platform cmake build system created by Bill Hoffman
of KitWare and sponsored by NREL. This includes a qt-based
driver for rvu, which is built in the new subdirectory src/qtrvu.

Version 4.0 (Released 3/12/10)

Added -n option to rvu to provide parallel rendering.

Changed ".pic" extension to ".hdr" in all sources and documentation
to improve interoperability with other software, since this has become
the de facto extension for Radiance RGBE and XYZE pictures. Since file
extensions were never more than a convention in Radiance, this does not
affect operation, but may require the update of scripts, etc. written
by others that assume the ".pic" suffix for Radiance output.

Added -N option to objview to support multiprocessing.

Improved sampling of circular sources (source, sphere, ring types) with
quite a bit of help from David Geisler-Moroder.

Added "rpict" and "rvu" variables to rad, and made these as well as
the "oconv", "mkillum" and "pfilt" variables accept an alternate
command path in each case. Change suggested by Lars Grobe based
on similar Radzilla (radz) facility by Carsten Bauer.

Fixed rad -v N specification to use actual view name if one.

Fixed error in mkillum calculation where it neglected indirect
source contributions from BTDF illum's.

Added GMT and LATLONG header lines for Greenwich Mean Time and
degrees North Latitude / East Longitude.

Added gendaylit to distribution (finally).

Added ability in vwright(1) to get view from command line arguments.

Created genklemsamp(1) utility to generate samples suitable for
BSDF-based annual calculations. This is the first Perl script to
be added to Radiance. Hopefully, others will follow.

Added file to compute Klems bins for windows.

Created genskyvec utility to sample a particular sky and
evaluate average radiance over the standard Tregenza sky patches.

Created dctimestep program to compute a set of sensor values or
a combined image for a particular time using the daylight
coefficient method.

Created src/rt/rayfifo.c for first-in/first-out handling of
multiprocessing by raypcalls.c.

Added -n option to rtrace for executing on multiple cores
using new rayfifo calls.

Version 3.9 (Released 3/30/08)

Added -spec option to falsecolor to restore original spectral color scale.
Also added "-s auto" option to automatically set the maximum value.

Added byte-swapping input and output to rcalc.

Additional error-checking for source surfaces.

Re-fixed bug in octree code that caused it to allocate 8 times as
much memory as it actually used(!) -- this was pointed out way back
in 1999 by Erik Reinhard and Erik Jansen, but the fix they gave me
got lost in the slightly broken release process at the time. This
should make a big difference in memory usage, especially for the
new mesh primitive. (I measured 30% less memory usage.)

Corrected ray weights for material mixtures.

Reduced the default -n setting for obj2mesh to take better advantage
of the smaller octree structure size.

Fixed bug in shadow cache where it was adding surfaces with antimatter
holes cut in them to the obstructor list. Thanks to John Mardaljevic
for discovering and reporting the problem.

Adding ability in mkillum to incorporate BSDF data in calculation.
Internal interface (raypcalls) now used in place of rtrace process(es).

Fixed pixel alignment in pcomb for size reduction and enlargement.

Allow rtcontrib user to set -P and -PP options for persistent rendering.
The only caveat is that -n setting > 1 requires -PP rather than -P.

Added -c option to rtcontrib to facilitate cumulative calculations.

Fixed long-standing bug in, which caused it to produce
reversed anisotropic photometric distributions due to the
misorientation of the y-axis. Thanks to Zack Rogers for discovering
and helping debug this problem.

Fixed long-standing bug in replmarks, where triangles with X-side
aligned with Z-axis would cause incorrect rotations. Thanks to
Zack Rogers for finding this error.

Added rsensor program to compute sensor signal for daylighting controls.
Funding for this component was provided by the Architectural Energy
Corporation in Boulder, CO, and directed by Zack Rogers.

Added "planisphere" (stereographic) fisheye view type for traditional
daylighting analysis. Feature requested & explained by Axel Jacobs.

Modified -c option to rtcontrib so it can take a number of input
rays to average over, rather than only produce a single accumulated
record (which can now be done with -c 0).

Version 3.8 (Released 10/17/06)

Fixed Russian roulette ray termination, which was doing the opposite of
what it should have been doing, resulting in overestimated values below
minimum ray sampling weight (serious).

Changed mksource to use 98th percentile (rather than 99th) for threshold.

(Above changes included in 3.7.1 patch release.)

Eliminated writing of EXPOSURE= line in ra_tiff -r when source TIFF
does not have STONITS set.

Fixed bug in ambient calculation that caused black values for multiple
bounces in some scenes. Thanks to Mark Stock for creating and sharing
the sophisticated test scene that demonstrated this problem.

Fixed bug in antimatter using Russian Roulette sampling.

(Above changes included in 3.7.2 patch release 22 Aug 2005.)

Created fieldcomb script to combine alternate fields in a rendering
sequence. (Development generously sponsored by Iebele Abel.)

Added missing preload of mesh objects for more efficient memory use
during parallel rendering -- this was a serious oversight.

Created ran2tiff program to automate exposure setting of animation
sequences using a moving histogram in combination with pcond, and
converting frames to TIFF.

Eliminated SPEED macro from makeall and source tree.

Added -pj option to vwrays to allow jittering of sample locations.

Fixed bug in rtcontrib where it occasionally missed writing the
final bin file. (Pretty serious, actually.)

Added -Dfseeko=fseek to MACH= line for linux, as fseeko(3) seems to be
broken in current versions of Linux. (Need to remove this later.)

Rearranged struct's for better efficiency on 64-bit architectures.

Added -i option to rlam so it works with binary input formats.

Added rtcontrib -bn option to specify number of bins and fixed bug
in recovery of files containing multiple values per record.

Added rtcontrib -fo option to write over existing files, which it now
refuses to do without this option.

Made rtcontrib flush output when handed a zero-length ray vector,
to match behavior of rtrace.

Improved color scale for falsecolor output.

Added threshold test for Fresnel approximation to prevent its use
on smooth surfaces with unrealistically low specularities (less than 1.8%).
Water has a specular reflectance of 2.1% at room temperture.

Removed NICE macro settings in rpict and rtrace, which was slowing down
the processes under Mac OS X (10.4) by about 60% due to processor napping.

Made xform, replmarks and rad2mgf handle quoted modifiers and names properly.

Fixed problem in genblinds, where it was generating slats that were too
wide with the +/-r option. (Thanks to Helena Buelow-Huebe for discovering
this bug.)

Fixed bug in ra_ppm for 16-bit/sample i/o, where it was getting the byte
order wrong (apparently).

Added -V option to rtcontrib to report actual contributions, rather than
just ray coefficients.

Fixed bug in ranimate that caused it to fail in continuation of renderings.

Renamed librt.a to librtrad.a, to avoid conflict on Solaris. Almost
everything now gets linked to -lrtrad instead of -lrt.

Fixed problem with large sample sets, so -u+ option now is truly random.
Thanks to Rick Mistrick and Younju Yoon for identifying this problem,
which was related to a poorly designed hash function.

Changed -u+ to be the default setting in rtrace (only).

Fixed binary i/o for rlam and vwrays under Windows.

Added tmCvLums() to tone-mapping routines using a 16-bit lookup table
on IEEE floats, which is also used to improve speed of COLOR conversions,
especially on machines with slow log() calls. The first call to
tmCvLums(), tmCvGrays(), or tmCvColors() initializes the table.

Created optics2rad.csh script to convert from Optics 5 material output
to something correct for Radiance. Built on old function,
which is actually incorrect so removed from the distribution.

Fixed nuisance bug in ximage under some SGI machines that caused it to
choose an inappropriate visual and display incorrect colors. (Thanks
to Oskar Itzinger for debugging the problem.)

Fixed long-standing inaccuracy of pcompos -t and +t thresholding options.

Fixed bug in handling of views with tabs rather than spaces.

Fixed bug related to alias of alias.

Changed default sky turbidity in gensky from the original default of
2.75 to the CIE 110-1994 standard value of 2.45. Thanks to Marilyne
Anderson of MIT for pointing out this discrepancy.

Added -o option to ra_xyze to produce original pixel values.

Fixed bug in tracing of virtual sources, where intervening glazing was
not being accounted for properly.

Added -h option to pcompos and pcomb to eliminate verbose headers.

Version 3.7 (Released 7/25/05)

Fixed bug in source occluder cache which caused consistency error
for distant sources and mist materials. (Thanks to Mark Stock for
finding the problem.)

Fixed serious bug in source drawing routines for rpict, where the edges
of light sources were appearing through obstructions. (Thanks to Veronica
Sundstedt for pointing this out.)

(The above were included in the 3.6.1 patch release.)

Changed default temporary directory from /usr/tmp, which doesn't exist
on a lot of systems these days, to /tmp.

Eliminated many unused files and programs from the distribution, including
the following programs that were being built but no longer used:
oki20 - printer driver for OkiMate 20 printer (B&W)
oki20c - printer driver for OkiMate 20 color printer
pcwarp - intended as more general substitute for macbetcal,
but never quite worked
ra_avs - convert to & from AVS image format
ra_bn - convert to & from Barneyscann format
ra_pr - convert to & from 8-bit Sun rasterfile format
ra_pr24 - convert to & from 24-bit Sun rasterfile format
thf2rad - convert GDS "things file" to Radiance scene format
If anyone is still wanting any of the above programs, let us know and we'll
reinstate it.

Fixed bug in pcond's acuity simulation for small view angles (less than
4 degrees horizontally or vertically). Thanks to James Lee for figuring
this out.

Added script to convert to/from ICT's Poskanzer Float Map, which I don't
care to support officially due to its machine-dependent byte order.

Fixed bug that caused incorrect reporting of non-surface in set when
mixing meshes and instances. (Thanks to Jack de Valpine for discovery.)

Fixed inaccuracy in calculation of diffuse transmission in the presence
of pure specular (Fresnel reflection) using "trans" material. Thanks
to Christoph Reinhart for pointing out the error.

Made internal change to tone-mapping library to use structure pointer
rather than stack, making code re-entrant and more up to modern standards.

Added -pd option to handle depth-of-field blur in rpict. This requires
that the view directon (-vd option) include focal distance information,
which is now preserved by the various view file routines, and reported
by the vwright command.

Added DBLUR variable to ranimate and pmdblur script to handle simultaneous
motion and depth-of-field blurring. Thanks to Visarc for funding this work.

Added setting of focus distance in rvu ("focus" command) and rholo
('f'/"frame" command).

Changed default remote shell in ranimate to "ssh" rather than "rsh",
which has been abandoned on most Unix systems due to security issues.

Fixed behavior of source primitive using illum with no alternate
material. These now become transparent so one can see the sky or
light-probe background for use in image-based lighting. Previously,
the user needed to specify the background glow as the alternate
material for a distant illum source to behave properly. (This still

Fixed some minor problems and inconsistencies with 16-bit/channel
TIFF i/o in ra_tiff.

Created mksource program to generate distant sources for improved
image-based lighting with light probes.

Changed ambient calculation so that -ad will not limit recursion
depth, and a minimum of 27 samples will be sent out for each stored
ambient value, or 3 samples if -aa is 0 (caching off).

Added -oM option to rtrace to report material (rather than modifier)
for cases where actual material is aliased or further up modifier chain.

Rearranged the way ray contributions are computed so that it might be
possible to use rtrace to derive daylight coefficients and optical
transfer functions. The new -oTW option of rtrace produces color
contribution weights for each ray, which combined with the -ti (or -tI)
option permits the contribution of selected surfaces or sources to
be determined. Using the -oTW option, one should also specify
options "-dt 0 -aa 0 -as 0" for optimal results. In particular,
one cannot expect reasonable tallies with -ab >= 1 and irradiance
caching on (-aa > 0).

The same code modifications included a change to the indirect computation
with caching switched off (-aa 0). Whereas before, the number of secondary
rays after the first bounce were half of the previous generation, they are
now determined by the surface reflectance, making for a better and faster
calculation. It should now be possible to compute many bounces with -aa 0,
which used to be prohibitively expensive.

Added -T option to xshowtrace to trace rays to light sources.

Added meta2bmp program to produce BMP files from metafile graphics.

Added cct_x(t) and cct_y(t) to src/cal/cal/ to interpolate
CIE chromaticities for particular black-body temperatures.

Increased maximum number of input pictures in pcomb and pcompos to 512.

Created rtcontrib program for computing ray contribution coefficients.
This tool may be used to do standard optical ray tracing or daylight
coefficient calculations for annual simulations, among other uses.

Added tilde ('~') output option as part of the -o* specification of
rtrace. This permits ray trees to be parsed more easily in binary
output mode, as needed by rtcontrib.

Implemented Russian roulette ray termination with -lr <= 0.
Made -lr -10 the default in rtcontrib.

Made rtcontrib -f option search RAYPATH directories.

Made it so -o option of rtcontrib can pipe -o output to a command.

Added -if and -of options to total for binary i/o (following rcalc mold).

Switched default options in rtrace to use Russian roulette. (Rpict and rvu
still use biased ray termination.)

Added rtcontrib -r option to recover partial output.

Added -u rendering option for pure Monte Carlo sampling.
(Got rid of -DMC compile option, which this makes superfluous.)

Changed -t option of rlam to accept strings as well as single characters.

Fixed bug in rcalc with -l option where it would sometimes go into an
infinite loop.

Fixed truly ancient bug in bounding box computation for cones, which
could (and did) cause missing segments.

Added -z option to normtiff to output LZW-compressed files.

Last change to total causes it to produce results when it sees an empty
line on the input. This was not intentional, but I decided I like this
behavior so I documented it rather than changing it.

Version 3.6 (Released 10/21/04)

Modified 4-byte RGBE encoding routine to avoid problems
when one or two primary values is negative and the other(s)
positive. This used to generate some strange color values.

Added -oc option to rtrace to output local (u,v) coordinates.

Fixed bugs in local uv and j unit vector variables in src/rt/func.c.

Added warning message to OpenGL rendering routines about new
mesh primitive, which we cannot currently render.

Added -if, -id, -of, and -od options to rcalc to provide for
binary float and double i/o.

****************** COMPATIBILITY CHANGE ***********************
Changed holodeck format to used off_t instead of long for beam
positions, which allows holodecks to grow to system file size limit.

Fixed wrapping long in source hit test code, which would cause
odd horizontal lines in some very long renderings.

Added -f and -w options to ra_tiff to create IEEE float and 16-bit/primary
TIFF output, respectively. These formats are also understood on reverse
conversion. (16-bit/primary has been understood for some time, but not
IEEE float.)

Added -N option to rad to start multiple rendering processes in

Fixed bug where mesh instances were not being freed, so subsequent calls
in programs like ranimove would refer to bogus data.

Added support in normtiff for floating-point and 16-bit/sample TIFF input

Changed marksources() routine (src/rt/source.c) to check all
primitives in the modifier chain for emitting types, not only
the first. This permits sources to be described with intervening
modifiers before the light/illum/glow primitive and allows aliases
as well.

Fixed bug in xform where it was neglecting to add transform arguments
to new mesh primitive.

Added -dF and -dD options to pvalue for byte-swapped floats and
doubles, respectively.

Changed meta2tga to output correct colors.

Changed local coordinate index from 32-bits to 16-bits, which requires
that Radiance mesh files be recompiled. (Later decided against this
change, as it caused problems with some models.)

Changed integer tone-mapping routines to better deal with images
containing large, constant regions.

Improved interaction with rholo -o ogl driver under OS X, which was
returning bad values from the depth buffer.

Minor bug fix in ranimove where it was restarting processes when it
didn't need to.

Increased accuracy of default ambient parameters in rpict, rview, and
rtrace. In rad program, doubled -ar value, -ad value, and -as value,
and decreased -aa value a bit. Also adjusted -lr upwards and -lw
downwards. I should have done these things long ago, as processors
have been getting faster and faster over the years.

Fixed bug discovered by Marcus Jacobs where oconv was dumping core
when it was given too many modifiers.

Fixed problem with rpict where it was drawing illum sources badly
even when they weren't all that small in the view.

Added in(i) function to rcalc for more flexible channel evaluation.

Replaced all calls to vfork() with regular fork() calls.

Fixed bug in glarendx for dgr calculation with sources behind view.

Added -p option to histo to print percentages/percentiles r.t. counts.

Added a source occluder cache to accelerate shadow testing. This
can save up to 50% of the calculation time in scenes with many
light sources, especially ones containing large occluders. This
optimization may be tuned or switched off with the -DSHADCACHE=N
compile switch, where N is the resolution of the shadow cache, or
0 to disable it. Since this is purely a time vs. memory trade-off,
I decided not to make it a new command-line option. (We already
have plenty.)

Changed the following command names to avoid conflicts:
rview -> rvu (with symbolic link back to rview)
calc -> icalc
lam -> rlam
gencat -> gencatenary

Improved -f option of normpat, which caused odd color changes before.

Created pgblur script which does fast Gaussian blur of image without changing
its dimensions. This is very useful in certain types of image processing
calculations, such as finding or removing low frequencies.

Changed little-used objpict script so that it takes scene files rather than
rpict options on the command line, and puts everything into the right
coordinate position automatically rather than requiring the user to do it.

Added -I option to replmarks for mesh instancing.

Made similar change for virtual sources to allow modifiers and aliases
on the mirror and prism types to work properly.

Rob Guglielmetti added -lw and -lh options to falsecolor to control the
legend dimensions. Made it so -lw 0 and/or -lh 0 turns legend off.

Made it so pcompos will read everything from a stream even if it doesn't
need it, so input commands will not receive a hangup signal.

Wrote ra_bmp program to convert to and from Windows BMP files (finally).
It's the most horrible image format I've ever seen, and I've seen a lot.

Increased -aa default value for all renderers (and also -ad and -as in
rview) at Schorsch's suggestion. I think this undid my earlier decrease
of -aa last time, which I guess was ill-considered.

Modified oconv to keep subdividing the octree if there are too many
objects in a voxel even when the -r resolution limit has been
reached. This was not done before due to problems with recursion,
and still, it will only continue to 256 times the original -r limit.
If that isn't enough, then there's probably no hope, anyway.

Added -l option to obj2mesh to search for material files in library

Increased polygon vertex limit to 512 in obj2mesh and obj2rad and added
warning if this limit is exceeded.

Added tone-mapping and monitor primary options to ra_bmp. This gives
new functionality similar to normtiff and ximage. It would be nice to
add this feature to the other ra_* programs as well... someday.

Fixed long-standing bug in reported pixel ordering out of certain
protate commands.

Added -p option to rcalc for "passive mode" that transmits
unrecognized input -- useful for substituting data in the
middle of a stream.

Fixed a very obscure bug in rpict that caused a dark horizontal
line in certain cylindrical projections due to improper drawing
of the sky dome source in rt/srcdraw.c.

Fixed problems with effective ray lengths computed for dielectric
and BRTDfunc materials. This was most evident in breakup of holodeck
views when VDISTANCE=True.

Fixed rad so that 'scene' variable may consist only of inline commands.

Fixed bug introduced in shadow caching routines where sources in the
middle of spheres were not illuminating properly. Thanks to Guilio
Antonutto for spotting this problem.

Modified gensky behavior so if time is given with standard time zone
designation, any -m option is ignored.

Added -n option to mkillum for (shared memory) parallel processing.

Fixed a long-standing bug in parallel processing code that only
seemed to manifest with the new mkillum -n option, where rtrace
would deadlock upon termination. The reason it never showed up
before is because I always closed processes in the reverse order
of opening them in other programs. I went through and found similar
(potential) bugs in the rview device subprocess code and util/netproc.c.

Corrected the normalization of the Gaussian reflectance model. This will
cause an increase in specularity for low-lying light sources.
Thanks to Don Walters of Boeing and Arne Duer of the Univ. of Innsbruck
for pointing out this error. The square root used for the two cosines
in the denominator of the normalization factor should not be present.
This was a serious mistake I made in the original model, which went
undiscovered (at least to my knowledge) for over a decade. I think
Bruce Walter of Cornell may have known about it, but I never heard
the details of his discovery.

Enabled the -p option for primary conversion without tone-mapping
in ra_bmp. Also provides for XYZE input conversion to RGB.

Fixed what I consider a bug in pvalue -o when taking XYZE files on input,
where it was inappropriately undoing the exposure value so that it always
reported radiance rather than XYZ values with Y in cd/m^2.

Made it so ra_bmp only produces run-length encoded 8-bit output for
grayscale images that are tone-mapped. This minimizes circumstances
under which output scanline order is reversed.

Fixed bug in rcalc where it sometimes wasn't parsing the input format

Version 3.5 (Released 3/21/03)

Fixed bug in replmarks pointed out by Georg Mischler, which caused
garbage to be output under specific conditions (unscaled, unrotated

Fixed bug in normtiff that caused occassional weird colors
on human tone-mapping of 32-bit LogLuv inputs (tmapluv.c).

Fixed -o option of pcomb so it resets le(i) and color exposure functions
to unity.

Fixed a bug in Type B photometry in ies2rad introduced
in last fix where spherical sources were getting symmetric
distributions front-to-back.

Fixed another bug in ies2rad for 90-270 bilaterally symmetric fixtures, which
seems to have been there from the beginning. Thanks to Jack de Valpine
for pointing it out.

Added NORANDOM symbol for tests with all random sampling turned off.

Fixed a bug in expression evaluation code that was causing unneeded
evaluations of constants. This is a fix on an earlier fix of a more
serious bug prior to the 3.4 release, where the expression clock
was wrapping silently and allowing values to go stale.

Fixed an even more serious bug in ies2rad for thin fixtures, where
it was using "flatcorr" without the proper correction for the
emitting area. Thanks again to Jack de Valpine for spotting this.

--- All of the above was put into a 3.4.1 patch release 4/1/2002

Added a facility to gensurf to make holes in the mesh using a
valid(s,t) function.

Fixed bug in pcond that caused a bus error on images with large dark
regions when acuity switch was set.

Fixed bug in pcomb that caused the S(n) function to return half
the solid angle value it should have. (Thanks to John Mardaljevic
for discovering this error.)

Made rpict/rpiece/vwrays -vf option accept "-" as a synonym
for standard input.

Fixed bug in persist functions (-P and -PP) with FreeBSD
(including MacOS X) having to do with altered system function
behaviors. Neither mknod() nor freopen() behave as they
used to.

Improved accuracy of irradiance gradient calculation near
specular surfaces by using the effective ray distance
rather than the first surface intersection. (John
Mardaljevic had pointed out some errors he was seeing
with a particular atrium model.)

Reinstated my favorite little Fresnel approximation for
perfectly smooth materials, so grazing angles show an
accurate gradient. Simultaneously revised the computation
of the direct component for proper energy balance.
(Thanks to Phillip Greenup for nagging John M. who nagged me.)

Improved the accuracy and appearance of indirect irradiance
interpolation for smoothed surfaces. (Thanks to Bernhard
Spanlang for noticing the problem.)

Fixed intolerance for carriage-returns in mkillum's input files,
which caused problems for files imported from DOS/Windows.

Fixed apparent bug that I couldn't reproduce in rpict for very
narrow views, which sent it into an infinite loop under Linux.
(Rich Gillibrand of Bristol Univ. pointed it out.)

Improved movement in rholo for low-detail holodecks on fast
graphics processors by inserting 50 ms pause during motion

Finally fixed ages-old consistency error where ambient value
lists were sorted incorrectly with the GNU-C compiler,
causing the dreaded "address not found in avlmemi" crash. All
this time, I thought it was due to a faulty qsort(3) routine,
when in fact it was due to the way GNU-C compares pointers.
The fix was to change a single word in ambient.c from "AMBVAL"
to "char" and now it all magically works. No more -Dtracktime=0,

Fixed pcond veil behavior for scenes that have their contrast
reduced by primary tone-mapping algorithms. Previously, the
veil would come out looking like a fog because it was applied
prior to dynamic range compression and did not consider the
overall effect. In the new version, the veil is adjusted
after dynamic range compression so that the net reduction
in visibility is approximately correct over the whole image.
(Later made this optional on compile with the ADJ_VEIL symbol, as I
noticed more artifacts than improvements in the resulting images.)

Fixed bug in BRTDfunc that caused an error in the calculation
of the diffuse transmitted ambient component. This must have
been introduced early on, but never noticed by me or anyone.

Wrote an interactive script called "glaze" (src/gen/glaze.csh)
that computes a good material model for fritted and low-E glazing
systems. Thanks to Visarc (Jack de Valpine) for paying for its
development and permitting it into the general distribution.

Increased scanline window in pcomb to 64 (+/- 32 pixels) to allow
for larger kernels in filtered images.

****************** COMPATIBILITY CHANGE ***********************
Changed behavior of pfilt gaussian blur to match more precise
definition. A blur radius of 0.6 is now preferred over the
previous value of 1.0.

Added ANSI function prototypes to the header files in
src/common/ and src/rt/ and cleaned up the options processing
in the rpict, rtrace, and rview main procedures so that the
core Radiance rendering code can be more easily
called by new application programs. Changed src/rt/Rmakefile
to create a rendering library called "libradiance.a" and
to install it in the src/lib/ directory along with the new
raycalls.o module, which should facilitate the building
of new applications outside the src/rt/ directory. The
raypcalls.o module, also installed in src/lib, manages
parallel rendering on multiprocessors with shared memories.

Wrote new ranimove animation rendering program, which is an
alternative to ranimate. The key difference is that
ranimove is optimized for moving scenes, and includes
a complete blur simulation for camera and object motion.
It also incorporates an sophisticated model of perceivable
error based on visual focus, and allows progressive
animation so one can explicitly control rendering time
and/or accuracy. See the man page for details.

****************** COMPATIBILITY CHANGE ***********************
The sense of the MBLUR setting has been changed for the ranimate
command. The first value is now the fraction of a frame during
which the shutter is open, and the _second_ argument (which is
optional) is the number of samples to specify to pmblur.

Enhanced octree reader behavior so it will accept command
specifications preceded by an exclamation mark ('!'). This
enables rtrace and rview to take octrees from commands similar
to rpict reading its octree from the standard input. All
programs taking octrees as arguments will be affected by this
change. However, since rad needs to get the modified date
from the octree, rad will refuse such an octree command

Fixed a bug in src/common/fgetline.c where it failed to elide
carriage-returns in Windows files.

Modified src/common/fgetword.c so it accepts single- or
double-quoted words with spaces in preparation for the
Windows version, which needs to allow spaces in file
paths. Since fgetword() is called by all programs that
read in string arguments in scene files, these may now
be quoted with the expected behavior. Also added a
fputword() call to the library to automatically quote
words on output that contain white space. This routine
is now called from all the right places, I hope! The
code does not support spaces in primitive identifiers,
and you will get peculiar errors if you try them.

Eliminated virtually all symbolic links from the source
tree, most of which were links to compatibility routines
and the calcomp functions for expression parsing.
Replaced -D* defines used in cal* routines with "esupport"
global that allows calling programs to set which language
options they want to support at runtime. More programs now
link against the -lrt library. Consolidated the src/cal
subdirectories in the process.

Added -dw option to pvalue program to input and output
16-bit word values (-dW for byte swapping).

Changed call ordering in material shaders to ensure
proper surface normal perturbation for two-sided,
textured surfaces.

Added a new "mesh" primitive, which permits very
complicated geometries with associated (u,v) coordinates
using the new obj2mesh converter and the new -o option
of gensurf for .OBJ output. Mesh compilation takes
roughly 500 bytes/triangle in obj2mesh, but memory
access is well-ordered compared to rendering, which
takes about 50 bytes/triangle with full surface normal
and (u,v) coordinate interpolation. (The actual mesh
is represented in 15 bytes/triangle, and the rest is
taken by the octree structure and malloc overhead.)
Local coordinates are set with the "vt" statement
in the Wavefront .OBJ file and accessed via the new
"Lu" and "Lv" variables in a Radiance .cal file.
Multiple instances of the same mesh with different
transformations take little additional space during
rendering, permitting scanned relief surfaces and
displacement-map-like effects to be repeated as desired.

Changed internal representation of alias'es in order
to maintain information about links for programs like
rshow that work from frozen octrees. Added a special
alias modifier keyword, "inherit", to indicate that
an alias should get the same modifier as the original
target to simplify common alias usage for material

Increased default oconv -n value to 6. Since triangle
meshes commonly have six faces joining at each vertex,
values less than this cause resolution-limited voxel
subdivision. Increased default -r option to 16384
as well. Also increased maximum internal set size
from 127 to 511, to accommodate difficult mesh
models where many faces come together at a point.
This required a little reprogramming in for couple
of recursive routines using sets to avoid overrunning
the stack limit.

Version 3.4 (Released 1/28/02)

Fixed bug in rpiece that caused it to incorrectly compute -vs and -vl
(view shift and lift) offsets. (Included in 3.1.1.)

Fixed bug in xform handling mist's with > 5 real arguments.
(Included in 3.1.1.)

Fixed bug in mist handling routines that caused some incorrect calculations
for distant sources. (Included in 3.1.1.)

Added ability for lam utility to read from commands.

Created vwrays command to compute ray origins and directions for specified
views or pictures.

Changed rtrace behavior to send bogus record when ray direction is zero.
(Before, it only flushed values with no corresponding record.) This
change was needed to facilitate its use with the new vwrays program.

Modified ies2rad so that it no longer produces glow sources for the sides
of objects, which caused unnatural dark bands near the ceilings of
direct/indirect installations. (Included in 3.1.4.)

Fixed bug in rpiece that caused the -pa option to fail. (Included in 3.1.2.)

Made ximage emphasize pixels in the selected region for the 'a' and 'h'
commands to adjust the exposure using histogram compression.
(Included in 3.1.4.)

Fixed bug in trad which caused it to fail when there were tabs in the input.
(Included in 3.1.3.)

Fixed bug in pcond that caused it to white-out borders of some fisheye views.
(Included in 3.1.3.)

Added facility to ra_tiff to read and write new LogLuv high dynamic-range
image formats.

Changed ambient value averaging in rendering programs (-aw option) to use
geometric mean rather than arithmetic mean, which tended to arrive at
too-high estimates and cause runaway calculations. (Included in 3.1.4.)

Added -g, -p, -m and -d options for gamma, paper size, margins and dpi
to the ra_ps program. This allows for much better control over output
to PostScript printers.

Fixed compiles for AIX -- select() incompatibility and macro conflicts.
(Included in 3.1.6.)

Increased table sizes to allow up to 4 million primitives when -DBIGMEM
is defined, provided there's enough virtual memory to hold them!

Fixed error in viewloc() for computing view locations for cylindrical views.

Wrote rholo, rhcopy, rhpict, and rhoptimize programs for holodeck
creation, display, and manipulation. This is a much more powerful way
to view a model than rview, though it lacks many of the utility commands.

Added the ability to separate concatanated animation frames using ra_rgbe.
This output facility of rpict was previously useless because nothing could
get anything past the first frame.

Wrote compamb program to compute a good ambient value for a rad input file.
Using this script is preferable to setting the -aw option of rpict, which
seems to result in splotchy artifacts in many situations.

Changed rad so it doesn't use the -aw option, which was causing some rather
annoying artifacts. (Added as patch to 3.1.8.)

Modified ranimate to change directories before running transfer or archive

Added -pm option to rpict to perform jittered motion blurring.

Created phisto script and added -I option to pcond for computing
multiple, identical exposures.

Fixed time zone specifications in gensky. (Added as patch to 3.1.9.)

Fixed bug in mixture functions that caused erroneous modifier loops.
(Added as patch to 3.1.10.)

Wrote glrad program for interactive display of Radiance scenes using OpenGL.
Modified objview program to use rad and glrad for rendering.

Changed the way ray weights are computed for participating media (including
dielectrics) so they more accurately reflect a ray's contribution, avoiding
some artifacts with unsealed dielectric objects and the ambient calculation.

Fixed problem with dielectric materials with textures where rays that should
have penetrated or reflected do the opposite.

Created ra_hexbit program to generate bitmap files for use with hexbit4x1.fnt.

****************** COMPATIBILITY CHANGE ***********************
Altered mixtures to take the most recent modifier definition
rather than the last one in the entire description. Made the
same change for illum's and mirror's. Also, fixed a bug in
the antimatter type where it didn't always get the correct
material for shading.

Wrote normtiff program to quickly tone-map and convert Radiance pictures
and SGILOG-encoded TIFF's to flat RGB TIFF output.

Added -r option to protate for CCW rotations.

Added ability to load values from read-only ambient file in rpict,
rtrace and rview. This may be useful when starting with the same
values on many processors, where NFS lock contention would slow
things down if they also wrote values back to the file.

Wrote rhinfo program for printing out holodeck section information.

Modified rad "scene" variable to allow in-line command specifications.

Added added -s and -b options to ra_ppm for changing output scale and
forcing greyscale output.

Now allow negative distances for the fore clipping plane in rpict.
This may be useful for rendering holographic stereograms.

Added -f option to xform to read arguments from files. This can save
a lot of scene loading time by reducing multiple xform invocations.

Added support for 15-bit TrueColor visuals in ximage.

Added (undocumented) -P option to macbethcal for picking chart corners
directly using ximage.

Added -r option to rholo for opening holodeck files read-only.

Added correction factor for solid angle change in dielectrics as
noted in Eric Veach's thesis.

Added von Kries white balance transform for color conversion using
CMCCAT2000 matrix.

Added CAPDATE field to rendering headers to record render date.

Added mixpict primitive for using pictures to generate mixtures.

Fixed bug in Type B photometry angle calculation in discovered
by Erich Phillips.

Version 3.1 (Released 7/24/97)

Changed gensky so it will accept hour specifications as HH:MM, with
designations for standard North American and European time zones.

Increased buffer size for in-line commands from 512 to 1024.

Added T(n), S(n), WE and pa(n) functions and constants to pcomb.

Created histo utility to compute 1-dimensional histograms from data files.

Created pacuity, pveil and psquish scripts (later combined in "pcond"):

o The pacuity program takes a Radiance picture and defocuses it
in places where the human eye loses resolution. Unless the
scene contains very low luminances (below .1 cd/m^2 or so),
this will not have an appreciable effect. The output can then
be adjusted according to the Ferwerda, Pattanaik and Shirley
tone mapping function using pcomb with the file
src/cal/cal/ (See the header comments therein.)

o The pveil program finds sources of glare in an image and adds
a corresponding amount of background luminance surrounding each
glare source according to the adaptation response of the human
eye. This has the effect of reducing contrast around glare

o The psquish program is probably the most useful of the three,
and must be applied after the other two if the others are
used. With the -a option, psquish uses the human visual
response to compress the dynamic range of an image to fit within
the limited dynamic range of a display (assumed to go from 1 to
100 cd/m^2), and also reduces color visibility in pictures with
low light levels (below 1 cd/m^2). Without the -a option,
psquish simply does the best it can to fit a picture's dynamic
range into what can be readily displayed, without regard to
human visual response. This has the effect of making problem
scenes viewable, such as indoor scenes with windows looking out
to bright exteriors.

Created pcond program, which combines pacuity, pveil and psquish in a
more efficient, robust package. (See man page for details.)

Renamed Perlin noise function partial functions, noise3a(), noise3b()
and noise3c() to noise3x(), noise3y() and noise3z(). Added backward
compatibility defines to so nothing should be broken.

Fixed double-counting bug in calculation of specular transmission of
light sources for trans type. This might have caused unrealistically
high estimates for illumination beneath trans surfaces with non-zero
roughnesses when the interreflection calculation was used (-ab 1).

Added routines for reading and writing separate RGB files in pvalue.
Also added -pP (where P is one of 'R', 'G' or 'B' upper or lower case)
and -s option to skip specified number of bytes on header. Finally,
added a -n option for non-interleaved RGB input and output.

Fixed obscure bug in rcalc that caused it to return "Bad call to
argument!" for certain combinations of function and output channel

Added "-e auto" and "-e human" options to ximage(1) and corresponding
'a' and 'h' commands to perform dynamic range compression similar to

Version 3.0 (Released 6/19/96)

Added comments to data and font files.

Changed behavior of mirror to allow void alternate material.

Added cylindrical view type for Quicktime VR authoring and other
interesting applications.

Increased default rtrace parameters for more accurate calculations when
options are not specified.

Added RAWFILE and ZFILE variables to rad for saving raw picture file and
Z (distance) information from rpict.

Ported trad for newer (4.0) version of Tk (wish). Thanks to Bob Lipman
of NIST for helping me track down the changes.

Added -B option to pinterp to blur multiple views into a single image,
useful for motion blur and depth of field simulation.

Created pdfblur script and modified vwright to automate depth-of-field
simulation with pinterp.

Added -c option for color PostScript output from ra_ps, and made both
this program and psmeta produce EPS-compatible files.

Created macbethcal program for calibrating color image scanners and
film recorders or printers using the Macbeth ColorChecker chart.

Created ra_xyze program for converting to and from new Radiance CIE XYZE
picture type and calibrating monitor colors. Modified Radiance picture
filters (pcompos, pflip, pcomb, pinterp, protate and pfilt) to handle
new picture type without complaint.

Added automatic ambient value computation to improve accuracy of results
no matter what -av value is given. (Only works for -ab > 0.) This was
a fairly obvious optomization I should have thought of ages ago.
(Default is old behavior -- -aw option puts in new code.)

Modified interreflection calculation to take textures (surface normal
perturbations) into account in indirect illumination. This should
improve the accuracy and appearance of textured surfaces in shadowed

Added -T option to rpiece to limit execution time.

Fixed bug in mixtext type introduced in last release -- caused improper
calculation of mixed modifiers.

Added basic options and functionality for participating media. New material
type "mist" and rendering options -me, -ma, -mg and -ms. This should permit
the modeling of visible light beams, uniform smoke, fog, and some types
of clouds.

Added -o option to ximage to control output of 't' command (and
middle mouse button). This adds the ability to produce pixel
position, radiance value and luminance. The default action is
the same as before.

Created pmblur script to generate views for camera motion blur in
walk-through animations.

Added "inpic" variable to for determining when the edge
of a non-repeating image has been reached. Use with mixfunc primitive.

Created ranimate program to control walk-through and dynamic animations
on multiple hosts.

Fixed problem with antimatter type referring to final definition of
material names. Now, it uses the most recent ones.

Added an MC macro for true Monte Carlo sampling rather than the default
Quasi Monte Carlo. To enable, add -DMC to the OPT= line in rmake.

Fixed bug in pfilt -m option that caused floating point exceptions on

Wrote xyzimage script for X11 display of XYZE and corrected RGBE pictures.
Takes the same options as ximage with an added -p option, and checks
the environment variable DISPLAY_PRIMARIES for setting of monitor
primaries. (See the ra_xyze manual page for further explanation.)

Made colorpict's use much less memory by storing data in RGBE format
rather than floating point (takes 1/3 the space). This should help with
large image patterns.

At the insistence of Henrik Wann Jensen, changed the specular sampling
code so that very rough specular surfaces will sample more truly,
eliminating some strange mirror appearances evident using the old

Added drawing of small and skinny light sources so rpict won't miss
these from inadequate image sampling. The method used may not work
perfectly for warped views (-vta, -vth and -vtc) having long,
cylindrical light sources. (Rob Shakespeare, take note!)

Added corner rounding to genprism command (-r option).

Changed mixtures so that mixing material with void is allowed, allowing
for opacity maps. Also altered general behavior so that surfaces
without materials in their modifier list are invisible, not only
surfaces with void modifiers.

****************** COMPATIBILITY CHANGE ***********************
The behavior of xform has been changed to make object library
organization and usage simpler.
1) The RAYPATH directories are searched for matching file names.
2) Filenames beginning with '.', '/' or '~' do not result in searches.
3) Xform performs a chdir to the found file's directory, obviating
the need for peculiar inclusion names in subdirectories.
4) The array option (-a) now works when xform reads from stdin.
5) The expand option (-e) is now the default -- -c gets
back old behavior.

Version 2.4 (Released 4/20/94)

Philip Thompson of MIT added use of a radiance.gamma resource to ximage
and we added it to the x11 driver of rview as well. This is an alternative
to setting the GAMMA environment variable for X11 servers.

Added MLIB variable to Rmakefile's for defining alternate math libraries.
I discovered that the default version of sqrt() under IRIX is a whole
lot slower than what's in the libfastm.a library, and not much better.
This can make a significant difference to the renderers, since sqrt()
is relied on quite a bit, and it's assumed to be fast.

Added =SS option to pcompos to allow anchor points for image positions
other than the lower left corner.

Wrote raddepend script for finding dependencies in scene files.

Fixed a bug in mkillum that caused it to incorrectly sample ring sources.

Finally allowed mixtures to work with materials, thanks to the encouragement
and advice of Peter Apian-Bennewitz.

Wrote a triangular mesh converter, called tmesh2rad. I defined my own
format, since I wasn't too familiar with anyone else's format and I
wanted to support some additional possibilities (most notably patterns).

Added initial "#?RADIANCE" line to headers to simplify Radiance file
identification by programs used to magic numbers.

Created a translator for Wavefront .obj files, called obj2rad. It uses
the same type of mapping rules as arch2rad.

Version 2.5 (Released 6/26/95)

Wrote translators to and from the new MGF (Materials and Geometry
Format) specification.

Changed color conversion routines to make light source colors (from consistent with uniform white light standard.

Fixed a bug that caused very small local sources not to be sampled
at all!

Added the ability for rview to read commands from its standard input
under X11.

****************** COMPATIBILITY CHANGE ***********************
Changed GAMMA environment variable to DISPLAY_GAMMA, to bring it in
line with the xli program, so users don't have to give two variables
for the same value!

Added -t (touch) option to rad, to make it easier to deal with minor
changes to input files.

Created graphical user interface to rad, called trad. Based on Tcl/Tk,
this should finally get people to start using this program!

Added -vo and -va (view fore and view aft) clipping plane options to
Radiance view parameters.

Added -bv option for (opaque) back face visibility control.

Added -q, -a and -e options to pinterp, and made it faster. (These
should be big improvements.)

Created tabfunc program for converting data tables to functional

Wrote mgf2meta program to convert MGF data to line drawing.

Updated ies2rad program to interpret MGF geometry in IESNA-LM-63-1995

Added sorting of ambient values according to access times to improve
reference locality for better virtual memory performance.

Added source solid angle argument to BRTD functions for averaging

Wrote genclock program to create an analog clock.

Fixed a bug for bitmaps using hexbit4x1.fnt with brighttext, which
caused thin lines to appear.

Version 2.3 (Released 11/16/93)

No changes from the above, but the official release was designated 2.3
to avoid confusion with previous beta releases of 2.2.

Version 2.2 (No official release)

Made more fixes in rview and ximage for different display hardware.
Philip Thompson and Peter Apian helped with suggestions and testing.

Fixed bug in -e option of xform that kept it from fully expanding
some scene files.

Added proportional text spacing (-s option for psign, new argument
for text primitives). Added antialiasing (3x3 super-sampling) to psign.

Added code in display drivers to read environment variable called
"GAMMA" to set gamma correction for different monitors. See notes in
this directory on gamma_corr.

Added CC defines to all the Rmakefiles so that other C compilers may be
used consistently.

Added -x and -y options to psign to control output dimensions directly.

Decreased value of FTINY with SMLFLT option once again in an attempt to
further reduce errors.

Reinstated rtrace's capability to produce 32-bit_rle_rgbe directly.

Added -S and -o options to rpict for more flexible production of
multiple images and slave operation. Rpict will also accept a recover
file name the same as the output file for more convenient recovery.

Added ra_ps program to translate Radiance picture into PostScript file.

Made ambient files machine-independent so they can be conveniently moved
and reused on any system. Also added coordinated reads and writes so
that multiple processes may use the same ambient file at the same time.
Along with the -S option of rpict, this should greatly facilitate parallel
rendering. The new ambient file format also contains a header that
can be read by getinfo. Lookamb now has a -h option.

Created rpiece program for parallel rendering of a single image on
multiple processors and workstations.

Eliminated star artifacts in mkillum distribution patterns by improving
data interpolation method. Improved ability of mkillum to correctly
sample non-axis-aligned polygons.

Added -s and -o options to pcompos for slightly more convenient use
of the -a option. Also eliminated incompatibility between -a and -y

Fixed bug in spotlight sources that caused incorrect boundaries to be
cast by mirrors.

Fixed rounding of scanlines in ra_pr24 to 16-bit boundaries.

Added @file and $envar expansion capabilities to rtrace, rpict and
rview. This is primarily to overcome the 128-byte command limit of

Added -r option to gensky for the direct specification of solar

Added -oN option to rtrace for reporting unperturbed surface normals,
and changed -on to report perturbed surface normals (used to be

Changed -di switch of rtrace, rpict and rview to -dv and changed
sense. Thus, instead of having a boolean variable called "source
invisibility" that is normally off, there is now a boolean variable
called "source visibility" that is normally on. More logical, and
also allows for the addition of -di and -de options for direct
include and exclude in the future.

Fixed bug in image.c associated with -DSMLFLT that caused angular
fisheye views to repeat the center pixel in the middle of an image.

Modified colordata and colorpict to take functions of a single variable
instead of always requiring functions of three variables (red, green, blue).

Modified objview script to work in original object coordinates.

Added -P and -PP options to rpict and rtrace for persistent and parallel
processing, respectively. The -P option is most useful with the -fr
option of pinterp, since rtrace doesn't have to be restarted for every
frame in a long animation sequence. The -PP option is most useful when
running rpiece on a multiprocessing platform, to get acceptable memory
sharing without the hassle of threaded code.

Changed signal handling in rpict so CONT is now used to elicit
asynchronous progress reports. ALRM now causes rpict to die

Created executive program called "rad" to run oconv, rview, rpict and
pfilt automatically. This should greatly simplify use of Radiance and
reduce the problems associated with poorly chosen parameter values.

Added slave driver to rview to make it easier to run from other
graphics applications. (Thanks to Chris Nicholas of Sun for the

Fixed error in ies2rad.c and that caused incorrect
interpretation of asymmetric Type C (A) fixture photometry. Note the
new definition of src_phi in This change may affect
manually entered photometry.

Added '@' command to ximage to adjust exposure based on Blackwell's
model of human contrast sensitivity.

Added functions to pcomb to get the ray origin and direction from the
input picture view specifications.

Removed Fresnel approximation to specular reflection from Radiance materials,
since the direct component was not being computed correctly. This
may have a slight affect on the appearance of surfaces, but it can't be

Changed the definition of the BRTDfunc type so as to be more general and to
allow for different reflection properties depending on what side of the
surface the ray is incident. Any scene and function files using the
old definition of BRTDfunc must be updated. Implemented the approximation
used in Window 4 to reflection from coated glazings in lib/

Added -ti, -te, -tI and -tE options to rtrace for including or
excluding surfaces from those reported by the trace output specifier.

Fixed long-standing bug in pfilt gaussian filter option, which caused
the image to be excessively defocused.

Added -m option to pfilt for image sample smoothing. This helps get rid
of some of the "speckle" associated with specular sampling.

Made -ovt* compatible with -I option of rtrace.

Changed ximage to work with multiple pictures. It now opens one window
for each picture file.

Fixed error reporting in rpict for most machines. (Many thanks to Peter
Apian-Bennewitz for his help and suggestions.)

Added intermediate sky to gensky and changed its options slightly.
The new gensky uses a new version of, so any old
gensky output in files must be recomputed with the new gensky before
it will work. (A "skybright: undefined" error should clue you in.)

Version 2.1 (Released 5/20/92)

Changed function specifications to allow the use of expressions as
well as variables in scene files. Use of this feature may result
in some loss of backwards compatibility as older software does not
support it.

Added makeall option for NeXT machine and changed code to suit.

Added off-specular sampling and anisotropic materials plastic2,
metal2 and trans2. The old options -sp, -sj, -st and -p have
been renamed to -ps, -pj, -pt and -pa, respectively. New options
-sj and -st have been introduced.

Improved ray intersection calculations using -DSMLFLT option by
increasing epsilon used in tests. This eliminates most of the
errors that occured when this compile option was used in version 2.0.

Added capability to gensurf to read height or point data from a
file. This makes it more convenient to make (optionally smoothed)
landscapes from recorded measurements and the like.

Corrected irradiance gradient calculation. New formula predicts
gradient better and thus reduces artifacts in indirect calculation.

Modified replmarks to accept multiple markers.

Added -aI and -aE options to read ambient include/exclude materials
from a file.

Reduced effect of light leaks during interreflection calculation.

Added -ang option to gensky for giving solar angles explicitly.

Added ability of "view" command within rview to accept view options.

Fixed a long-standing bug in gensky that caused it to report
inaccurate values for the ground ambient level. Since the dayfact
script uses this value in calculating its results, version 2.0 will
be in error (by as much as 30 or 40%).

Fixed a bug in the reflectance normalization for isotropic and
anisotropic Gaussian highlights that caused too much light to
be reflected near grazing angles. Much thanks to the folks at
Ohio State University (Steve Spencer and Kevin Simon) who
pointed this out to me!

Fixed bug in xshowtrace introduced in 2.0. It absolutely didn't work
after my most recent changes to image.c. (Sorry about that!)

Finally fixed shortcoming of view reading routines so they can get
the views from pictures created with absolute program paths
(eg. /usr/local/bin/rpict). This affects programs like
xshowtrace and glare, as well as the recover option of rpict.

Fixed isotropic Gaussian distribution (highlights for types "metal"
and "plastic") to make them more accurate and bring them into line
with the new anisotropic Gaussian models ("metal2" and "plastic2").
This may affect the appearance of some hightlights.

Added -H and -R options to pvalue to control resolution strings
and color ordering.

Fixed byte ordering for 24-bit color displays in ximage.

Version 2.0 (Released 11/26/91)

Added -i option to renderers for computing irradiance rather than
radiance. Eliminated redundant -oI option from rtrace and added
-I option to replace old -oi. This hack ignores glass and similar
surfaces during the calculation.

Changed icon for x11image (renamed ximage) to miniature bitmap of

Fixed bug in xshowtrace that prevented it from working with twm.

Added memory recovery feature to rview so that when it refines
itself out of memory it doesn't quit but instead gives the user
a command line saying "out of memory:", which allows the output to
be written and so forth before quitting or restarting the image.

Added -g (gamma correction) option to pvalue.

Added the more general BRTDfunc for procedural definition of bidirectional
reflectance-transmittance distribution functions. Also added transfunc
and transdata types.

Changed trans types to modify the color of the transmitted specular

Fixed a bug in ra_t16 introduced in the last change which caused
problems for the (default) 16-bit output mode.

Improved Monte Carlo sampling for penumbras (-dj) and ambient
super-samples (-as) using stratified random number sequence introduced
by Christophe Schlick at '91 Eurographics workshop on rendering.

Wrote falsecolor program to transform images to false color with
value labels.

Modified pcomb to allow different output sizes and access to local
pixel neighborhood for specialty filtering applications.

Made cone and sphere routines more forgiving of negative radii,
switching between inverted types as necessary and giving warning
messages instead of bombing. Cones with equal radii are now
silently converted into cylinders. Hopefully, these changes will
make writing Radiance scene file translators a little bit easier.
Unfortunately, we still bomb for zero-sized cones and spheres.

Wrote a program called getbbox that just computes the bounding box
for a set of Radiance scene files. It is basically a modified version
of oconv that doesn't store objects in memory and doesn't care about
undefined modifiers.

Added -a and -l options to pcompos and made both pcompos and pcomb
read from commands as well as files.

Substantially improved the accuracy and appearance of the interreflection
calculation by computing gradients at the same time as primary values and
then using a first order interpolation scheme. This affects the information
stored in ambient files, so old files will have to be thrown away.

Added secondary light sources from planar mirror, prismatic and
holographic surfaces. This created the new options -dr (direct relays)
and -dp (direct presample density) to the renderers. The document
secsrc.note describes this feature in greater detail.

Put many of the routines into a common library.

Wrote a replacement for makedist, called mkillum, which generates
light distribtuions and illum descriptions for windows, skylights,
etc. in a much more natural and automatic fashion.

Fixed long-standing bug in text routines which caused slanted text
to slant the wrong way!

Added -e option to ra_bn, ra_pr, ra_pr24, ra_t8 and ra_t16 programs
for faster and more convenient image conversion w/o using pfilt.

Finally added contexts to calcomp routines so identical names in
different function files no longer conflict. Loading of function
files also works automatically without those nasty "key" variables.
New context marks (backquote characters) appear in some local variables
defined in some of the cal files. This is inconsistent with older
versions, and must be changed back to and underscore or some other legal
character if these files are used by 1.4 and earlier.

Wrote ra_tiff program, using Sam Leffler's libtiff package to read
and write 24-bit TIFF images.

Wrote ra_ppm program to convert to and from Poskanzer Pixmaps.

Changed run-length encoding of Radiance pictures to gain better
compression. Routines can still read old format, but new ra_rgbe
program must be used to write convert images to a more generic format
that can be read by release 1.4 and earlier.

Defined U and V parameters in for more convenient (and
sloppy) use of 2-dimensional textures and patterns on planar surfaces.

Beefed up lampcolor program to compute spectral radiance for diffuse
emitters. This was a previously a pain in the butt and a serious
source of error for scenes not modeled using IES data files.

Added version reporting to rpict, rtrace and rview. Use standalone
-version option.

Changed to quincunx initial sampling pattern in rpict. This should
reduce artifacts from adaptive image sampling at no added cost.

Added -rgb option to ra_pr24 to produce RT_FORMAT_RGB files.

Added -ds option to renderers to make source sampling more accurate
for large area sources. It is no longer necessary or recommended
to break large sources (such as windows) into smaller pieces with
gensurf unless their output distribution changes over their surface.
Also, cylinders can now be used as light sources, provided they are not
too short compared to their radius (causing them to be frequently missed).

Added -I option to xform to invert surfaces.

Added SMLFLT and BIGMEM defines to better control the sizes of data
structures during compilation. Made their setting relatively
straightforward in makeall and created a separate rmake program to
hold the options generated by makeall.

Made the programs more forgiving of machine differences on octrees.

Fixed incorrect conversion factor between radiance and luminance.
The correct luminous efficacy value is now defined in color.h as
WHTEFFICACY. It was 470 lumens/watt previously, now it has been
corrected to 179 lumens/watt. This affects the absolute values
in the output of programs like gensky and ies2rad. Thus, these
programs should be rerun to generate corrected files for this
version of Radiance. Also, the new versions of display programs
like ximage will give different values with the 'l' command on
an image generated with 1.4 and previous releases. The following
alias may be used to fix the radiance values in a picture generated
using previous versions of gensky and ies2rad:

alias pfixabs '( echo EXPOSURE=.381 ; cat \!:1 ) > \!:1.$$ ; mv \!:1.$$ \!:1'

Improved accuracy of glass material type and added option for
user-supplied index of refraction.

Added sgi to rt/Makefile and px/Makefile SPECIAL category for compiling
Isaac Kwo's NeWS driver for rview and the glimage program by Jim Winget.
Also fixed various compile problems for the SGI.

Improved handling of alternate scanline orientations. The programs
pflip and protate (used to be prot) now affect the scanline ordering
of the file without messing up the view parameters for programs like
pinterp and findglare.

Version 1.4 (Released early 1991?)

Fixed bug in IES translator that resulted in the incorrect
interpretation of type B photometric data. (1.3.1)

Added types for using BRDF data: plasfunc, metfunc, plasdata and metdata.

Added interpretation of source color to ies2rad and color corrective
filtering to pfilt. Reference file used by both is "" in
library directory.

Added picture flipping program, pflip, and pattern preprocessing script,
normpat.csh, to the px directory.

Fixed bug in ra_pr24 that caused the reversal of red and blue values.
New version accepts both RT_STANDARD and RT_FORMAT_RGB files but
produces only RT_STANDARD rasterfiles as output.

Added -m option to xform to change modifiers for surfaces.

Wrote replmarks program to replace markers in a Radiance scene file
for light sources or other objects.

Added global compilation script, makeall.

Fixed calculation of luminance in display programs and gensky to use
white light assumption.

Added options and features to pcomb.

Added FORMAT= line to all Radiance file headers for improved error
checking and clarity.

Added icon bitmaps for rview and x11image under X11 and fixed a bug
that caused x11image to ignore keyboard input.

Added constant definitions to cal files using ':' instead of '='.
This makes for faster calculations since many more constant
expressions can be reduced at "compile" time.

Created glare calculation programs in util directory. Findglare locates
glare sources, xglaresrc circles sources on a displayed image, and
glarendx computes various glare indices.

Version 1.3 (Released 10/22/90)

Added conversion utility for IES (Illuminating Engineering Society) standard
format luminaire data. The translator, called ies2rad, takes any number
of luminaire data files and creates the necessary Radiance geometric
descriptions and data files and puts them in the specified library location.
A new data format was added to accommodate irregularly-spaced data points.

Added rview driver for NeWS for Sun and Silicon Graphics workstations.
This work was done by Isaac Kwo.

Fixed oconv for scenes with many overlapping instances (runs faster now).

Added consitency checks intended to detect stale octrees without restricting
changes to surface modifiers. (But you still can't change total number of
objects). Stale octrees caused some of the strangest behavior...

Finally broke down and wrote my own malloc(3) routines. There is a
CalTech module floating around Berkeley that caused a lot of trouble
for bmalloc(), resulting in about twice the needed memory use.

Added translator for Architrion. Arch2rad uses mapping rules to assign
materials to surfaces from input file. This is a general method (dreamed
up by Charles Ehrlich) that allows users to assign materials based on
whatever information is available from the CAD file. See the accompanying
description file on translators in the ray/doc/notes directory.

Added fisheye view types to rpict and rview, useful for looking at
entire scenes and for LEEP virtual reality wide field stereo viewer.

Wrote xshowtrace, a fun program for watching rays as they are being
traced on an X11 display.

Write ra_pr24 for converting between 24-bit Sun rasterfiles and
Radiance pictures. Perhaps this should be incorporated in ra_pr, as
ra_t8 and ra_t16 should be one program, but the algorithms and memory
requirements are totally different for colormapped images.

Added routines for performing 24-bit gamma correction in integer domain,
making programs like ra_pr24 and ra_t16 run faster.

Version 1.2 (Released 3/9/90)

Added a -p option to rpict and pfilt to set the pixel aspect ratio for
output. Instead of giving the absolute x and y resolutions, the user
now gives rpict and pfilt the maximum desired resolution for x and y
and the pixel aspect ratio is used along with the given view to
calculate appropriate values within this boundary. This makes for
much more natural view specifications. For example, for a 512x400
device with a pixel aspect ratio of 1.0, the pfilt command:

pfilt -x 512 -y 400 -p 1

will always produce the appropriate output, regardless of the aspect
ratio of the input picture. If necessary, the x or y output resolution
will be reduced to accommodate the device's resolution. A square image
would occupy a region of 400x400 pixels.

View shift and lift options were added to the list of standard view
parameters, for specifying views for panoramas and holograms.

Rview no longer takes options for x and y resolution, but instead
gets them from the device driver along with the pixel ratio. This
makes it much easier to change the view aspect ratio (with the vh
and vv parameters).

A -z option was added to rpict to write out the distances for each
pixel in an image. This may be useful for z-buffer operations, and
is used by the new program pinterp, described below.

A program called pinterp was added to the burgeoning list of
picture filters and converters. This program is designed primarily
to interpolate animated frames for walk-throughs of static scenes,
but it has a number of other useful functions besides. It takes as
its input one or more rendered pictures (with their corresponding z
value files) and desired viewpoint (hopefully not too far afield from
the given images). Pinterp then takes the input frames and moves the
pixels to their new computed location. Filling operations make sure
that the final image does not have large unpainted regions.

Added smoothing option to gensurf, using bilinear Phong surface normal
interpolation. Not perfect, but it's better than nothing and permits
the use of fewer polygons to represent smoothly curved surfaces.

by admin – last modified Oct 09, 2018 12:38 PM