Matt Pharr • Greg Humphreys
Physically Based Rendering
from Theory to Implementation

Errata

This page contains known errors in the first edition. Errata are separated into important errors (of interest to all readers) and minor errors (likely of interest only to the authors and the publisher).

Important Errors

Page Error
53In third line of second paragraph, change \theta ||v_1|| to \theta ||v2|| [Larry Lai --- April 28, 2008]
54Second paragraph, third line, change "and swapping the remaining two" to ", swapping the remaining two, and negating one." [Randall Hopper --- April 28, 2008]
84The displayed equation should be S(1,1,-1) \dpdu \cross S(1,1,-1) \dpdv = S(-1,-1,1) \dpdu \cross \dpdv = S(-1,-1,1) n = \ne S(1,1,-1) n [zho --- April 28, 2008]
98In section 3.2.2, line 4, both \theta_{max} should be \phi_{max} [Mark Bolstad --- April 28, 2008]
175First code fragment: missing space between "class" and "InstancePrimitive" [mmp --- April 28, 2008]
192In figure 4.7, the two instances of "NextCrossing" in the figure and the one in the third line of the caption should be "NextCrossingT". [Arek Zimny --- April 28, 2008]
298Footnote, line 1, "low-discrepancy and best-candidate samplers" should be "best-candidate sampler" [mmp --- April 28, 2008]
335Second fragment, delete "/" after "lensSamples" [mmp --- April 28, 2008]
353In Figure 7.37, last line of the caption, change "bricks" to "arches". [mmp --- April 28, 2008]
416The definition of the hemispherical-directional reflectance should not have that 1/pi term. [Stephen Chenney --- April 28, 2008]
430-435The \eta_t in Figure 9.7 and the \omega_t in the specular transmission BTDF should be \eta_o and \omega_o, respectively. Similarly, the SpecularTransmission BxDF implementation should be written to use etao, not etat, Figures 9.9 and 9.10 need to be updated to use \theta_o rather than \theta_t, and various text should be changed to use \theta_o rather than \theta_t. [Stephen Chenney --- April 28, 2008]
431In the denominator of the fourth displayed equation, |\cos \theta_i| should be |\cos \theta_t|. (Though N.B. the 430-435 changes above.) [David Wolff --- April 28, 2008]
433In SpecularTransmission::Sample_f(), (ei*ei)/(et*et) should actually be (et*et)/(ei*ei). (Fortunately, in practice these terms all end up cancelling out, so images shouldn't be changed by this fix.) [Thiago Ize --- April 28, 2008]
442Figure 9.15 is drawn incorrectly: \omega_o and \omega_i should make the same angle with respect to \omega_h, \theta_h. As drawn, \omega_o makes that angle with the normal, rather than \omega_h. [Arek Zimny --- April 28, 2008]
448The normalized microfacet distribution actually should be: "\frac{\sqrt{(e_x+2)(e_y+2)}{2\pi} (\wh \cdot \n)^ ..." [Stephen Chenney --- April 28, 2008]
449The implementation of Anisotropic::D() should be sqrt((ex+2)*(ey+2)) * INV_TWOPI * powf(...) [Stephen Chenney --- April 28, 2008]
497Figure 11.6: Reflection of ray "r" on left should be drawn with dotted line, incident ray "r'" on right should be drawn with dashed line [mmp --- April 28, 2008]
523The last line of code in the third code fragment should be "texel(i-1, 2*s+1, 2*t+1));" [mmp --- April 28, 2008]
565Exercise 11.2: Version 1.2 of the OpenEXR file format supportes tiled image files and includes a utility to create tiled files from untiled EXR files. This makes this exercise somewhat easier. [mmp --- April 28, 2008]
577There shouldn't be a \frac{1}{4\pi} term in equation 12.2, the phase function normalization constraint. [Arek Zimny --- April 28, 2008]
637F(x) in the second line from the top should be f(x). [mmp --- April 28, 2008]
640Footnote, x <= 0 should be x < 0 [mmp --- April 28, 2008]
658Figure 14.12: Coordinates next to filled dot in figure should be (u, 1-u) [mmp --- April 28, 2008]
671Change first displayed match to $\beta = E[F] - \int f(x) dx$. [Shaohua Fan --- April 28, 2008]
672Third line, O(1/N^-1) should be O(N^-1) [Shaohua Fan --- April 28, 2008]
676The multiple importance sampling equation at the bottom of the page is incorrect. It should be (1/n_f) \sum_{i=1}^{n_f} ... + (1/n_g) \sum_{j=1}^{n_g} ... ["fsf" --- April 28, 2008]
684"exponent+1.f" in the "Compute PDF from \omega_i from Blinn distribution" fragment should be "exponent+2.f". Also, add a sentence like "Using the definition of the distribution over the hemisphere from Equation 9.9, we have:" before that fragment to make clear where the 2 pi comes from. [Stephen Chenney --- April 28, 2008]
686Given the aforementioned Anisotropic changes on 448 and 449, the 2.f * M_PI term in the computation of anisotropic_pdf should be deleted. [Stephen Chenney --- April 28, 2008]
689The definition of the hemispherical-directional reflectance should not have that 1/pi term. Also, the M_PI term in the definition of BxDF::rho() should be removed, and the \pi in the equation for the estimator at the very bottom of the page should be deleted. [Stephen Chenney --- April 28, 2008]
697The last sentence on the bottom of the page should be "So p(\theta) = \sin \theta/(1 - \cos \thetamax) and p(\omega) = 1 / (2 \pi (1 - \cos \thetamax))." [Stephen Chenney --- April 28, 2008]
703In the first line of the page, change "multiplication" to "division". Then, in the equation at the top of the page, the right-hand side should be \frac{\cos \theta_o}{r^2}. [Swaminathan Narayanan --- April 28, 2008]
706Figure 15.11 would be better if the radius line "r" connected the middle of the sphere to the point where the tangent line intersects the sphere. [Stephen Chenney --- April 28, 2008]
748The numerator and denominator of the fraction of the first displayed equation should be flipped--i.e. it should be "p_A = p_\w \frac{|\cos \theta_i|}{|| \p[i] - \p[i+1] ||^2}". [Wei-Wei Xu and Shaohua Fan --- April 28, 2008]
777The displayed equation toward the bottom of the page should have |\cos \w_o| in the numerator. [Matthias Zwicker --- April 28, 2008]
850Second fragment, second line, delete "/" before "Block(u)" [mmp --- April 28, 2008]
869First paragraph, 4th line, delete "octree" [mmp --- April 28, 2008]

Minor Errors

Page Error
217,218It would be more clear to name the variable "tplane" "tsplit" in order to match usage in the text and figure 4.15. [Nils Thuerey --- April 28, 2008]
72, 74Missing cross reference in mini-indices to Matrix::Transpose() (page 852) [Leonhard Gruenschloss --- April 28, 2008]
colophonThird paragraph: "that appears" should be "that appear" [mmp --- April 28, 2008]
notationAdd to index of notation, t(\p, \omega) ray casting function (defined on p. 734). [mmp --- April 28, 2008]
readme.htmIn the Windows section, change cd c:\pbrt\examples to cd c:\pbrt\scenes and change imageview.exe pbrt.exr to imageview.exe simple.exr. Also, this line: exrtotiff pbrt.exr pbrt.tif doesn't work because "exrtotiff" isn't included in the standard install so isn't in the \bin\win32 directory. [David Gould --- April 28, 2008]
xxxi"have generously in suppliyed" should read "have generously supplied". [Cliff Wooley --- April 28, 2008]
11In 5th line of pseudo-code at bottom of page, swap "light_vector" and "eye_vector" to be consistent with usage of \omega_o and \omega_i. [Francis Huynh --- April 28, 2008]
18In second paragraph, line 4, "which is be the focus" should be "which is the focus" [Larry Lai --- April 28, 2008]
54Second paragraph, change "zeroing one of the two components" to "zeroing one of the components". [Leonhard Gruenschloss --- April 28, 2008]
70Section 2.7.4, first equation set, second line, delete comma between z_1 and z_2. [Randall Hopper --- April 28, 2008]
73First equation, "p = a * cos(alpha) = a * (v * a)" should be "p = a * ||v|| * cos(alpha) = a * (v * a)" [Leonhard Gruenschloss --- April 28, 2008]
98In paragraph for section 3.2.2, change "will use" in line 2 to "uses", and change "won't" in line 4 to "doesn't". [mmp --- April 28, 2008]
120A comma is missing in the expression for one of the hyperboloid's partial derivatives; specifically the right hand side of the one for \partial^2 p/\partial u \partial v, before the zero. [Arek Zimny --- April 28, 2008]
142Second paragraph, second line, wrong font is used for ']' in 'f[0]'. [mmp --- April 28, 2008]
204In second to last paragraph, "- 1" after "prims.size()" should also be in code font. [Arek Zimny --- April 28, 2008]
210At the bottom, "sort() depends on the fact that a < b and b < a is only true if a == b" should actually be "sort() depends on the fact that the only time a < b == false and b < a == false will be when a == b". [Brian Budge --- April 28, 2008]
2215th paragraph, insert "and" after (1987), before "Amanatides" [mmp --- April 28, 2008]
242In equation 5.2, there shouldn't be 'prime' symbols after the theta or domega symbols. [mmp --- April 28, 2008]
246"The conversion of spherical angles to a direction can be found by" -> "The conversion of a direction $(x,y,z)$ to spherical angles can be found by" [sfan --- April 28, 2008]
250Equation 5.5, top of rightmost term, "d" should be roman font [mmp --- April 28, 2008]
275Delete space after "::" in "Environment Camera Method Definitions" fragment at the top of the page. Then delete one space in each of the following two lines such that the "float"s continue to line up with "const" in the first line. [mmp --- April 28, 2008]
320In "first hundred points of the 2D Hammersley sequence", change "Hammersley" to "Halton", and then in the next sentence, change 'Halton" to "Hammersley" [Leonhard Gruenschloss --- April 28, 2008]
322In second line of text after code chunks, "Zaramba" -> "Zaremba". [Arek Zimny --- April 28, 2008]
426Figure 9.5: thinner lines should be used to denote angles theta', theta''. (Also p.245, F5.11) [mmp --- April 28, 2008]
427In the displayed equation at the bottom of the page, the final delta function should just be $\delta(\phi_i - \phi_r)$. [Nuttapong Chentanez --- April 28, 2008]
431In the displayed equation after equation 9.5, the \omega_t on the left-hand side should be \omega_o. Then, on the right hand side, T(\omega_i, \n) should be T(\omega_o, \n). In the remainder of the sentence after the equation, the same change should be made to the T term and the \omega_i at the end should also be changed to \omega_o. [Thiago Ize --- April 28, 2008]
438In the third line of the "OrenNayar Public Methods" chunk, "OrenNayarR" should be "R". [nirwan --- April 28, 2008]
492In the left hand side of the second displayed equation, the p' variables should be p'_x, p'_y, and p'_z. [Nuttapong Chentanez --- April 28, 2008]
499In 4th line of 2nd paragraph, change "dsty" to "dsdy" [Arek Zimny --- April 28, 2008]
502The assignment in the last line of the fragment at the middle of the page should be "*dtdy = ...", not "*dtdx = ..." [erikdendekker --- April 28, 2008]
539Below bottom displayed math change "average value of the step function in one dimension" to "average value of the step function in two dimensions". [Arek Zimny --- April 28, 2008]
550"dots are is randomly placed" should be "dots are randomly placed" [Wojciech Jarosz --- April 28, 2008]
587Should add "in closed form" to the end of "The DensityRegion cannot implement the VolumeRegion::Tau() method" and change the next sentence ("Therefore....implementations") to something like "However, it can be implemented with Monte Carlo, as is done in Section 15.7.2." [Arek Zimny --- April 28, 2008]
609Third fragment, 4th line, insert 3 spaces before "screenY1" [mmp --- April 28, 2008]
647Second equation from bottom, change \sin^{-1} to \arcsin (be consistent with usage elsewhere.) [mmp --- April 28, 2008]
676, 678Pull in spacing on "f" subscripts (many) [mmp --- April 28, 2008]
681Delete the first sentence of the last paragraph. Then insert "Recall that Blinn's microfacet distribution function is" at the start of the second sentence and add the clause ", where \cos \theta_h..." from the deleted first sentence to the end of the second sentence. [Stephen Chenney --- April 28, 2008]
682The last line of the "Compute sampled half-angle vector..." code fragment should be "if (!SameHemisphere(wo, H)) H.z *= -1.f;" [Kevin Egan --- April 28, 2008]
772In the denomenator of the top equation on the page, the left paren ( is incorrectly set as a subscript of p. Furthermore, the first 'p' in the denomenator should be italicized. [mmp --- April 28, 2008]
805Figure 17.2 L_0 should be letter 'o' not zero [mmp --- April 28, 2008]
853Second fragment, delete "Matrix4x4::" [mmp --- April 28, 2008]
857In the second sentence of the first full paragraph, change "The code to the random number generator" to "The code that implements the random number generator". [mmp --- April 28, 2008]
921C.3.4 - In the input files, use "PixelFilter", not "Filter" [humper --- April 28, 2008]
1005Under "ray tracing", "early, phototypical example" should be "early, prototypical example". [Craig Kolb --- April 28, 2008]
1018In the third bullet list on the page, "export" should be in typewriter font (2x) [mmp --- April 28, 2008]