Real-Time Rendering Corrigenda

What follows are corrections for the book Real-Time Rendering (1st, 2nd, 3rd, and 4th editions), by Tomas Akenine-Möller, Eric Haines, Naty Hoffman (3rd and 4th), Angelo Pesce (4th), Michał Iwanicki (4th), and Sébastien Hillaire (4th).

Corrigenda for the 4th edition

Significant errors:

  • Page 8: change "that 0 < atan2(y,x) < 2pi" to "that -pi < atan2(y,x) < pi".
  • Page 14: change "superscalar" to "multi-core".
  • Pages 16 through 26: change "unit cube" in numerous places, since the cube is 2x2x2, not 1x1x1. What to change it to, I'm not sure. The phrase "canonical view volume" is what this phrase stands for. Maybe "canonical cube" or we could dub it the "standard cube."(This error has been in all four editions, and is one that early versions of the OpenGL Red Book also makes.)*
  • Page 67: There is a sign error in the view vector, which causes a number of rewrites. Change "(c-l) / || c-l ||" to "(l-c) / || l-c ||". Change "r = -(v x u') / || v x u' ||" to "r = (v x u') / || v x u' ||", i.e., remove the minus sign. Change "u = v x r" to "u = r x v". Change "and $\mb v$ with $(0,0,1)$" to "and $\mb v$ with $(0,0,-1)$". In the left matrix that follows, change "v_x & v_y & v_z & 0" to "-v_x & -v_y & -v_z & 0". In the right matrix, change "v_x & v_y & v_z & -\mb t\cdot\mb v" to "-v_x & -v_y & -v_z & \mb t\cdot\mb v".\
  • Page 136: Five lines from the bottom, "the width of the low-pass filter is increased" to "the sampling rate of the low pass filter is decreased". Similarly, four lines from the bottom, "As shown in the figure, the filter width... original sampling rate." should simply read "As shown in the figure, the resampling rate is set to half the original sampling rate."
  • Page 137: Figure 5.23, change the "On the right,..." sentence to, "On the right, the sampling rate is halved and the sinc filter is scaled horizontally by a factor of two."
  • Page 153: Equation 5.26, the resulting color c_0 should be divided by a_0 to compensate for the alpha coverage. See this page.
  • Page 204: "one can show that 1.5 texels out of 4 will survive" - this should be "... 2 texels out of 4 ...".
  • Page 214: Equation 6.16, the second component of the normal should be "h_y", not "h_x".
  • Page 242: "by slicing it parallel to the view direction" to "by slicing it perpendicular to the view direction".
  • Page 251: Equation 7.6, the denominator "d_r" should be "d_o".
  • Page 256: "Called an exponential shadow map (ESM) or exponential variance shadow map (EVSM)" - remove "or exponential variance shadow map (EVSM)".
  • Page 256: "compares this new approach with ESM", change to "compares this new approach with another method, the exponential variance shadow map (EVSM)".
  • Page 381: In the footnote, remove the parenthetical "(where the distance is taken from the light surface, not its center)" after "Note that while, for spherical lights, the falloff does take the usual inverse square distance formulation". The distance to the center is used to compute the lighting for a sphere. For derivations, see this technical report, "Area Light Sources for Real-Time Graphics" by John M. Snyder.
  • Page 407: before Equation 10.30, change "longitude, varies from 0 to 2pi radians" to "longitude, varies from -pi to pi radians".
  • Page 429: "Figure 10.43 shows how an irradiance map -derived directly compares to one synthesized by the nine-term function." to "See Figure 10.45 for a comparison of an irradiance map derived by integration with one expressed by a nine-term spherical harmonic function."
  • Page 476: "Hu [780] describes how this data can be compressed further." [780] is the wrong reference, this sentence should reference "Lightmap Compression in Halo 3", Yaohua Hu, GDC 2008 (which is missing from the book's bibliography). Slides here.
  • Page 592: Figure 14.3, "an opaque surface S is shown in orange" should be "... in purple."
  • Page 727: "the right tangent at the join has to be twice as long as the left tangent." to "the right difference vector between the control points at the join has to be twice as long as the left difference vector between the control points."
  • Page 733: "square function" to "box function".
  • Page 733: "is created by integrating $\beta_0(t)$" to "is created by convolving $\beta_0(t)$ with $\beta_0(t)$", and "is created by integrating $\beta_1(t)$" to "is created by convolving $\beta_1(t)$ with $\beta_0(t)$".
  • Page 751: Equation 17.56, the expression should be divided by "2 \epsilon".
  • Page 752: Equation 17.57, the last part on the second line should change sign to be negative, i.e., "- r_b h (1 - h)".
  • Page 767 and 777: "The normal is then found as the cross product between those vectors." to "... between these." (tangent patches)
  • Page 834: change "<" to ">" on the right side of Equations 19.2 and 19.3.
  • Page 862: change "(v-c)" to "(c-v)" in Equation 19.6 and four lines up from it in the text.
  • Page 1092: Reference 793, these course notes are no longer online, so this reference should be replaced by reference 903, Kirk, David, and Wen-Mei Hwu, Programming Massively Parallel Processors: A Hands-on Approach, Morgan-Kaufmann, 2016
    (see Google Book excerpt here).
  • Page 1133: Reference 1580, the author of these slides should be Eitan Grinspun; Peter Schröder ran the course. (Not fixed in any printing, as the reference order then needs to be changed.)*

Minor errors:

  • Page 21: The end of sentence "where $d$ is the discrete (integer) index of the pixel and $c$ is the continuous (floating point) value within the pixel" should have the reference "~\cite{Heckbert90a}." - this is reference #692, "What Are the Coordinates of a Pixel?"
  • Page 22: in Figure 2.8 it says "pixel processing and merging" in the caption, but should say "pixel shading and merging" in order to match the functional stage name.
  • Page 72: "we have a gimbal lock (Section 4.2.2)," - self-reference; remove entire phrase.
  • Page 77: "from the multiplication seen in Equation 4.3.1" should be "... Equation 4.32".
  • Page 100: "and the constants d and f" to "and the constants d and e", with "e" being derived from n and f, as shown further on.
  • Page 108: last sentence in Figure 5.4, "the light and view vectors" should be "the light and surface normal vectors."
  • Page 111: below equation 5.12, "the Unreal game engine uses \epsilon = 1 cm", the unit should be "1 cm^2".
  • Page 128: "likely to have lower register occupancy" to "likely to have lower register usage".
  • Page 131: "goal of this sampling process is" - unexpected line break.
  • Page 144: Figure 5.28, "The green square ... and the red squares" - change squares to dots.
  • Page 145: "Interleaved samplingindexsampling!interleaved" - typographical error.
  • Page 160: "multiplied by the stored alpha before being display" - should be "displayed".
  • Page 265: "We have avoiding" to "We have avoided".
  • Page 239: "depth layer between the occlude and receiver" - missing letter, change to "occluder".
  • Page 247: "function of what proportion of the light's area" - change "proportion" to "portion".
  • Page 333: "is the {\em distribution of visible normals}" to "is related to the {\em distribution of visible normals}".
  • Page 351: "Equations 9.62 and 9.63 result in a uniform distribution of" to "Equation 9.62 results in a uniform distribution of".
  • Page 494: "diffuse and reflective surfaces" - "reflective" to "specular".
  • Page 615: "used to stored" - should be "store".
  • Page 616: "simulated using participating media" to "represented as participating media".
  • Page 785: RenderDoc, "Windows debugger" to "Windows, Linux, and Android debugger".
  • Page 819: "Construction time of a spatial data structure can be expensive" to "... can be long".
  • Page 820: "children nodes" to "child nodes".
  • Page 823: "or games like DOOM (2016), back when there was no hardware z-buffer" - remove "(2016)" ;-)
  • Page 830: "not considered to contribute" to "considered to not contribute".
  • Page 910: "Clarberg et al. [271] present hardware extensions..." The rest of this paragraph should follow the next paragraph, "Andersson et al.", (as a separate paragraph), instead of preceding it.
  • Page 970: nine lines down, "curves!Bézier" should not be visible; it was a poorly-formatted index entry.
  • Page 999: Figure 23.5 - replace angle "a" with "\alpha", to match the text that follows.
  • Page 1054: Reference 68, a new edition of this book has appeared, and the chapter is now Chapter 35. The editors and full title are: Dinesh P. Mehta and Sartaj Sahni, eds., Handbook of Data Structures and Applications, Second Edition, Chapman and Hall/CRC Press, 2018.
  • Page 1061: Reference 199, "The Art and Science of Digital Compositing" is now in a second edition, 2008.
  • Page 1074: Reference 458, "Curves and Surfaces for Computer Aided Geometric Design---A Practical Guide," is now in its Fifth Edition, Morgan-Kaufmann, 2002.
  • Page 1074: Reference 461, "Practical Linear Algebra: A Geometry Toolbox," is now in its Third Edition, A K Peters/CRC Press, 2013.
  • Page 1098: Reference 910, all the text for this reference after "Cited on p. 979" should be deleted.
  • Page 1100: Reference 941, the second author's last name should be "Akenine-Möller" (oh, the irony).
  • Pages 1100-1101: References 952 and 957-961, The second author's first name should be "S\'{e}bastien" not "tian".
  • Page 1112: Reference 1172, the "Computer Graphics Archive" has moved to http://casual-effects.com/data.
  • Page 1117: Reference 1259, the book is "GPU Pro 7" (not "5"), 2016, and the page numbers should be 219--229, not 219--230. Also, very minor error, the title "Real-Time BC6H Compression on GPU" should be in quotes, not italicized.
  • Page 1122: Reference 1358, the first author's first name should be "Anjul" not "Anuj".
  • Page 1133: Reference 1575, the last author's last name should be "Froehlich" not "Fro".
  • Page 1144: Reference 1787, the first author's last name should be "Tropp" not "Trop".
  • Page 1146: Reference 1829, change "Johnsson" to "Johnson".

Very minor errors (small readability errors, probably not worth your time correcting in your own copy):

  • Page xiv: the phrase "who helped us along the way" is repeated; replace the second instance with "involved", i.e. "about everyone involved". Michael Drobot is thanked twice, and Wolfgang Engel's name was slightly out of order.
  • Page 3: "And after" to simply "After".
  • Page 18: "These are in fact homogeneous coordinates" to the stronger "These are homogeneous coordinates".
  • Page 31: "execution by some number GPU shader cores" to "... some number of GPU...".
  • Page 94: Figure 4.18, the "z" axis labels should all be italicized, "z".
  • Pages 102, 159, 404, 420, 421, 452, 512, 767: avoid "et al.'s" by rewording.
  • Page 140 (3rd printing): Figure 5.24, "per pixel, and as can be seen, two of" to "per pixel. Two of".
  • Page 145: "One solution is use a different sampling pattern at each pixel" to "One solution is to use..."
  • Page 237: Figure 7.12 could include a reference to Christoph Peters' page http://momentsingraphics.de/?p=175.*
  • Page 397: "(see [1838]):" should be "[1838]:", as we never consider a citation something we point at.
  • Page 485: "an unique" to "a unique".
  • Page 473: Figure 11.21's hemisphere is squashed, it should be truly a round hemisphere.*
  • Page 505: Figure 11.39, extend the black ground plane line to the right so it perfectly matches the blue rectangle below.
  • Page 616: "featuring high-scattering coefficients" - remove hyphen.
  • Page 626: Figure 14.35, image should be centered (missing "\centerline").
  • Page 658: Figure 15.8, the two triangles should be aligned horizontally.
  • Page 704: Figure 16.15, the line of text beginning "The triangles could" should be shifted to the left, to match the left margin of the other lines of text.
  • Page 749: Figure 17.32 could include a reference to Tamy Boubekeur's page https://perso.telecom-paristech.fr/boubek/tessellation/.*
  • Page 756 (3rd printing): Figure 17.38, "As can be seen, the" to "The".
  • Page 767: "over the surface The same" - add a period after "surface".
  • Page 767 and 777: "The normal is then found as the cross product..." - these next few sentences are identical between these pages. The later one should be revised. Not touched for pagination reasons.*
  • Page 772 (3rd printing): Figure 17.58, "As can be seen in" to "As seen in".
  • Page 783 (3rd printing): Figure 17.70, "As can be seen, there" to "There".
  • Page 785: "Xcode on OSX" to "Xcode on macOS", since Apple's renamed things.
  • Page 843: Figure 19.21 could probably just be pseudocode in the text instead of a figure, as done in the Intersection Test Methods chapter, for example.*
  • Page 844 (3rd printing): Figure 19.20, replace "As can be seen, the" to simple "The".
  • Page 865: "time-critical rendering.." - remove a period.
  • Page 874: Figure 19.46 could include a reference to Losasso et al. or the program itself.*
  • Page 889: Figure 20.3, "As can be seen, anything" to "Any values".
  • Page 915: Figure 21.1, the first two images are the tiniest bit from the top edge, the last the tiniest bit from the bottom edge.
  • Page 931: "Our eyes have a field of view for binocular vision (where both eyes can see the same object) of 114 horizontal degrees." to "Our eyes have a horizontal field of view for binocular vision (where both eyes can see the same object) of 114 degrees."
  • Page 985: "frustum sides planes" to "frustum sides' planes".
  • Page 1021: Figure 23.17, the right edge of the figure is clipped.
  • Page 1032: Figure 23.25, the two top bars should be widened on the left a tiny bit, so that they align with the left edges of the mem. controllers (as they are on the right).
  • Page 1051: Reference 15, add pages "pp.~145-149".
  • Page 1058: Reference 141, final "s" missing from title, should read: "Two-Part Texture Mappings".
  • Page 1061: Reference 202, title capitalization should be "Shadowing by non-Gaussian random surfaces".
  • Page 1063: Reference 233, the title should be followed by a double-quote, not a single quote.
  • Page 1063: Reference 235, the title should be followed by a double-quote, not a single quote.
  • Page 1065: Reference 285, the month should be Aug., not July.
  • Page 1066: Reference 292, this is the Third Edition.
  • Page 1070: Reference 375, the title should be followed by a double-quote, not a single quote.
  • Page 1079: Reference 560, title "in" to "of", "Water Technology of Uncharted".
  • Page 1083: Reference 622, "journals" to "journal".
  • Page 1088: Reference 773, the title should be preceded by a double-quote, not a single quote.
  • Page 1095: Reference 846, add page numbers, "pp.~143--150".
  • Page 1096: Reference 880, remove "in" from "in Rendering Techniques", and page numbers should be "pp.~269--276".
  • Page 1098: Reference 901, the title word "DN-10000VS" should have no hyphen, "DN10000VS".
  • Page 1099: Reference 928, spell out authors, "Kopta, Daniel, Thiago Ize, Josef Spjut, Erik Brunvand, Al Davis, and Andrew Kensler," and remove "ACM," from after the title.
  • Page 1101: Reference 963, title has three left apostrophes, remove one.
  • Page 1108: Reference 1096, spell out authors, "MacDonald, J. David, and Kellogg S. Booth," change number of issue from "6" to "3".
  • Page 1115: Reference 1224, remove space between left double-quote and "Stylization" in title.
  • Page 1118: Reference 1274, "Nalu" should not be in quotes.
  • Page 1126: Reference 1443, "Smitsc" should be "Smits".
  • Page 1126: Reference 1450, "Ray Tracing" should be "raytracing" (yes, one word, lowercase).
  • Page 1132: Reference 1563, add page numbers "pp.~2:1--2:12" before date.
  • Page 1135: Reference 1619, "journals" to "journal".
  • Page 1141: Reference 1723, title's capitalization and punctuation should be "Radiance Transfer Biclustering for Real-time All-frequency Bi-scale Rendering".
  • Page 1145: Reference 1815, Veach's PhD title should be italicized, not in double-quotes.
  • Page 1148: Reference 1861, the title should be followed by a double-quote, not a single quote.
  • Page 1152: Reference 1935, the title has (inconsistent) capitalization, as follows: "Adaptive Real-Time Level-of-detail-based Rendering for Polygonal Objects".
  • Page 1152: Reference 1947, add "article no.~4," before date.
  • Page 1153: Reference 1950, the title has (inconsistent) capitalization, and should be "Ray Tracing Dynamic Scenes using Selective Restructuring"; the conference should be "{\em EGSR Proceedings of the 18th Eurographics Conference on Rendering Techniques}"
  • Page 1156: atan2 reference should include page 407.

Errors followed by a "*" have not been fixed internally yet and are likely to be deferred until a future fifth edition (no, none is planned right now), as they could affect pagination. Otherwise, fixes are in place in online materials (e.g., references and figures) and will be in future printings, as possible.

Thanks to Evgenii Golubev, Alex Yang, Doug Richardson, Mick Charles Beaver, Yuhao Zhu, Feiyun Wang, Niedap, Lai Guangze, Zixin Zhang, Francisco Moyano, Jeesun Kim, and others for reporting errors.

Corrigenda for the 3rd edition

Corrigenda for the 2nd edition

The second edition, 2nd print is recognized, for example, by that Steve Morein and David Wu are included in the acknowledgments on page xiii. Also, if you have the 1st print, you need to look at both the list for the 1st print and for the 2nd.

Corrigenda for the 1st edition

One way to identify the second printing: go to the first page of the Preface; if the web site listed near the bottom of the page is "http://www.realtimerendering.com," then this copy is from the second printing.