| |
This page lists known errors in the first and second editions of the book.
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 In The Second Edition
| 142 | The variable 'd' in the code should be named 's' so that it matches the
notation used in the derivation of the intersection algorithm.
[Zhiyi Xu] |
| 206-207 | Contrary to the claims in the text, primitives that overlap multiple voxels
will be refined repeatedly, thence wasting both memory and computation.
(The best fix is probably to have the Voxel structure store a vector of
primitive indices, indexing into the main vector of primitive references
in the GridAccel class.)
[Ke Xu] |
| 243 | The kd-tree traversal logic for rays that start on a splitting plane is
incorrect. The "belowFirst" test in the "Get node children pointers for
ray" should be changed to "int belowFirst = (ray.o[axis] < node->SplitPos()) ||
(ray.o[axis] == node->SplitPos() && ray.d[axis] <= 0);".
[Ke Xu] |
| 782 | In the fragment "Compute virtual light's tentative contribution Llight" at
the top of the page, the line with the assignment to Llight should divide
by nLightPaths, not virtualLights[lSet].size().
[Thomas Engelhardt] |
| 783 | There are a number of errors in the two displayed equations at the top of
the page. The top integral should be written over angles \omega, not
\omega'. Then, the |\cos \theta| divisor should be |\cos \theta'|, and the
explanation of the definition of the angle \theta' should be moved to be
after the first displayed equation rather than after the second one. Then,
Equation 15.12 should be rewritten so that it is also an integral over
\omega (not \omega'), and the remaining cosine term in that equation should
be |\cos \theta|.
[Jan Novak] |
| 784 | In the code fragment at the top of the page, the initializer expression for
gs should be just "(Ggather - gLimit) / Ggather;".
[Jan Novak] |
| 894 | In the second code fragment, the line that initializes the "area" variable
should be "float area = M_PI * (minSampleDist / 2.f) * (minSampleDist / 2.f);".
[Robert Szymiec] |
| 905 | In the paragraph above displayed Equation 16.5, z- should be computed as
"4AD + z+", not "2AD + z+".
[Eugene d'Eon] |
| 906 | In Equation 16.6 there should be an additional scaling factor of "\sigma'_s
/ \sigma'_t". (i.e. the reduced scattering albedo).
[Eugene d'Eon] |
| 907 | In the DiffusionReflectance constructor, there should be a negation in
front of the expression initializing the value of zneg.
[Eugene d'Eon] |
| 908 | In the implementation of DiffusionReflectance::operator(), the firstl ine
of code initializing Rd should be a scale factor of "(alphap / (4.f *
M_PI))", not "(1.f / (4.f * M_PI))".
[Eugene d'Eon] |
| 912 | In Equation 16.9, the integrand on the left hand side should be "2 \pi x
R_d(x)", not "R_d(x)".
[Eugene d'Eon] |
Minor Errors In The Second Edition
| xxi | Gauß's name is misspelled twice. "Freidrich" should be "Friedrich", and
his last name should be spelled with "ß" (\ss).
[Sebastian Schuberth] | | 39 | In the second line of the first paragraph of the "Conventions in pbrt"
section, "repsonsible" should be "responsible".
[Sebastian Schuberth] | | 68 | The displayed code fragment "Ray r(Point(0, 0, 0), Vector(1, 2, 3));"
should be updated to account for the fact that there are no Ray
constructors that support passing just a Point and a Vector.
[Ke Xu] | | 123 | In the text above the displayed equation at the bottom of the page, "from
y=a to y=b" should be "from x=a to x=b".
[Ke Xu] | | 124 | In all of the displayed equations after the first one, it would be more
clear to write the functions as f(z) rather than f(x), since for the sphere
case the integration is being done over the z axis.
[Ke Xu] | | 166 | In Figure 3.23(b), one of the two shaded triangles (and its edges and
vertex) should be removed, since the new vertex
shown is supposed to be a boundary vertex.
[Ke Xu] | | 272 | In the "Compute XYZ matching functions for SampledSpectrum" code fragment,
the claimed integral isn't being computed for yint; it should be divided by
nSpectralSamples. However, this is also the case for the computation of
X.c[], etc, so these two errors cancel out when these values are used, for
exmaple in SampledSpectrum::ToXYZ().
[Ke Xu] | | 299 | In exercises 5.2 and 5.3, the units for radiance should be W/m^2 sr, not
J/m^2 sr.
[Kevin Stock] | | 319 | In the last sentence of the paragraph above the code at the bottom of the
page "x and y coordinates" should be "y and z coordinates".
[Ke Xu] | | 330 | In the displayed equation at the bottom of the page, \Pi_T(x) should
actually be \Pi_T(\omega).
[Benjamin Wüthrich] | | 365 | The final parenthetical statement at the end of the caption for FIgure 7.26 is incorrect; it should be removed.
[Matt Pharr] | | 427 | In the illustration for Figure 8.3, the y axes should be sized so that it
ends at the edge of the shown hemisphere (as the x axis does), to better
illustrate that its length is one. Then, the projection of \omega down to
the plane shouldn't end up at the edge of the hemisphere, but it should be
in the interior of the circle under the hemisphere.
[Yamauchi Hitoshi] | | 461 | The "pi" term in the denominator of the displayed equation in the middle of
the page should be removed.
[Joel Kronander] | | 529 | In the caption to Figure 10.10, the reference to Figure 11.1 should refer
to Figure 10.1 instead.
[Kevin Stock] | | 550 | In the definition of the function c(x) in the first displayed equation, "odd" should be "even"
[Brad Loos] | | 566 | In the second sentence of Section 10.6.5, the reference to Figure 7.36 should be to Figure 7.35.
[Brad Loos] | | 586 | A slightly better mapping between the phase function asymmetry parameter g
and the Schlick phase function's k parameter is given by
k(g)=1.45352*g-0.45352*g^3. (See
http://pbrt.org/bugtracker/view.php?id=102) for more details.)
[Thies Heidecke] | | 652 | In the second sentence of the first paragraph of section 13.4, "invert the
resulting PDF" should be "invert the resulting CDF".
[曹家音] | | 666 | In the displayed equation at the bottom of the page, the second equality
should be "\theta = \frac{y}{x} \frac{\pi}{4}".
[曹家音] | | 669 | In the sentence above the second displayed equation, "(r, \phi) \rightarrow
(\sin \theta, \phi)" should be "(r, \phi) = (\sin \theta, \phi) \rightarrow
(\theta, \phi)".
[Ihab Sultan] | | 679 | In the third sentence of this chapter, "reduce the variance" should be
"reduce the error".
[Feng] | | 712 | The right hand side of first equation on the very last line of the page
should be sin \theta / (1 - \cos \theta_max).
[曹家音] | | 732 | At the second line from the bottom, "N d" should be "N / d".
[Volodymyr Kachurovskyi] | | 740-741 | The bulleted list of parameters for SurfaceIntegrator::Li() should include a bullet
and an explanation of the "RNG &rng" parameter.
[Brad Loos] | | 886 | The first sentence of the 5th paragraph should say "homogeneous scattering
properties", not "heterogeneous scattering properties".
[Eugene d'Eon] | | 904,905 | It would be good to use a different symbol for Equations 16.3 and 16.5, to
better reflect that they represent different quantities.
[Eugene d'Eon] | | 914 | Toward the bottom of the page, "interacitions" should be "interactions".
[Brad Loos] | | 915 | Contini 1997 is not the correct reference for the multipole. The earliest
application of the method of images for diffusing photons in a slab that I
can find is Brinkworth 1964--"A diffusion model of the transport of
radiation from a point source in the lower atmosphere". He even used the
extrapolated boundary condition.
[Eugene d'Eon] | | 926 | Under the first displayed equation, "funcion" should be "function".
[Matt Pharr] | | 929 | In the legend for the graph in Figure 17.2, the x axis should be labeled 0, 1/4,
2/4, 3/4, 1 so that its domain correctly corresponds to the definition of Equation 17.2.
[Matt Pharr] | | 1025 | In Figure A.5, the larger of the two objects should just be shown as being
added to the root node of the tree; according to the refinement criteria
used in the fragment "Possibly add data item to current octree node",
there's no need for refinement in that case.
[Ihab Sultan] | | 1128 | The reference to Morley et al 2006 is missing. It should be:
Morley, R. K., S. Boulos, J. Johnson, D. Edwards, P. Shirley, M. Ashikhmin,
and S. Premoze. 2006. Image synthesis using adjoint photons. In Proceedings
of Graphics Interface 2006, pp. 179--186.
[Erich Ocean] |
Important Errors In The First Edition
| 53 | Second paragraph, third line, change "area is given by ||v_2|| * h" to
"area is given by ||v_1|| * h"
[Ricky Uy, Sebastian Lipponer] |
| 53 | In third line of second paragraph, change \theta ||v_1|| to \theta ||v2||
[Larry Lai] |
| 54 | Second paragraph, third line, change "and swapping the remaining
two" to ", swapping the remaining two, and negating one."
[Randall Hopper] |
| 84 | The 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] |
| 98 | In section 3.2.2, line 4, both \theta_{max} should be \phi_{max}
[Mark Bolstad] |
| 175 | First code fragment: missing space between "class" and "InstancePrimitive"
[mmp] |
| 192 | In 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] |
| 298 | Footnote, line 1, "low-discrepancy and best-candidate samplers"
should be "best-candidate sampler"
[mmp] |
| 335 | Second fragment, delete "/" after "lensSamples"
[mmp] |
| 353 | In Figure 7.37, last line of the caption, change "bricks" to "arches".
[mmp] |
| 416 | The definition of the hemispherical-directional reflectance should not have that 1/pi
term.
[Stephen Chenney] |
| 430-435 | The \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] |
| 431 | In 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] |
| 433 | In 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] |
| 442 | Figure 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] |
| 448 | The normalized microfacet distribution actually should be:
"\frac{\sqrt{(e_x+2)(e_y+2)}{2\pi} (\wh \cdot \n)^ ..."
[Stephen Chenney] |
| 449 | The implementation of Anisotropic::D() should be sqrt((ex+2)*(ey+2)) * INV_TWOPI * powf(...)
[Stephen Chenney] |
| 497 | Figure 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] |
| 523 | The last line of code in the third code fragment should be "texel(i-1, 2*s+1, 2*t+1));"
[mmp] |
| 565 | Exercise 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] |
| 577 | There shouldn't be a \frac{1}{4\pi} term in equation 12.2, the phase
function normalization constraint.
[Arek Zimny] |
| 581 | In the three term equation on the top of this page,
the second term after the first equal sign contains an extra "\frac{1}{4 \pi}" that should be removed. Also, a "\sin \theta" is missing in the third term before the "d \theta".
[Vincent Pegoraro] |
| 637 | F(x) in the second line from the top should be f(x).
[mmp] |
| 640 | Footnote, x <= 0 should be x < 0
[mmp] |
| 658 | Figure 14.12: Coordinates next to filled dot in figure
should be (u, 1-u)
[mmp] |
| 671 | Change first displayed match to $\beta = E[F] - \int f(x) dx$.
[Shaohua Fan] |
| 672 | Third line, O(1/N^-1) should be O(N^-1)
[Shaohua Fan] |
| 676 | The 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"] |
| 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] |
| 686 | The sixth line of the chunk defining Anisotropic::sampleFirstQuadrant() should be
"... (ex+1)/(ey+1)", not "(ex+1)*(ey+1)".
[Brian Budge] |
| 686 | Given 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] |
| 689 | The 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] |
| 697 | The 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] |
| 703 | In 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] |
| 706 | Figure 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] |
| 713 | Not only is the equation for sampling the Henyey-Greenstein phase function
incorrect, but the code implementation is wrong as well.
(For more details, see the
bug report in the pbrt bug database.)
[Kevin Egan, Trevor Thompson] |
| 748 | The 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] |
| 777 | The displayed equation toward the bottom of the page should
have |\cos \w_o| in the numerator.
[Matthias Zwicker] |
| 850 | Second fragment, second line, delete "/" before "Block(u)"
[mmp] |
| 869 | First paragraph, 4th line, delete "octree"
[mmp] |
Minor Errors In The First Edition
| colophon | Third paragraph: "that appears" should be "that appear"
[mmp] | | notation | Add to index of notation, t(\p, \omega) ray casting function (defined
on p. 734).
[mmp] | | readme.htm | In 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] | | xxxi | "have generously in suppliyed" should read "have generously supplied".
[Cliff Wooley] | | 11 | In 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] | | 18 | In second paragraph, line 4, "which is be the focus" should be "which is the focus"
[Larry Lai] | | 54 | Second paragraph, change "zeroing one of the two components" to
"zeroing one of the components".
[Leonhard Gruenschloss] | | 70 | Section 2.7.4, first equation set, second line, delete comma
between z_1 and z_2.
[Randall Hopper] | | 72, 74 | Missing cross reference in mini-indices to Matrix::Transpose() (page 852)
[Leonhard Gruenschloss] | | 73 | First equation, "p = a * cos(alpha) = a * (v * a)" should be
"p = a * ||v|| * cos(alpha) = a * (v * a)"
[Leonhard Gruenschloss] | | 98 | In 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] | | 120 | A 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] | | 142 | Second paragraph, second line, wrong font is used for ']' in
'f[0]'.
[mmp] | | 204 | In second to last paragraph, "- 1" after "prims.size()" should also be in
code font.
[Arek Zimny] | | 210 | At 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] | | 217,218 | It would be more clear to name the variable "tplane" "tsplit"
in order to match usage in the text and figure 4.15.
[Nils Thuerey] | | 221 | 5th paragraph, insert "and" after (1987), before "Amanatides"
[mmp] | | 242 | In equation 5.2, there shouldn't be 'prime' symbols after the theta
or domega symbols.
[mmp] | | 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] | | 250 | Equation 5.5, top of rightmost term, "d" should be roman font
[mmp] | | 275 | Delete 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] | | 286 | In the displayed equation at the bottom of the page, \Pi_T(x) should
actually be \Pi_T(\omega).
[Benjamin Wüthrich] | | 320 | In "first hundred points of the 2D Hammersley sequence",
change "Hammersley" to "Halton", and then in the next sentence,
change 'Halton" to "Hammersley"
[Leonhard Gruenschloss] | | 322 | In second line of text after code chunks, "Zaramba" -> "Zaremba".
[Arek Zimny] | | 426 | Figure 9.5: thinner lines should be used to denote angles theta',
theta''. (Also p.245, F5.11)
[mmp] | | 427 | In the displayed equation at the bottom of the page, the final delta
function should just be $\delta(\phi_i - \phi_r)$.
[Nuttapong Chentanez] | | 431 | In 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] | | 438 | In the third line of the "OrenNayar Public Methods" chunk,
"OrenNayarR" should be "R".
[nirwan] | | 492 | In the left hand side of the second displayed equation, the p' variables should
be p'_x, p'_y, and p'_z.
[Nuttapong Chentanez] | | 499 | In 4th line of 2nd paragraph, change "dsty" to "dsdy"
[Arek Zimny] | | 502 | The assignment in the last line of the fragment at the middle of the
page should be "*dtdy = ...", not "*dtdx = ..."
[erikdendekker] | | 539 | Below 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] | | 550 | "dots are is randomly placed" should be "dots are randomly placed"
[Wojciech Jarosz] | | 587 | Should 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] | | 609 | Third fragment, 4th line, insert 3 spaces before "screenY1"
[mmp] | | 647 | Second equation from bottom, change \sin^{-1} to \arcsin (be
consistent with usage elsewhere.)
[mmp] | | 676, 678 | Pull in spacing on "f" subscripts (many)
[mmp] | | 681 | Delete 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] | | 682 | The last line of the "Compute sampled half-angle vector..." code fragment
should be "if (!SameHemisphere(wo, H)) H.z *= -1.f;"
[Kevin Egan] | | 714 | At the second line from the bottom, "N d" should be "N / d".
[Volodymyr Kachurovskyi] | | 725 | In the "Allocate and request samples for sampling one light" fragment, the line
"bsdfComponentOffset[0] = sample->Add2D(1);" should instead be
"bsdfComponentOffset[0] = sample->Add1D(1):"
[Keith Jeffery] | | 772 | In 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] | | 805 | Figure 17.2 L_0 should be letter 'o' not zero
[mmp] | | 853 | Second fragment, delete "Matrix4x4::"
[mmp] | | 857 | In 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] | | 921 | C.3.4 - In the input files, use "PixelFilter", not "Filter"
[humper] | | 927 | The type of the kd-tree "emptybonus" parameter should be "float" and not "integer"
[Jim Price] | | 935 | "volumegrid" is missing from the list of supplied volume plugins
[Jim Price] | | 1005 | Under "ray tracing", "early, phototypical example" should be
"early, prototypical example".
[Craig Kolb] | | 1018 | In the third bullet list on the page, "export" should be
in typewriter font (2x)
[mmp] |
|
|