Real-Time Rendering Corrigenda for 3rd edition, 1st print
What follows are corrections for the book Real-Time Rendering (3rd edition, 1st print), by Tomas Akenine-Möller, Eric Haines, and Naty Hoffman.
Addenda
- Page 257, in the sentence before Equation 7.48, add a footnote after the word "derived" in "but a normalized form was derived by Sloan and Hoffman...". The footnote to add is: "See http://www.realtimerendering.com/blinn-phong-normalization.pdf."
Significant errors
- Page 203, Table 7.1, last line should be "W/(m^2 sr)". Note: two corrections here. No minus sign, and parentheses. (Morgan McGuire)
- Page 227, "is equal to the BRDF times the cosine of the angle between n and l" should read "is equal to the BRDF times the cosine of the angle between n and v" (Sugih Jamin)
- Page 259, equation 7.50, first line: it should be l.t instead of v.t in the parenthesis. (Ke Xu)
- Page 342, for ray B, the two rightmost "+1" should be in italic (to indicate z-fail), and for ray C, the "-1", "+1", and "+1" should be italic as well. (Paco Abad)
- Page 382, remove the following (next to last sentence on the page + footnote) in section "Screen-Space Methods": "If half or more of the samples pass, then $k_A$ receives a value of $1$.\footnote{Ideally, samples would be taken only in the hemisphere above the surface. Since the surface normal is unknown, samples are instead taken over the entire sphere, and a hemisphere's worth of failing samples (half the total count) are assumed to represent samples behind the surface normal and so are ignored.}"
- Page 383, replace the caption for figure 9.38 with: "Crytek's ambient occlusion method applied to three surface points (the yellow circles). For clarity, the algorithm is shown in two dimensions (up is farther from the camera). In this example, ten samples are distributed over a disk around each surface point (in actuality, they are distributed over a sphere). Samples failing the $z$-test (which are behind the $Z$-buffer) are shown in red, and passing samples are green. The value of $k_A$ is a function of the ratio of passing samples to total samples (we ignore the variable sample weights here for simplicity). The point on the left has six passing samples out of 10 total, resulting in a ratio of 0.6, from which $k_A$ is computed. The middle point has three passing samples (one more is outside the object but fails the $z$-test anyway, as shown by the red arrow), so $k_A$ is determined from the ratio 0.3. The point on the right has one passing sample, so the ratio 0.1 is used to compute $k_A$."
- Page 383, the last sentence in the first paragraph says: "Note that since the samples are not weighted by a $\ccos \theta_i$ factor, the resulting ambient occlusion is theoretically incorrect, but it is visually convincing nevertheless." Replace with: "Note that since the samples are not weighted by a $\ccos \theta_i$ factor, the resulting ambient occlusion is incorrect\footnote{Most notably, samples under the surface are counted when they should not be. This means that a flat surface will be darkened, with edges being brighter than their surroundings. It is hard to avoid this without access to surface normals; one possible modification is to clamp the ratio of passing samples to be no larger than 0.5, multiplying the clamped value by 2.}, but the results were deemed by Crytek to be visually pleasing."
- Page 400, in the middle of the last paragraph, instead of "these three normals will form", it should be "these three refracted (or reflected) rays will form". (Ke Xu)
- Page 598, two lines above equation 13.33, it says "1-u+v>=0", but it should say "1-(u+v)>=0". (Ke Xu)
- Page 749, after Equation 16.24, it says "where n=e_1 x e_1". It should read "where n=e_1 x e_2" (Kelly Tweten)
- Page 750, in the pseudo code, line 7: v_0 should be p_0, and on line 13, q should be r. (Charles Cao)
- Page 774, just above Equation 16.53, it says "ax+bx+cx+d=0", but it should be "ax+by+cz+d=0". (Doug Paul)
- Page 799, Equation 17.4: there should be minus signs on both the two first terms, i.e., change from "rn_x" to "-rn_x", and from "rn_y" to "-rn_y". (Yu Wen Wu)
Minor syntax errors
- Page 34, figure 3.3: 6th line in the source code in the figure should read "ks*specular(normal,view,roughness)", that is, add the "ks*". (Darren Ranalli)
- Page 91: we need to clarify on the matrices. The one we show is not from OpenGL 2.1. There is confusion about us using negative near and far values. To make the content correct, we should remove "OpenGL" from "This orthographic transform for OpenGL is shown here." As a note to the authors: this section is in need of a rewrite. (Sugih Jamin)
- Page 177 mentions "BC4/3Dc" three times. It should be "BC5/3Dc" instead. (Milo Yip)
- Page 297, the text four lines under Equation 8.24 says "...uses the angle \theta_i between...", but the text should say "...uses the angle \theta_o between..."
- Page 297, the last sentence in the paragraph just below Equation 8.24 ends with: "...use Equation 7.33, rather than Equation 7.40." It should end "...use Equation 7.33, rather than Equation 7.40 (substituting \theta_o for \theta_i; the two are equal here)."
- Page 565, the sentence at the top of the page ends with "...it shares when it goes to e.". Should be "...it shares when it goes to c." (Roel Reijerse)
- Page 580, four lines below equation 13.3, it starts with "neop^0_0". It should be $\mb p^0_0$, i.e., bold p^0_0. (Fredrik Valdmanis)
- Page 602, figure 13.24: the arrow n_200 should point in the opposite direction. (Ke Xu)
- Page 602, figure 13.24: in the illustration, n_101 should be n_110. Similar fix in the caption is needed: n_010 should be n_110. (Ke Xu)
- Page 764, in the SSE source code at the bottom, line 2: a zero should be added to all three max-functions. E.g., max(c_x-a_x^{max},0) (Anton Kirczenow)
- Page 922, reference [15] should change to: "{\em Proceedings of the IEEE}, vol. 96, no. 5, pp. 779--789, May 2008."
- Page 925, reference [76] should change to: "{\em journal of graphics tools}, vol. 13, no. 1, pp. 16--30, 2008."