Great content. But the book Amazon sent me was dented and they claimed it was a transportation fault. Well, it wasn't me who chose the transporters. I've also had a package come completely soaked once. Good thing it didn't have a book inside.
While this book certainly contains some useful information, it is obscured by the rather appalling presentation style.
The first chapter presents the idea of "literate programming", and mentions that in reading the book, you will read the "full implementation of the pbrt rendering system". Yup, the entire source code for their program is in the book. Is it any wonder that (as the authors note) only two other books have been written like this?
As I see it, the hierarchy of code to books should be like so:
The code should contain the working implementation in its simplest practical form. It should be clear, concise, readable, and easily navigable with modern IDEs and tools. Putting the code in the book destroys that last point, making it harder to understand, and harder to get an idea of structure or intent. In addition the code itself is made less readable (by reducing variable and function name length and removing all vertical spacing) purely for purposes of fitting it in the book.
Comments should explain why the code makes certain choices with regard to implementation. They should describe what code does only where the code must necessarily be unclear. The PBRT source contains reasonable (if minimal) comments. However, in the book, the authors choose to simply restate most of what the code does in the form of text, similar to the worst type of code commenting by beginner programmers.
Theory should not be explained in the code or comments. This is what a book is for. It should work from top down, explaining the background and overall aims of the code, as well as the techniques and algorithms used, going into detail where necessary. In book form, diagrams, graphs and tables can be freely used to convey ideas. While PBRT contains some useful diagrams and passages, it often abandons any attempt to explain and devolves to uniformly copy-pasting and describing all the source code.
To sum up: The PBRT book takes the code and theory, and shoves it all together. This makes it very difficult to read and digest the theory, and harder to understand or navigate the code. Furthermore the actual writing is often very unclear or ambiguous.
If this book omitted the code and focussed on explaining the theory as clearly as possible it could be around a third of the length, but contain more information.
Excellent book I keep going back to over and over again. The chapters usually start with a high-level explanation of the techniques and then it becomes progressively more advanced finishing with references to recent publications. It's probably my favourite book in my physical and digital bookshelves and I can highly recommend it to anyone interested in physically based rendering.