Update: I just uploaded a short video showing my implementation of some of the rendering techniques discussed in the book. Horizon mapping in particular. The shadow cube came from the FGED website. (there are some small lines left in that show the intersections of the cube faces) And the Medieval brick wall albedo/displacement maps came from textures.com. Everything else is generated as described in the book. I didn't have access to the actual geometry for the chandelier so it is conspicuous by its absence. This is rendered using the Vulkan API.
The book continues the building block approach of the first book. Basic material in the first chapters forms the basis for more complex material later in the book. The explanations are generally very good to excellent and it seems like much of the material was chosen as it pertains to a wide range of rendering techniques. Many of the concepts explained in the book transfer well to other rendering tasks. Overall the book is outstanding.
Long version: TLDR
Chapter 5: Color science...have you read those crazy papers on color that promise to clear it all up but then leave you scratching your head trying to figure out what why when? This book has an excellent discussion on the subject that left me wanting the rest of the pieces to the color puzzle, like HDR and tone mapping. Chapter 5 then opens a discussion on gamma....typical but well written. Then it goes on to discuss the various matrix transforms. The transforms discussed here are used over and over throughout the book.
Chapter 6: Perspectives...well written...the math for perspectives is well understood and really isn't changing to much. Use infinite perspectives that are reversed ...sums it all up. The discussion on the limitations of floating point numbers and reversed depth are okay, there are a few websites that do a slightly better job explaining the issue and an nvidia paper that is very good ( and goes into why using infinite projections aren't necessarily a decision based on the accuracy of floating point numbers and the projection matrix..this book doesn't push either way it just states the facts) There is also a lengthy discussion on oblique near planes. Perspectives are a critical part of the book that are used over and over throughout the text. Its worth the effort to read this section thoroughly.
Chapter 7: The controversial chapter. Starts with the "rendering equation" this segue's nicely into the basic physics of light and the quint essential bits needed to understand PBR. This leads into ambient and the most basic physically based diffuse model. So this is where the controversy starts: The book then goes into Phong and Blinn Phong which introduces the half way vector. But chapter 7 stops the lighting discussion here....with an interesting but abbreviated discussion on the brdf but no discussion of Fresnel, normal distributions ect. If it did... i think the entire rest of the book could be devoted to these subjects. If you really want a good intro to this read chapter 9 of Real time rendering 4. Thankfully Chapter 7 instead changes up the discussion with an intro to textures and a discussion on cube maps without all the opengl/dx "stuff". Is this even available anywhere else? Cube maps are used for several techniques in the book so taking the time to understand them is key. Then it goes into tangent space, normal maps and parallax maps. The discussion here is outstanding, how to generate the maps (2d central differences for example are discussed) then use the results for rendering and finally several optimizations are all discussed. The book is worth the money for these little gems alone.
Chapter 8: Spot lights, point lights and directional lights start off the chapter along with several techniques using them in combination with textures and cube maps. That is followed by a very lucid discussion on attenuation functions. My ego took a beating on the next section: Extent optimizations where oblique perspectives reemerge and techniques for light culling are discussed. It isn't mentioned but this section smacks of forward+ rendering. The discussion is very detailed covering every nook and cranny of the math. The next section, shadow maps, breaks down shadow generation for the 3 different kinds of lights introduced at the beginning of the chapter. Perspective generation for rendering the depth buffer and the shaders that use them. Once again the oblique perspective and cube map reemerge along with another in depth discussion on the required math. Stencil shadows are then discussed with a warning that they aren't really used today along with some of the reasons they fell out of favor. The chapter closes with fog. This is another part of the book that gives incredible detail for a basic function but leaves the reader set up for volume rendering techniques. Half space fog is also covered with some impressive sample photo's that make this simple technique very tantalizing.
chapter 9: What one usually expects from a chapter on occlusion are a few blurbs about bounding structures with perhaps a lame discussion on trees/frustum culling. Instead this book essentially retraces all the chapters with an eye for occlusion, presenting algorithms for computing the occlusion areas of mesh structures, spot lights, point lights, shadow volumes, fog extinction, half space fog and yes our ubiquitous frustum. It also covers portal systems and occluders and if that wasn't enough it discusses as well as presents algorithms for polygon clipping and polyhedron clipping. Put on your thinking cap, this is a busy chapter...I need some aspirin before starting chapter 10.
chapter 10: Decals - A straightforward implementation that use many bits and pieces from previous chapters. Billboards - A nice taxonomy of techniques that includes a section on polyboards and trimming. Next the "structure buffer" is discussed which is used in several other sections following it. Intrestingly the structure buffer as discussed is a 64 bit framebuffer containing the dz/dx and dz/dy values in two channels with the camera space z values in the other two channels. Combined with the depth buffer this all smacks of deferred rendering. Then comes volumetric effects and an outstanding into using isotropic light volumes (volumetric light halo's and shafts) whose integrals can be solved analytically. (no ray tracing) Then this is expanded on with ray traced atmospheric shadows. SSAO is hit on, actually the SSAO discussion in this book is the best I have seen. Motion blur and marching cubes are also discussed at length. Along the way several types of buffers are discussed, relevant "blurring" techniques are covered, and physically based atmospheric scattering come up. Another busy chapter!
Exercises: This set of exercises mix it up a little with some actual programming tasks! But many are typical of volume 1.
Chapter 5...straightforward material with straightforward questions. Chapter 6 (perspectives)...do the exercises, if you can't... read chapter 6 again, attempt questions repeat. Chapter 7 questions are similar to those found in volume 1, if you can do those these should be doable as well. Chapter 8 questions combine material from chapter 5 and 6 and 8 nothing terribly mind bending. ( I haven't don these yet, I'm stuck in an infinite loop on chapter 6) Chapter 9 questions are very geometric and expect you to actually do some real geometry. Chapter 10 is basically an exercise in calculus and a little fun with 2D isosurface extraction.
Original review:
When I first started reading the book I was surprised at how basic some of the material seemed, but I have read other material from this author and decided that it would probably be worth the trouble to read subjects I already "know". And I could not have been more right as this is hands down the best book on rendering I have ever come across.
The vast majority of rendering books are so full of external references the subject itself is effectively neutered until you read the references. This book skips the reference parade and helps the reader build a knowledge base step by step. So reading the book front to back is really the only way to go. (it really is worth it, the author clearly went the extra mile writing this book)
Volume two uses the same standard math notation, continues with the same matrix conventions, and doesn't force you to learn any new math so the focus can be on rendering. This is a leg up for readers of volume one but doesn't penalize anyone who hasn't read the first volume yet is familiar with the math.
The approach to all the code in the book is very frugal. But written well enough to easily understand and extended. The vast majority of books that cover the subject of rendering either forgo actual code all together or hand you a code base that is to big to use in a meaningful way. The code from this book won't compile into a specific program instead it can be used as major building blocks in a larger program. Which frankly is the only way to go since having a large code base that nobody understands is a sure fire recipe for disaster. While having no code at all usually makes implementing the ideas presented much more difficult.
Lastly, I just don't understand one of the other reviews here, on the one hand they purchased a book on the fundamentals of rendering but then expect that book to provide them with the golden keys to PBR a vast and complex subject that should not be tackled until after learning the fundamentals.
Wow, you made it the end I will have to share the secret of life segmentation fault core dumped.















