pbrt Release 1.04 (19 July 2009) ------------- Installation: ------------- The pbrtsrc-1.04.tar.gz and pbrtsrc-1.04.zip files include updated source code to the pbrt rendering system described in "Physically Based Rendering: From Theory to Implementation" by Matt Pharr and Greg Humphreys. The zip file includes project files and source code, for bulding the system under Windows, and the tar.gz file includes makefiles and source code for building under Linux, OSX, FreeBSD, and OpenBSD. (For all of these these platforms, you are expected to install OpenEXR on your system yourself; for non-Windows systems, information about how to do this is provided during the build process. For windows systems, you'll need to download OpenEXR from http://openexr.com, follow installation directions from there, and then update the solution files to be able to find the directories where the OpenEXR libraries and headers are installed.) See page 1017 of the PBR book for informaton about building and installing under Windows and page 1018 for information about building and installing under Linux. See the pbrt.org website for more information about pbrt. The source code to pbrt (*but not the contents of the book itself*) is released under the GNU Public License; see the accompanying file COPYING.txt for information about the license agreement under which this software is provided. Your use of this software constitutes acceptance of this license. Thanks in particular to Kevin Egan for many bug reports and patches that went into this release. -------------- Other Changes: -------------- This release has the author-supplied plugins from http://pbrt.org/downloads.php already included. ---------- Bug Fixes: ---------- The following bugs (many from the pbrt bug database at http://pbrt.org/bugtracker) are fixed in this release. - Copyright notices in source code files updated to reflect GPL licensing change actually done in 1.03 release - Bug #69: importance sampling bugs in Anisotropic, Blinn, and Lafortune BxDFs fixed - Bug #7: depth of field lens position calculation wrong - Bugs #38, #49: kd-tree traversal may produce wrong results when ray origin lies on splitting plane - Bug #82: SampleHG() function for importance sampling Henyey-Greenstein phase function was incorrect - Bug #85: added check for correct number of uv texture coordinates with triangle meshes, when they are provided - Bug #61: path integrator doesn't get specular reflections of infinite area lights - Bug #80: photonmap.cpp calls kdtree.h - NodeData expressions invalid. (MSVC safe runtime being overly-conservative with STL vector abuse) - Fixed null pointer dereference in infinite light source Power() calculation when radianceMap is NULL. - Exphoton map final gathering code had a variable that shadowed the variable 'n' that contained the surface normal, which led to a nonsensical dot product term, which led to noisy and incorrect results (Thanks to Thomas de Bodt for finding this!) ------------------- Previous Bug Fixes: ------------------- The following bugs from the pbrt bug database (http://pbrt.org/bugtracker) Were fixed in the 1.03 release. - Bug #77: Fix the Mie scattering phase functions to actually integrate to one... - Bug #76: Added missing deletes in ParamSet::Erase*() methods. - Bug #75: Rewrote ply2pbrt to be in newfangled "ANSI C", not K&R. - Bug #74: Added calls to let Materials access geometry and material ParamSets directly. - Bug #70: The hemisphere check in the Blinn class was incorrect - Bug #68: The OrenNayar BRDF would return NaNs for certain ill-behaved directions. - Bug #66: Logic in exponent check in Blinn() constructor was incorrect - Bug #65: May have uninitialized values in LDSampler if an instance is constructed and then destroyed without any samples being generated. - Bug #57: Cylindrical texture mapping code had a typo in the discontiuity detection code where it computes dtdy. - Bug #56: Partial derivatives of disks are computed incorrectly if the inner-radius is non-zero. - Bug #55: The single-scattering volume integrator would crash when there were no lights - Bug #54: Change embedded ^M in pbrtlex.l to a more-portable \x0a - Bug #53: The DirectLighting integrator was incorrectly requesting a single 2D sample, rather than a single 1D sample, for the case of choosing a single light source to sample from. - Bug #51: Fixed gcc 4.02 build issues. - Bug #48: Radiance scale factor for transmission into a dielectric was incorrect. - Bug #46: TriangleMesh::GetShadingGeometry() wasn't properly transforming the partial derivatives into world space. - Bug #45: Fixed incorrect scale factor in FresnelBlend::f() method. - Bug #44: Invalid ray differentials could be initialized in Scene:: Render() due to that method not paying addention to the weights returned by Camera::GenerateRay() for the auxiliary rays. - Bug #43: OSX 10.4 build issues fixed - Bug #42: NURBS specificed with homogeneous "Pw" coordinates would incorrectly hit an assertion in the NURBS CreateShape() routine. - Bug #41: Use safe string functions (snprintf(), etc.) to avoid buffer overflows (and make OpenBSD's compiler happier) - Bug #40: Added support for OpenBSD to makefile and pbrt.h - Bug #34: Out of bounds sample locations would crash ImageFilm::AddSample() ------------------------------ Bug Fixes In The 1.02 Release: ------------------------------ The following bugs were fixed in the previous pbrt patch release. - Bug #2: Fixed errors in windows project files: film.cpp was missing from core project, buffer security turned off for release builds, had project file to build bumpy.cpp (which doesn't exist) file to build bumpy.cpp was missing. - Bug #3: Added checks to camera and light constructors to detect non-uniform scale transformations and warn about them, if present. (Cameras and lights don't work properly if their transformations have non-uniform scales) - Bug #8: Add checks in Blinn and Anisotropic microfacet distribution constructors to detect excessively large and NaN exponent values. - Bug #10: Added casts in PhotonIntegrator to eliminate compiler warnings about casts from doubles. - Bug #12: Fixed pbrtTransform() to set the current transformation matrix from the given matrix; previously, it was multiplying by the given matrix, just like pbrtConcatTransform() - Bug #13: Input file parser doesn't detect errors like: "float foo" "some-texture-name". (Where "float" should have been "texture"). This is particularly bad since the TT scene on the CD has this error in it. Fixed the parser to detect this case and treat it as a texture as intended by the user. - Bug #14: Fixed InfiniteAreaLight::Sample_L() to no longer potentially divide by an uninitialized variable depending on how the compiler generated code. (Also fixed AreaLight in a similar manner). - Bug #15: Fixed SphericalMapping2D::Map() method to compute *dtdy correctly (it would incorrectly assign to *dtdx in the else clause of the if test.) - Bug #17: Added COREDLL to declaration of ComputeStep1dCDF() function so that it's available to plugins under windows. - Bug #18: Fixed triangle area calculation in test for degenerate uv mapping on triangles in TriangleMesh's CreateShape() function. - Bug #20: Avoid possible degenerate case when computing dPdu and dPdv on spheres. - Bug #21: Fix Assert() macro to handle expressions using modulus '%' operator. - Bug #25: Fix error in implementation of Anisotropic::sampleFirstQuadrant() - Bug #26: dNdu and dNdv in DifferentialGeometry should be Normals (and in particular should transform like Normals), not Vectors. - Bug #27: Fix AggregateVolume::p() method to correctly handle the case of multiple overlapping volumes. - Bug #28: Fixed Scene::WorldBound() to include the extents of any VolumeRegions in the scene as well as the scene geometry. - Bug #29: Fixed the Monte Carlo-based implementation of BxDF::rho() to no longer incorrectly divide by M_PI. - Bug #30: Fixed the computation of blinn_pdf value in Blinn microfacet distribution to divide by exponent+2, not exponent+1. - Bug #32: Use $(MAKE), not "make" in clean rule in makefile. - Bug #33: Fixed implementation of Anisotropic::D() and anisotropic_pdf calculations to match derivation. - Bug #36: Fixed possible dereference of NULL pointer when per-vertex tangents were provided for triangle mesh without per-vertex normals. - Bug #37: Fixed LookAt implementation so that it actually will always generate a rigid body transformation. ------------------------------------- Additional fixes without bug numbers: ------------------------------------- Turned off buffer security checks on windows builds; this speeds things up a bunch! Added missing COREDLL declarations to: Spectrum::Exp(), RejectionSampleDisk(), Rotate[XYZ](), Rotate(), LookAt(), EstimateDirect(), SampleStep1d(), ComputeStep1dCDF(), MemoryArena class, GeometricPrimitive class, and InstancePrimitive class. Added missing const qualifier to Point::operator+ method. Fixed BBox::BoundingSphere() method to handle degenerate bounding boxes gracefully. Fixed typo in MipMap down-filtering of previous mip-map level. Fixed DirectLighting integrator so that area light sources visible from specular reflection or refraction would still be visible. Fixed AreaLight::Sample_L() method to pass the sampled point to AreaLight::L() to compute outgoing radiance, not the point at which lighting is being computed. Fixed memory leaks in LDSampler by freeing memory in destructor. Fix TriangleMesh computation of bitangent vectors in cases where tangent vectors are provided explicitly. Fixed case in ImageFilm that could lead to images with zero pixels in one dimension when a small crop window was given. Added 2005 to copyright notices. Bumped version number to 1.02.