Probably one of the few books that manages to give readers an almost complete tour of the technical components that make up a game engine. Though it doesn't explore each concept in full depth it does give the reader a decent understanding of the subjects themselves and the huge amount of references to specific chapters within the books that make up the length bibilography at the end does give its reader a great way to expand their knowledge on any specific subject that they may want to learn.
The book itself does a great job of gently introducing its reader to complex subjects in a sensible way, however the book itself does mention (in the earlier chapters) that it does require some understanding of programming and the C++ programming language. As someone with a decent chunk of experience with that langauge I found most of the subjects easy to understand as some of the technical bits were subjects that are taught in engineering programmes of universities anyway, however for the other parts some extra studying is helpful and maybe even required to get a proper grasp of the subject being discussed, this can be done through the wealth of resources the book provides as biblography references and GDC presentations and also trying to follow along and build out the examples in the book like the various examples of locking mechanisms for multi threading.
Reading/Usage Guide
The book itself is pretty huge and requires a large time commitment to get through it and it is important to keep the time between reading sessions short as it is super easy to forget where you were at and what was being discussed, it also requires more focus than a novel obviously as the technical subjects being discussed don't really read like a chapter of game of thrones. Besides the reading, looking up the references, trying out the code excerpt yourself and also watching the presentations listed also do eat up a decent chunk of time. Though if you do want to get the most out of this book doing these extra things are almost a must in my opinion.
The Author;
The Author Jason Gregory is a developer at Naughty dog which is a Triple A company with several years of experience under his belt and his experience really shows in some of the more difficult chapters as his ability to cleanly break down complex subjects is something that I really appreciated. I initially sought out this book after getting stuck with learning opengl (a 3d rendering api, basically it puts 3d data onto the screen) as I did not quite understand how I was supposed to put the lego piece of an opengl renderer into the lego model of a game engine and what that even looked like. After reading it I realized I would've made a lot more progress if I read this before going into opengl itself because even though the 3d rendering chapter doesn't give you a step by step instruction set to build out a renderer yourself it does explain to you what it does and how it fits into the game engine itself. Which means you can take the knowledge you've gained from this book and apply it with a book or resource that is api specific and avoid having to learn both how 3d rendering works and the api itself at the same time, which is much more difficult to do. The author also lists out a contact email on his website and does answer questions about the book, something you don’t see very often, and it’s awesome.
Content;
The book starts off with a gentle introduction into what games are and what a game engine is, going over stuff that is super obvious to a gamer but useful for anyone who doesn't really play games all that much. As soon as the first chapter ends the more technical topics start filling up the pages with various "tools of the trade" like version control ides profiling tools and etc. Chapter 3 provides you with a decent reintroduction to how CPP works, it doesn't provide you with a full tutorial on it as its beyond the scope of the book (get used to seeing that sentence) and not really needed as the reader really should know a decent amount of CPP before trying to read this book but the chapter itself is a great summary of important aspects of CPP and low level programming. Chapter 4 brings in parallelism and concurrent programming into the mix and is one of my favorite chapters managing to go over a suprising amount of topics in depth. It is then followed by Chapter 5 which is on Maths for games, which is mostly a retreating of material most engineering students already learn in their university programmes minus maybe quaternions... but still a good chapter regardless.
The book itself is split into three parts with the first part providing foundational knowledge that will be used later on, I'm a huge fan of the first part and have been recommending it to fellow engineers as it does provide a very good overview of a lot of low level concepts that are important for any developer working in the field of gamedev and other fields as well. I should also mention that this review is for the third edition of the book as this version seems to have made significant additions in terms of content.
The second part is called low level engine systems and starts off with engine support systems, which gives a general overview of how a game engine generally opperates, manages memory and etc, this cahpter is followed by Chapter 7 which goes into the file system and the resource manager. This particular chapter helped me gain a better understanding of how the engines I interacted with myself on a daily basis stored and managed their assets (ue3 ue5 and etc). Chapter 8 goes into gameloop and real time simulation and how time works in your game engine, while also building up on the multi threading concepts explored earlier by introducing some cool concepts as well.
This aspect is present in most of the book as each chapter seems to somehow build on the previous which was surpsing as most of the components of game engines are techincally very different to each other but must work in tandem to produce the visuals on the screen.
Chapter 9 and 10 are the last two chapters in the second portion of the book, the first going into human interface devices, i.e. the stuff you use to interact with your game. and tools for debugging and development. Chapter 9 does sort of date the book as it still mentions the ps4 wii and ps3 in the array of controllers it lists but most of the info provided is still valid today. Chapter 10 is a great way to end the second portion of the book as it provides some pretty useful examples for alternatives to printf debugging and various visiualizations and menus you could build out to help debug your game. One of the examples being drawing a line from one point to the next to help gain an understanding of what is going on with a specific game object. This was a tool I had underused up until the point I read it and now use a lot more often.
The third part of the book is up next and is arguably the most technical portion of the book as it goes into some of the more complicated components of a game engine; with chapter 11 going into rendering in a mostly api agnostic way to help you gain an understanding of how 3d images are produced on screen, chapter 12 being animation systems which was super interesting to read for me as I had very little knowledge of how animations worked in a game engine, and finally ends off with collision and audio with Chapters 13 and 14, These two are probably the two most difficult chapters in the book as the collision one will require you to re-remeber physics 101 and some analytical math just a tiny bit to get a good grasp of the subjects being discussed. The audio chapter will require you to remember some of your signal processing classes and other neat concepts like signal convolution.
Both chapters do provide you with a very good overview of their respective subjects and the physics chapter specifically has helped me understand some of the jank that is present in unreal engine 3.
Finally we get the 4th part of the book, with the 5th part just going over stuff the book doesn't cover. The 4th part has two main chapters, which tie a neat bow on the whole discussion, bringing together the concepts introduced earlier and dragging them into the context of the gameplay objects themselves and out of the world of the low level systems we had been discussing earlier. This chapter is where I had most of my lightbulb moments as the lego problem I mentioned earlier started to get resolved.Introduction to Gameplay systems and runtime gameplay foundaton systems are the two chapters of this book and they go over what makes up your gameworld, game objects, your editor,events and how they are handled and how all of them are created in a data driven manner. The chapters end with a general overview of scripting which is followed by the conclusion going into what topcis haven't been covered in this edition and of course a congratulatory message in the end.
Not in this edition;
The book really does give you a great overview of how game engines work and how to make them, and when you reach page 1159 which is where the conclusion portion currently starts you might feel like we didn't really miss anything important except for of course Multiplayer networking and AI.
However this portion of the book does go into a few little topics that are not present and in my opinion not really required to be present in the book as they're not really related to game engine architecture as deeply as the other topics that are covered; namely camera systems player and mechanics/gameplay systems which are the two topics besides the video player, ai and multiplayer that this part mentions. The multiplayer and AI chapter is probably the most important addition that could be made to this book but thankfully the author does provide a very good reference on both these topics (some of the links for the ai are unfortunately broken as they lead to dead websites). As for the video player the author does call back to the earlier chapters to give you some clues about how you could probably build one yourself.
Resources;
This book really needs to be thought about with all of the resources it refers to while reading it as some portions of it really begin to click when you open up one of them and read through it.
In terms of quality of resources provided this book ranks very high as the books that are linked are foundationally important even though they may be old. A common takeaway that formed between me and a couple friends that read this together is that the most important page of this book is the bibliography.
Criticism;
With the book being so solid its hard to come up with portions that I didn't like. The book is written by a Triple A developer with a large chunk of experience so some of the sources that are listed are quite old (from 2002 for some of the GDC talks) and some are really hard to get your hands on. Some of the old gdc talks are not available in video format and require you to download the power point and the audio recording separately from GDC's website which means you have to somehow follow along with the slides by listening to the audio which is going to be difficult to do. Thankfully most of the sources are more recent so this is only the case for very few of them.
In addition some aspects of the 4th part of the book could be beefed up like bringing in the topic of entity component systems into the mix and how they could be used in gamedev. The topic of ECS specifically would be really good to cover as I've yet to find a really solid source on it.
Though these are still minor negatives in an absolutely rock solid book that is a must read for all gamedev engineers and maybe even software engineers.
Conclusion;
All in all, this book was an absolute pleasure to read and I'm so happy to have read it, and I'll be grabbing the next edition as soon as it comes out as the writing style of the author lightens the load of learning a complex topic such as game engines.