Extensive changes to enable spectral rendering, which defaults to "off" to maintain backwards-compatibility with previous versions, with the exception of the ambient file format, which is changed. The MAXCSAMP macro, which defaults to 24, sets the maximum number of spectral samples. The actual number of samples is set by the "-cs" option, which defaults to 3 for rpict, rtrace, and rcontrib. The latter two programs support straight spectral output, but rpict is initially restricted to tristimulus output pictures. New pattern primitives "spectrum", "specfile", and "specfunc" have been added as a means to specify spectral reflectance, emittance, etc. to materials that still have only 3 color channels. Those RGB channels will still affect the spectrum if used. Unfortunately photon-mapping is currently broken when spectral sampling is enabled, but we will fix this as soon as possible. Calculation overhead appears to be approximately 10-15% for RGB renderings compared to version 5.4a.
Added spectral rendering to rvu as well, and made -cs and -cw options standard across the rendering library. I also brought mkillum, ranimove, rsensor, and mksource into the fold. These tools were broken in the initial release. (Hopefully, they are working now, but none have been tested as yet.) There was also an indexing bug in the spectral->RGB conversions that made reds into blues and vice versa, which has been fixed.
Added i/o for spectral pictures to rmtxop, the first program that can ingest them. (Only rtrace, rcontrib, and rfluxmtx can render them.) New symbolic rmtxop -c options, such as RGB, XYZ, S (for scotopic) and M (for melanopic) make color conversions simpler. Alternatively, a reference matrix or picture may be given and the color space of that file will be used. The -C option takes either a symbolic color space or reference file and is "sticky," so it applies to all subsequent input files that do not have their own -c right ahead of them.
Added spectral picture support to rcrop and radcompare.
Added new utility, rcomb, which is something like a combination of rmtxop and pcomb, it works with all the inputs and outputs that rmtxop handles, but allows for general expressions like those in pcomb for putting matrices together, working on an element at a time. (No resizing of matrices or accessing neighboring elements, as permitted in pcomb.) It saves memory over rmtxop by operating on a row at a time, so can handle input and output matrices with any number of rows. It does provide for a single matrix-multiplication operation at the end, which only requires memory for that final matrix.
Added support for filtering hyperspectral images to pfilt.
Added support for 1- and 3-component float matrix i/o to pcomb to allow for better interoperability.
Added support for -co+ option to rtpict, so it can directly produce hyperspectral images.
Added new "specdata" and "specpict" primitives to support interpolated spectral data files and hyperspectral images as patterns.
Added support for multispectal sampling in rsensor, which will put out as many color channels as specified in any -cs option (default is 3 for RGB).
Added ability of mgf2rad to convert spectral data at least for light, glow, plastic, and metal primitive types. Need to use new '-s' option to get new output. Added support for new WGMDfunc type as well, which is considerably more flexible at supporting different spectral components.
Added handling of spectral pictures (HSR) to rcode2bmp script.
Minor change to rcollate to allow explicit byte records to be any specified length without checks against header input.
Added new hemisphere type to rfluxmtx, "h=cie" for CIE sky scanner positions. These are 145 patches with identical row counts to Tregenza, but starting from a different azimuth and reversing row directions at adjacent altitudes.
Added optimization for long argument lists and arrays in the calcomp routines used for rendering and in rcalc, etc.
Added error estimate spreading to ambient super-sampling algorithm (-as) to improve performance especially in scenes with sharp cut-offs.
Added -i option to gendaymtx to match -i option of gendaylit. Thanks to Yongqing for initial implementation.
Changed rcrop so negative #rows or #cols counts back from end.
Added rcomb -n option for multi-processing of very large matrices.
Made it so rsplit and rlam can handle any number of input files up to active open file descriptor limit.
Taoning Wang added genssky tool for generating spectral sky descriptions.
Taoning added gensdaymtx utility based on gendaymtx, and added epw2wea -a option to include required information.
Fixed bug introduced in Auguest 2022 (5.4 release) in distant light source sampling, which caused aiming failures. (Thanks to Mike DiPompeo of LightStanza for reporting the issue.)
Added rxpict rendering tool based on C++ RpictSimulManager class. Multi-processing and spectral output are supported.
Wrote rxpiece tool that will render pictures using tiling and can handle different output formats and hyperspectral pictures. Only runs on a single machine, however -- no NFS locking on shared volumes. Mainly a demonstration tool for RpictSimulManager C++ class, but later added to standard Rmakefile targets.
Fixed a bug in BSDF sampling of sources pointed out by David Geisler-Moroder, which tended to overestimate specular contributions for some BSDFs.
Added crude ability to read and convert spectra to RGB in ximage, ra_bmp, ra_ps, and ra_rgbe programs. Also updated fast tone-mapping library to handle spectral HSR inputs at the same time. HSR input handling was added in a similar fashion to pcond and pvalue for convenience.
Added handling of hyperspectral images to normtiff, a handy program for quickly tone-mapping Radiance RGBE, XYZE, and now hyperspectral pictures, as well as IEEE float or LogLuv TIFFs.
Added handling of hyperspectral pictures to pextrem, though results are still reported in RGB.
Added accurate conversion of hyperspectral pictures to ra_xyze.
Added hyperspectral picture conversion to ra_tiff, with accurate color when targeting 16-bit/comp., LogLuv, and float output, and the approximate method for 24-bit RGB.
Taoning added genssky -L option to specify global and diffuse illuminance values for output calibration.
Created C++ class for rcontrib and example tool rxcontrib, which is an optional compile in the src/rt directory. The output model is more general in some respects and the operations more efficient, but standard output is not supported, nor is ASCII results data.
Added strnstr.c compatibility module in ray/src/common, since it isn't present on Linux derivatives.
Added WGMDfunc material type with programmable roughness and separate modifier paths for the different components.
Added gensurf -i option at the request of Peter Apian-Bennewitz to reverse surface normals, mostly for data input, when it is a bit more difficult to adjust.
Added rad -N option to rholo call for multiprocessing when mkillum and/or mkpmap are involved in octree prep.
Added ability of gendaymtx to read EPW as well as WEA files. When EPW input is provided, the 3-hour average dew point is used to compute a more accurate precipitable water content value. It currently does not use these data directly from the EPW input, relying instead on a dew-point-to-W calculation. This follows the request and recommendations of David G-M.
Removed limitation in rfluxmtx, which was disallowing distant and local receivers. Found this to be a perfectly valid approach for some annual daylighting scenarios.
Wrote new pvsum tool to handle cases dctimestep can't, like spectral input pictures. It also adds a -N option for multi- processing on Unix machines, which utilizes memory-mapped inputs for efficient i/o sharing.
Made it so genBSDF can use spectral rendering for a more accurate photometric result.
Changed default matrix representation to float rather than double, which uses less RAM and supports faster operations in general. Build with compiler flag: -DDTnativeDTrmx_native=DTdouble to get back higher precision representation.
Taoning Wang updated genssky and gensdaymtx to provide illuminance calibration and accept EPW files directly as input.
Added -e expr and -f file.cal options to all rendering tools, not just rcontrib/rxcontrib. Feature request from Peter A-B.
Fixed slight bias in indirect calculation caused by ambient collision detection, pointed out by Jon Sargent. New code keeps track of rejected samples and sells them back to later calls to get something closer to a true Poisson sampling method.
Altered rvu "origin" command to take shift amounts forward, right, and up rather than taking an explicit origin, which can be done easily enough with the "view" command. Peter A-B requested (sort of).
Added genglaze tool created by Taoning Wang to generate spectral glazing materials based on CGDB data and models.
Fixed bug that caused inf and nan errors with -cw setting where longer wavelength was substantially less than limits of specified spectra.
Created bsdfpeaks utility to identify and report full-width, half-maximum sizes of peaks in SIR and XML inputs.
Changed default super-sampling in bsdf2ttree from 256 to 64, since there doesn't seem to be much benefit to the higher sampling rate for most BSDFs.
Fixed problem with "mirror" primitive, which was not permitting indirect rays to transmit through alternate material type. Thanks to Jon Sargent for finding problem and help resolving it.
Added experimental C++ based rxpiece tool to default installation in makeall/Rmakefile.
Added rcomb -mt option to transpose concatenation matrix.
Added rcollate -c option to force operation to continue even if it seems unnecessary. Made tool more robust.
Added -t option to rcontrib (and rfluxmtx) to report progress after the given number of seconds.
Added "test" target to makeall to run unit tests.
Modified bsdf2ttree to allow different parameters per input SIR file.
Fixed issues with very large matrix files (> 2GB) in dctimestep, rmtxop, and rcollate.
Added -rf and -rb options to rmtxop to load front or back reflectance matrix data from XML file rather than transmission. (Lars Grobe suggested.)
Improved behavior for coincident surfaces with different materials. Rather than returning one surface or the other based on floating-point vagaries, opaque materials are now preferred over transparent ones. If the materials are both transparent or both opaque, then whichever surface appeared later in the scene description will be selected. This came of a request for consistent behavior with legal CAD output from Peter Apian-Bennewitz.
Added explicit tests for on-edge intersections with polygons. This should eliminate stray rays and tiny light leaks that often appear even in well-constructed geometry.
Added "-s up" option to pabopto2bsdf to allow for 180 degree symmetry, meaning that data repeats after 180 degree rotation (as distinguished from "-s bilateral" whose data is mirrored about a vertical plane). Thanks to Helen Rose Wilson for the suggestion and informing me that such a thing exists.
Removed upper limit on number of modifiers in rcontrib.
Put cap on maximum ambient gradient to avoid over-extrapolation of poorly computed irradiance cache values.
Added robjutil +T option to triangulate all faces in .OBJ description.
Altered BSDF library to have both front and back diffuse transmittance values, which can be different. This was necessary to avoid issues caused by measurement and modeling discrepancies.
Added pabopto2bsdf -g option to cull near-grazing scattering to avoid issues with noise and negative values.
Increased default dynamic range from 32 to 100 in pcond and normtiff.
Added -o and -n options to genbox to create .OBJ output and segment edges and corners for transparent materials. Also added -s option to control smoothing for .OBJ and Radiance with segmented rounding.
Made it so robjutil with the +r option for Radiance output now produces normal smoothing unless normals are removed with -n.
Added exposure preservation to pcompos when possible (i.e., when there is only one input or inputs agree on exposure).
Added -DSHARP_RGB compile-time option to use sharp RGB color space rather than historic default. This can make for more accurate color calculations, but requires that materials be recalibrated. The PRIMARIES= line is also produced on output from rpict or rvu with the correct set of primaries based on how the system was compiled.
Added automatic flushing to the output of total, except when the -r (running subtotals) option is used.
Improved behavior of little-used -aw option, so that it avoids sea-level rise caused by adding its own estimate back into the ambient level remainder. It ended up being simple enough to derate the final average by the factor corresponding to average surface absorpition, thus removing the average from the final bounce estimate.
Introduced ies2rad upgrades by Randolph Fritz. Randolph says it fixes the following problems:
1. Generates correct Radiance geometry for spheres in 1995, 2002, and 2019 IES files.
2. Generates correct Radiance geometry for vertical cylinders that are taller than they are wide.
3. Ignores the file source ("File Generation Type") field in the 2019 version of the file, which would otherwise be incorrectly used as an output multiplier.
It also offers the following enhancements:
1. Shape information is included in the .rad file comments.
2. 1995, 2002, and 2019-version luminous opening geometry is accounted for.
3. The 2002 and 2019 IES file versions are recognized and processed appropriately.
4. I have made an attempt to do something intelligent with less common "luminous opening" shapes in the 1995, 2002, and 2019 versions of the standard, though I have not implemented any support for new geometry; approximations are substituted and warning messages issued. Unfortunately, this code is not tested, since I don't have any IES files that use these shapes.
Added support for depth-of-field blurring in vwrays using -pd option. Also, made -c count work with vwrays -i, producing multiple samples per indicated pixel position. At the same time, support for the -pd option was added to rtpict, which calls on vwrays for its samples.
Fixed issue with BSDFs that didn't obey reciprocity, where direct sampling wasn't following exactly with indirect sampling. This was discovered and reported by Jon Sargent.
Created checkBSDF tool to test XML BSDF reciprocity and perform similar sanity checks.
Added -O option to pvalue and pextrem to report watts/sr/m^2 even if picture is XYZE.
Made subtle changes to header i/o routines to preserve alignment in binary file formats to enable memory-mapping. Implemented memory-mapped matrix loading in rmtxop for binary double files.
Removed ambient value sorting, which was written when ambient caches could overwhelm available memory. This is rarely the case these days, and the added code complexity and updating of cache values with LRU counts dirties pages that would otherwise remain clean, so it was often a loss even when VM was an issue.
Added iso2klems script to compute a Klems BSDF based on specular and diffuse measurements as a function of incident angle.
Fixed issue with over-counting diffuse component during aBSDF peak extraction.
Added dctimestep -x and -y options to specify image dimensions for multiple outputs corresponding to result vectors.
Added -P option to rcalc to pass formatted input when cond is <= 0.
Created rcrop utility for cropping matrices and pictures more conveniently, correcting view information. Expect it to be handy for extracting rows and columns from matrices, mostly.
Changed pcomb so -o option elides original exposure values from indented source headers.
Added getinfo -r option, which is similar to -a except it will replace indicated lines with new ones.
Slight change to vwrays -d option to not spit out "-ld-", and to produce "-ld+" without requiring input picture as argument.
Added automatic overture calculation to rtpict with -n > 1 if ambient cache is on and file is named. If straight image output is requested, we randomize all samples and avoid cache collisions.
Added cnt -s option to shuffle output.
Fixed issue with divide-by-zero errors in the ambient super-sampling routine discovered by Jon Sargent of Solemma. This affected regions that had zero radiance, such as black backgrounds or unlit areas with -av 0 0 0, when super-sampling was effectively disabled, causing some loss in accuracy of the results.
Updated Klems Half- and Quarter-bases to match angles currently used in WINDOW.
Eliminated most aiming failures for triangular light sources, at the expense of conservative sampling near the centroid. Thanks to David Geisler-Moroder for his help on this.
Increased maximum set size to 8191 to avoid set overflow errors.
Added source obstruction test to statistics being kept on which sources were visible in adaptive shadow testing code. Previous behavior was likely over-estimating source contributions.
Added diffuse components into maximum directional hemispherical reported by checkBSDF, so comparing to 100% is easier for each component.
Fixed incorrect calculations in iso2klems script, thanks to help from Jacob Jonnson.
Updated official copyright and license according to new wording provided by Jean Haemmerle at the LBNL Intellectual Property Office. Both were copied verbatim from e-mail I received from Taoning Wang on 8/20/2022.
Added -features option to rpict, rtrace, and rcontrib to check which features are present or look for specific feature support. This addition was suggested by Peter Apian-Bennewitz as an easier way to determine which version of Radiance is installed and what it supports, and is timely as we begin our refactoring of the rendering code. There are no current plans to add this to rvu.
Added falsecolor -odim, -orct, and -c0 options to overlay grid of values on image. This was requested by Rob Shakespeare.
Added -i* and -o* options in rhcopy for reading rays from the standard input and writing rays from holodeck to standard output. This will hopefully be useful in combining rholo with rcontrib.
Added further checking for coincident (overlapping) flat surfaces, preferring front sides to back sides in the ray intersection calculation. This only applies to rings and faces, as the other surface types would have required additional calculations to make them work. Material transparency is still the primary consideration, now followed by ray hit side, followed by modifier definition order in the input.
Increased octree and object limits to allow scenes with billions of primitives.
Made reciprocity averaging default to "off" in bsdf2ttree, as it seems to create more problems than it solves.
Created radcompare program to compare Radiance tool output to reference outputs during unit-testing.
Fixed issue reading very large files (> 2 GBytes) in rcollate.
Made picking function in rvu ignore transparent and void surfaces.
Added -orRxX options to rtrace to enable output of mirrored and unmirrored contributions and distances to enable new types of reprojections. This also cleaned up and unified handling of effective ray lengths throughout code.
Bug fixes from Jan Wienold for evalglare.
Changed indexed (numbered) output from dctimestep to start from 0 rather than 1, to make it more consistent with expected input naming.
Increased default sampling in bsdf2klems (-n option) to 1024.
Fixed an issue noticed by David G-M that was causing genBSDF to bias isotropic tensor tree samples resulting in subsequent failure of peak extraction with "aBSDF" type.
Introduced max() and min() functions to .cal library.
Added random incident patch sampling to bsdf2klems to improve accuracy with scattering interpolation representation input (e.g., from pabopto2bsdf). The other input types already sampled incident patch area.
Added gendaymtx -A option to compute average sky over all the input time steps.
Added ability to output color image from rtrace with any of -ovrx options. Also fixed inconsistency of -oN output when ray casting versus full trace. Before, it would flip normal to front side unless ray casting. Now, -oN always reports the unflipped normal.
Changed rlam behavior so -iaN reads N lines from a stream rather than N characters. This seems more useful, since -ibN is somewhat redundant with the old behavior.
Created rsplit program as compliment to rlam and to handle more complex rtrace output into separate files or streams.
Improved getinfo so that it can also hop over resolution string with -c and header elide mode. Use +d to include resolution string in output, and -d to elide with - and -c options.
Made pvalue -u option mean "uncompressed" with -r. Also, allow skipping bytes on standard input.
Created rcode_depth tool to convert to and from a 16-bit/pixel portable depth image encoding that uses a mix of linear and reciprocal distance with explicit representations of 0 and infinity. Code for loading these depth maps is in src/common/depthcodec.{h,c}.
Created rcode_norm tool to convert to and from 32-bit/pixel portable surface normal representation, matching the one in src/common/dircode.c. Code for loading normal maps is in src/common/normcodec.{h,c}.
Created rcode_ident tool to create indexed identifier files. Code for loading these files is in src/common/idmap.{h,c}.
Added -o* option to rtpict to produce layered images that handle most output types from rtrace (colors, surface normals, distances, IDs).
Created rcode2bmp script to create images from new rcode_* output maps.
Improved efficiency of rmtxop in cases where matrix multiplication is faster evaluated right-to-left, as when the final component is a column vector. Also added ability to apply trailing unary operators (-t, and -s or -c) to resulting matrix.
Added new depth, normal, and ID file types to radcompare.
Added BigEndian= header line for automatic byte-swapping in rmtxop and radcompare.
Added new "turbo" palette to falsecolor (thanks to Taoning).
Nathaniel Jones created the "dcglare" program for annual glare simulations when the sun and sky are visible through the window. Tutorial is posted at "https://github.com/nljones/Accelerad/wiki/The-Imageless-Method-for-Spatial-and-Annual-Glare-Analysis".
Added support for loading RGBE images into matrices in dctimestep.
Added -y option to gensky and gendaylit to support more accurate Michalsky solar position calculation.
Changed rsplit, so specifying a space as the separator parses words between whitespace.
Added ability of vwrays, pinterp, and pmblur2 to read encoded depth files.
Added -o RxCxR1xC1 facility to perform blocking in rcollate.
Made it so number of segments in genworm, genrev, and gensurf can be given as expressions of previously defined variables, etc.
Added -D and -n option to gendaymtx to output sun description and skip matrix output on request. A -M option was also added to output solar modifiers for rcontrib. Support also added for leap days in WEA input. Enhancements sponsored by Ladybug Tools.
Updated eplus_uvf to work with IDF version 9.x, checking version number.
Fix to glarendx issues with dgi calculation.
Made it so rmtxop and dctimestep undo any exposure applied to Radiance pictures they may load.
Added robjutil utility to manipulate Wavefront .OBJ files.
Fixed a crash related to rtrace -om or -oM with mesh instances containing materials.
Improved rtrace flushing function to handle any value for -x without deadlock on controlling process.
Eliminated unnecessary start-up procedures for rtrace when only ray-casting is needed (i.e., no tracing or value output).
Improved isotropic sampling method in bsdf2ttree using "zipper" approach applied in genBSDF.
Added limit to memory used by high-resolution tensor tree BSDFs for cumulative cache during MC sampling (rendering). Limit set to 250MBytes per BSDF for standard architectures.
Added -n and -s options to bsdf2ttree to provide some user control over super-sampling.
Improved surface normal codec used by ambient file to store orthonormal directions exactly.
Improved peak extraction method, which was undervaluing transmission in many cases.
New version of evalglare from Jan Wienold.
Added -u option to gendaymtx to elide data columns (time steps) when the sun is not visible above the horizon.
Created psketch program to apply non-photorealistic rendering to selected objects, identified by modifier name(s).
Added '*' and '/' operations to rmtxop for element-wise multiplication and division of same-sized matrices.
Changed falsecolor so "-s" option is adjusted to match legend if one.
Falsecolor legend changes and improvements by David G-M and Stephen W.
Fixed bug in peak extraction code that generated "Bad call to SDqueryTreProjSA" error, reported by Lars Grobe.
Increased maximum luminance to 10^7 in pcond to fix issue noticed by Axel Jacobs where veiling glare not added for the sun under some conditions.
Increased maximum number of open files in rcontrib to the system upper limit of 2048 rather than the default 512 under Windows.
Added top-level resources directory with files from Rob Guglielmetti.
Improved accuracy for peaky BSDFs and small light sources.
Fixed issue with pmapdump noted by Axel Jacobs.
Improved accuracy of bsdf2ttree when converting scattering interpolation representatons with strong peaks.
Tweaked peak-extraction code to work more reliably.
Georg Mischler updated SCons build system.
Rob Guglielmetti and Alex Swindler updated CMake build system.
Modified pcomb so the first view seen in the inputs is written into header.
Wrote rtpict script to run rtrace in parallel mode and simulate rpict with -n option.
Added ability to move forwards/backwards specified distance in rvu "origin" command. Feature requested by John Mardaljevic, who essentially owns this
command, now.
Reduced bias in ambient super-sampling method.
Fixed bugs associated with zero transmission in chromatic tensor trees. Thanks to Lars Grobe for pointing out issues.
Added RAYPATH searching for -f options to genrev, gensurf, genworm, bsdf2klems, bsdf2ttree, and pcomb. This makes behavior consistent with rcalc, calc, and rendering tools.
Worked with Randolph Fritz to fix some issues with ies2rad and newer IESNA63 standards.
Resurrected original bsdf2rad test program, renaming it bsdf2rado. Still an optional build in src/cv/.
Fixed bug in rcontrib with virtual sources, where pretest was adding to modifier accumulation buffers. Reported by Mostapha.
Added an "aBSDF" material type that explicitly checks for peak extraction. Its arguments are the same as the original "BSDF" type, but without the thickness parameter, as proxy geometry is not supported by this new type. The old "BSDF" type no longer does peak extraction under any circumstances, since this behavior is superfluous for proxied geometry.
Added -r option to bsdf2rad (and bsdfview) to fix BSDF min and max range for comparing BSDFs.
Fixed issue with pfilt -m option and uneven image size changes pointed out by Rob Shakespeare.
Updates to evalglare and gendaylit from Jan Wienold, including new colored sky option.
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.
****** COMPATIBILITY CHANGE ********
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 view360stereo.cal 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 averaging.
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.
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.)
****** COMPATIBILITY CHANGE ********
Made header input and output the default behavior for dctimestep and genskyvec.
****** COMPATIBILITY CHANGE ********
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" tocontrol 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 normaltransmittance 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.
Hopeful fix to deadlock issue under Mac OS X 10.10.x (Yosemite).
Fixed early exit of rcontrib with internal error (sample behind sender) discovered by Rob G.
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.
****** COMPATIBILITY CHANGE ********
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.
****** COMPATIBILITY CHANGE ********
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.
****** COMPATIBILITY CHANGE ********
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 klems_int.cal to klems_full.cal in the process.)
Added "-c" option to getinfo to execute command on data segment.
Changed ranimate behavior so remote login under a different userdoesn't necessarily require the presence of the originating user'shome directory.
Changed standard transmission function normalization back to whatit 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 ChristianKohler.
Added -u option to rlam for unbuffered output.
Modified dctimestep to accept sky vector and daylight coefficient matrixor 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 forsuggestions 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.
****** COMPATIBILITY CHANGE
********
Changed behavior of rtrace and rtcontrib so that every
scanline isnot flushed when both -x and -y are set. This
avoids flush delaysin rtcontrib for large numbers of output
files and delays whilerendering images using rtrace with the
-n option.
Added ability for rsensor to output ray origins and directionsrather than actually loading octree and computing sensor value.
Fixed old bug in obj2rad where it would stop processing andreport a syntax error if the "void" type is used in the map file.
Updated reflection model according
to EGSR 2010 paper by DavidGeisler-Moroder and Arne Duer.
Replaced C-shell version of falsecolor with Perl script
writtenby Axel Jacobs.
****** COMPATIBILITY CHANGE
********
Changed -sj (specular jitter) option to something called
specularsampling (-ss), which if set less than 1 has the same
behavior asthe old -sj, but when set greater than 1, spawns
multiple raysamples 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 ittogether with surface description suitable for inclusion ina Radiance scene.
Muted warning for "no light sources found" when there is at leastone glow object and interreflections are on (-ab > 0).
Fixed long-standing bug that caused underestimation of reflectionwhen specular component was below -st threshold in non-metals.
Checked in cross-platform cmake build system created by Bill Hoffmanof KitWare and sponsored by NREL. This includes a qt-baseddriver for rvu, which is built in the new subdirectory src/qtrvu.
Added -n option to rvu to provide parallel rendering.
******
COMPATIBILITY CHANGE ********
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 klems_int.cal 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.
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.
****** COMPATIBILITY
CHANGE ********
Fixed long-standing bug in source.cal, 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).
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 glazing.cal 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.
******
COMPATIBILITY CHANGE ********
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.
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 innacuracy 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
works.)
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/blackbody.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.7 patch
releases
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 5 Aug 2005.)
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.2b patch release 22 Aug 2005.)
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
parallel.
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
files.
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.)
******
COMPATIBILITY CHANGE ********
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.
****** COMPATIBILITY CHANGE ********
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
locations.
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
correctly.
Fixed bug in replmarks pointed out by Georg Mischler, which
caused
garbage to be output under specific conditions (unscaled,
unrotated
instances).
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 source.cal 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
feedback.
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,
hurrah!
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
specification.
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
substitution.
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.
pfilt -x 512 -y 400 -p 1