So, as of this writing, I have read all 5 books available on Amazon on the Vulkan API and I would say that Vulkan Cookbook is one of the better resources out there. The format of the book is similar to other “cookbooks” you may have seen, with each recipe essentially describing one technique in a stand-alone fashion. Meaning the steps for each one will list fundamentals, like creating a logical device and all the other prerequisites, so you can easily refer back to one chapter when it’s time to implement a particular feature. I would personally recommend reading the text from front-to-back, as I think it’s a better way to learn, but you could certainly jump around and still not miss much (assuming you already have some understanding of Vulkan). Author Pawel Lapinski does a great job of showing real code for each recipe and only shows what is actually necessary for a technique. Unlike some other books, this isn’t a dry listing of the API documentation, rather the author shows practical usage of the API with some brief explanation. For this type of text, I think this works great and I imagine it would be very helpful to refer back to when it comes time to implement into your project.

Among the chapters, Lapinski covers: instances and devices, image presentation, command buffers and synchronization, resources and memory, descriptor sets, render passes and framebuffers, shaders, graphics and compute pipelines, command recording and drawing, along with some additional chapters at the end for more general graphics programming concepts like loading textures and 3d models, lighting and shadowing, and cubemapping. Each chapter itself is then broken down into smaller recipes, that could be something like “enumerating available physical devices” to “submitting a command buffer to a queue”. This is really quite a good mix of topics, and, at 700 pages, adequate coverage is given to the most commonly used parts of the Vulkan API. Having already worked through some tutorials online, and read a few other books on Vulkan, most of the topics here were things I had some familiarity toward already, but I still found the reading helpful.

Due to the tactical nature of the text, I would recommend the book for more intermediate to advanced programmers. While the author does a great job of explaining the specific steps needed to do particular actions in Vulkan, it may be helpful to at least understand some of the big picture before diving in here. I might even say this is the best book on the market today for Vulkan, though I’d probably also recommend reading it after one of the others available. It may be helpful to start with a Hello World type app in Vulkan, in which case you could first follow the awesome tutorial over at vulkan-tutorial.com, or get Kenwright’s Vulkan Graphics API: in 20 Minutes, which was a little rough but still a cheap and quick way to obtain an overview of the API. For beginners, or maybe people that want to start at a more basic level, Introduction to Computer Graphics and the Vulkan API (also by Kenwright) may be a more comfortable spot to jump in at. And the other books out there were good in their own right, though some of them didn’t move past simple function/structure documentation.

One thing I really wish is that someone could make a Vulkan book on the level of Frank Luna’s DirectX series. Luna is able to show many practical graphics programming techniques in one book, and in the end you’ll have a handful of pretty sweet demos to showcase. Though Kenwright attempts this, I still haven’t seen this really accomplished yet for Vulkan. While the end chapters of Vulkan Cookbook do dip into this territory with shadow mapping and post processing, it would be nice to see an entire book written like this. However, given that Vulkan is a relatively new API, it’s probably more useful to start with the basics, and hope that competent readers can port techniques from other APIs once they have a feeling for how things work.

Keep in mind, Vulkan is an advanced and complex topic, and a single book won’t teach you everything you need to know. While many of the Vulkan books out today have seemed to release to mixed reviews, I feel that all of them have been helpful. Even reading the same topics explained by different authors can help with knowledge understanding and retention. And there are also some unique things in each book, so I would fully recommend reading them all if you’re really serious about getting into Vulkan. I realize there are some advanced coders that can study the documentation and hit the ground running, but I find the “guided tour” offered from books to be more conducive to learning for me personally. Your opinion my differ, but I’d have to say that you can’t really go wrong with Vulkan Cookbook by Pawel Lapinski. Recommended.

Introduction to Computer Graphics and the Vulkan API by Kenwright is exactly what the title implies, an approachable introduction to the Vulkan API and graphics programming in general. This book succeeds in the places where some other books on the market fail, by showing straight-forward code examples, explaining graphics concepts simply, and not assuming you are already a graphics guru. While the quality of the text may fall short of Frank Luna’s work, this is definitely aspiring to be that kind of book, in stark contrast to some other texts which just list structure declarations and barely move past what you find in the API documentation. This is very much a practical book, and lots of source code is shown, not only for initializing Vulkan but also including the full shader code for each example. For beginners to Vulkan, I’d definitely say this is the first book to buy.

So what exactly does Kenwright’s intro book cover? The text starts with some brief background into Vulkan (though it strangely omits mentioning AMD’s contribution with Mantle), then it goes into basic 3d math with vectors, matrices, and quaternions. It explains different transformation spaces, initializing Vulkan, texturing, lighting, geometry shaders, cube maps, fog, normal and parallax mapping, instancing, tessellation, and caps off the book with shadowing. Really most of the fundamental topics are covered, and the explanations are straight-forward and digestible for a beginner (well, at least as much as something as complex as the Vulkan API in C++ can be). The math sections were more of a cursory overview, this is certainly not a math book, so it will be a light refresher for most and an adequate introduction for a beginner. The sections on texturing and lighting were also pretty basic but solid as an intro. I especially liked the geometry shader chapter, as not a lot of books cover this and I found the code examples enlightening. The chapter on tessellation was also nice, something I haven’t seen in other Vulkan books. Some of the technique chapters were short, like with cube maps and fog, but it explained the concepts decently and, as an introduction book, this was enough. Overall a solid mix of topics and with lots of code shown this is a great example text.

While I do usually prefer to read my books digitally, this item was only available as a paperback. That said, the quality of the book is great. Every page is printed in full color, and even the source code has syntax coloring, which greatly helps the readability. It’s also only 220 pages, so a fairly short read, but still managed to cover the basics. Of course, at that length, it’s not as in-depth with the actual Vulkan API spec as some of the other books on the market. It shows only enough to illustrate the concepts and get the code running. This is actually fine, as lots of the feedback of the existing material was that it was dry. This book certainly feels more engaging than what I’ve seen so far.

Kenwright did a great job with this book, and I’d certainly recommend it (especially for people just getting started with graphics programming in Vulkan). His previous Vulkan book, Vulkan Graphics API: in 20 Minutes, also came recommended by me but this one is way better. I can tell there was an editor here, or at least more effort given, as the text reads much better with proper use of the English language. However, I did find some careless mistakes in the text, such as saying a vector’s w component should be 1 (it’s really 0), or explaining a technique to set depth writing off, but then showing code with it set to true. I’m not going to penalize the author too hard here and, to be fair, the majority of programming books typically print with some mistakes. However, it does make me weary of attempting to copy any of the code line for line without more research. As I’ve mentioned before, I don’t type in or test code in books, so I can’t verify if they work. I use the books as concept references and when it comes to coding I will visit more trusted sites to get math equations, or consult the API docs. Not the end of the world, but it could confuse a novice unnecessarily.

All-in-all I would say this is a solid book. People seemed to want a more practical text on Vulkan, and I think this fits the bill. It’s certainly marketed as an introduction text, and the title holds true. The audience here is likely people with some C++ experience, but maybe not much knowledge of graphics programming. Or people with some graphics experience in other APIs, like OpenGL or DirectX, that want to get involved with Vulkan. I think it’s important to have beginner-friendly books, and this is a worthy addition to the library. Graphics experts may find the book to be too much at the novice level, but it could still be useful as a light introduction. Especially if you are deciding if you want to use Vulkan in your project and aren’t sure, I think the practical nature of this book is more helpful than some of the more technical resources available. I know some people suggest beginners start with OpenGL before delving into lower-level APIs, but I disagree. Learning Vulkan gives you a more accurate understanding of how graphics processing works, and the API will only become more ubiquitous in the coming years. While setting up Vulkan initially can be daunting, I think it’s a worthwhile excursion, and this is the best introduction I’ve seen so far. Recommended.

I’ll cut to the chase: this book is one of the best introductions I’ve seen to the C++ language. I’ve read probably at least a dozen C++ books and I would say this would be the best place to start if you’ve never used C++ or even as your first programming book. There are some great C++ resources out there, but much of the material can be too advanced for a beginner and will probably scare you off before you get anywhere. With Beginning C++ Through Game Programming, Michael Dawson builds your knowledge from the ground up. The explanations are clear and easy to understand and no previous experience is required. You don’t even have to be a gamer to get value here as most of the games explored in the text are simple things like hangman or tic-tac-toe that anyone can understand.

Dawson walks you through 10 chapters, each diving into a different aspect of the C++ language, starting simply and working up to more difficult topics. The chapter breakdown includes: types and variables, branching, loops, the STL, functions, references, pointers, classes, dynamic memory, and object-oriented programming. These topics really are the most fundamental building blocks of C++, and many are applicable to programming in any language.  Lots of source code is shown, and the author explains each step along the way with an impressive amount of clarity. Even though I’d consider myself an intermediate to advanced programmer, I still found some things useful in this book, particularly the usage of the const keyword which was always somewhat confusing to me. All the examples are simple command-line programs, so you don’t need any special libraries, just an IDE that can compile C++ code, such as Visual Studio which has a free version on Windows. If you use a different operating system, you can just get whatever free IDE you want for your platform as this book uses all standard C++ code so any compiler should work.

What I have found reading other books is that they may explain concepts well, and even show code, but sometimes either they don’t give enough context on how real usage would look or the examples are so complex as to be confusing for a novice. In this text, the author is clearly aiming to teach beginners and explains everything in concise terms without becoming too complex. In each chapter, there is another full example game shown, which could be typed into a computer and run. I did not actually test any of the code, as I’d rather just learn from reading, but I didn’t find any obvious errors. Each of these games are fairly straight-forward, with apps like guess my number, hangman, madlib, tic-tac-toe, etc. My one complaint is that the final chapter covers a full blackjack game, and this was much more complicated than the previous chapters and may be a bit too advanced. However, it still may be helpful to some to see what a more involved program might look like. While the title of the book is about “game programming” I wouldn’t say you need to be a gamer to gain insight here. Though having some interest or familiarly with games can help, I’d still recommend this book for anyone interested in C++ or just wanting to learn programming in general. The author manages to cover the most key aspects of the language without burdening beginners with the more arcane constructs that will likely confuse you.

Keep in mind, C++ is a beast of a language, and one book will not make you a pro overnight. After reading this title, you will still likely need other resources before you are ready to build your own apps or games. With gaming in particular, you will likely also need to learn how to use libraries, various APIs, etc. and none of that is covered here. So think of this as merely a light introduction, which will build a foundation your can bring to other more complex books. That said, I really can’t imagine a better book for people wanting to get started with programming in C++. This would work as a great first coding book for teenagers or even younger. I’m not sure there is a better beginning C++ book out there, and this is highly recommended.

Although the Vulkan API has been available for about a year now, it was just at the tail end of 2016 that we started to see books published on the topic. For me personally, I prefer learning from books over just reading documentation, and Vulkan Programming Guide is a fine effort. At 480 pages, it is a comfortable length, and manages to hit on a lot of major elements in the API. It is by no means comprehensive, as most of the coverage just shows function or structure prototypes (something you can likely find in the online docs) but there is at least some explanation of what each function does. I found useful the explanation of device limits (such as the maximum frame buffer size, number of bytes in a push constant, etc.) and how to query them, as I have not seen this touched in other texts. Sellers also does a great job of introducing synchronization concepts in one of the later chapters. This is absolutely essential for proper multi-threading, and I have not seen this in other books (at this depth). There is some discussion here and there to performance characteristics. Maybe not enough, but the author does attempt to give guidance on how expensive a particular call could be, or when it might hurt performance. Overall the book was solid. This will be my 3rd Vulkan book, along with a number of tutorials, and I felt there was relevant info gleaned from the text.

Vulkan Programming Guide has 13 chapters, each focusing on a key aspect of the Vulkan API. Inside these chapters are: a high-level overview of Vulkan itself, memory and resources, queues and commands, memory barriers and buffers, presentation, shaders and pipelines, graphics pipelines, drawing, geometry processing, fragment processing, synchronization, queries, and multipass rendering. Not a bad mix of topics. I don’t think anything major was left out, however, some of the coverage could be more fleshed out. While there was great detail on some things. For example, showing SPIR-V disassembly code, other topics were only given a cursory look. In particular, there is very little source code in the book. While the author goes to great lengths to show structure and function prototypes, there isn’t a whole lot of code showing actual usage. While it’s debatable if this is necessary, I would find more code examples to be useful. To be fair, the code that is shown looks good, there just needs to be more it.

All in all, I feel the book is solid and, considering Vulkan is relatively new and there aren’t that many texts available, it’s not a bad choice. One thing to note: I would recommend you start with Learning Vulkan by Parminder Singh. Learning Vulkan is a much more approachable resource, and I found it a little easier to follow. While Vulkan Programming Guide is more in-depth in many cases (in terms of the API spec itself), Learning Vulkan has a lot more C++ sample code, and may be more useful in that respect. In any case, I would buy both books because there are unique advantages in each one. Could Vulkan Programming Guide be improved? Sure. But it’s not a bad book and if you are getting into learning Vulkan today you’ll really need any and every resource you can get your hands on, and this should certainly be on your shelf.

Learning Vulkan by Parminder Singh is an excellent foray into the Vulkan graphics API and quite a competent book. The text is a reasonable 466 pages, and packs a lot in there. Singh covers all the basics of using Vulkan and goes into great detail at each step of the way. Not only is there actual C++ code shown (a lot of it), but he explains each API call and what objects to pass it, a breakdown of each object structure and what it does, what’s valid (or invalid) for data you can put in, and so forth. I have not read the official Vulkan Programming Guide yet (that’s coming next) so I’m not able to compare them here. However, this book is an absolute treasure trove of information, and presented with clear context, not just a copy and paste of API docs.

While the book is not particularly long, the author does manage to cover a good amount of ground. Of the topics included are: getting started with the LunarG SDK, initializing the API, debugging, command buffers and memory management, allocating image resources and the swapchain, buffers, render passes, framebuffers, working with SPIR-V shaders, pipelines and pipeline state management, descriptors and push constants, and finally drawing a textured polygon. I’m still getting acquainted with Vulkan myself, but this does seem to touch on all the fundamental topics to get started with the API. It really seems like Parminder Singh knows what he is talking about and feel I learned a lot finishing this text.

One thing to keep in mind, this is not really a book about graphics programming techniques, but rather a survey of the API. Meaning, unlike Frank Luna’s DirectX books, you won’t have any cool demos to showcase at the end. Through the whole book you’re basically just working with the initialization of the Vulkan API, though you do end up with a colored triangle and finally a textured cube. This is honestly fine, and just what is needed at this point in the life of Vulkan. Flashy demos are cool, sure, but once you have the fundamentals down, it shouldn’t be hard to apply that knowledge, or port techniques from other APIs.

I will note, however, that I wish there was more discussion into the performance cost or characteristics of parts of the Vulkan API. For example, sometimes there are multiple ways to perform an action (like with uniform buffers or push constants getting data into a shader) and there wasn’t much explanation as to when to do one thing over the other. This is not a huge concern, as there are lots of articles online covering these types of things and it seems the book is there to get you familiar with the concepts and data structures to allow you to do your own research later. Certainly, I still have a lot of questions but I can’t imagine a more thorough book as an introduction to this relatively new API.

Some familiarity with older graphics APIs will probably help, but I don’t think it’s absolutely needed. In my opinion, if you are wanting to learn graphics programming today, you might as well just jump into Vulkan (or DirectX12, if you prefer) as the industry will quickly adopt these new, lower-level APIs and you will be setting yourself up for the future. Do understand, though, that Vulkan is extremely verbose and needs something like 1,000 lines of code just to get a triangle on the screen. So stark beginners may be put off by that complexity. And you should definitely have good working knowledge of C++ before getting into this. With that in mind, however, I think that Learning Vulkan by Parminder Singh is a great place to start to delve into this exciting new world of Vulkan. Well worth reading.

Vulkan Graphics API: in 20 Minutes is a short, no-nonsense, introduction to the Vulkan graphics API. Though the title of the book says “20 minutes,” I believe I spent somewhere between 1 and 2 hours to finish it (though I admittedly read pretty slow). This is the type of book I wish there were more of: something short and sweet as a brief intro to get your feet wet. I feel many programming books can be daunting at 600+ pages, so it’s nice to find something you can complete in one or two sittings.

So what is actually covered in this little book? Basically it shows the basics of how to initialize the Vulkan renderer and draw a triangle on the screen. The author does not use any additional libraries, so it’s only showing the Vulkan API itself and some boilerplate Win32 code for opening a window. Though I had already been reading about Vulkan previously, and didn’t find any new material here, I could see this as a decent first step in learning the API.

To be honest,  Kenwright does not really provide any deep explanation of the concepts presented. It’s basically just showing some of the common function calls and the structure to set things up. You could easily find similar code online (at various sources) for displaying a triangle in Vulkan.  Even so, I still think the text holds value and may be more accessible than some of the larger (and more costly) Vulkan books that do provide more detail. This is sort of something that would be useful if you’ve really never worked with the API before and just want to see how the code looks and if it’s something you’re interested in prior to researching further.

All in all, I can’t really fault  Vulkan Graphics API: in 20 Minutes too much. While there were a couple typos and odd use of the English language, overall the book was concise and coherent. It provided a cursory look at a new, exciting, graphics API and it did with with a meager time and money investment on behalf of the reader. While you can find basically the same material online for free, I still personally enjoy learning from books and think the format may click for some people better. It only really scratches the surface, but as a short “first intro” book it’s not bad.

Essential Mathematics for Games and Interactive Applications by James M. Van Verth and Lars M. Bishop is a quality math book if I ever saw one.  Strangely, the first edition came out in 2004 but the book was kind of off my radar until recently.  This third edition was published in 2015 and seems very current. The authors here do a great job of explaining the material properly. I felt like they created a great foundation for learning these complex ideas and I appreciated the  quality and readability of the code  samples.

The book starts with an overview of computer number representations, and goes into detail with the IEEE 754 floating-point standard. At first I assumed this was unnecessary detail, but actually it’s pretty useful to understand and a good base to build on. They continue with vectors and points, linear transformations and matrices, affine transformations,  orientation (including matrices, Euler angles, axis-angle, and quaternions),  and interpolation (linear and curved). In the next section they transition to more graphic oriented topics such as: viewing and projection, geometry and programmable shading, lighting, rasterization, then a random chapter on… random numbers, and finish off with intersection testing  and rigid-body dynamics.

Just looking at the table of contents is sometimes not enough to get a feel for the quality of the text, so I will reveal  more. The beginning parts are really exactly what you’d expect for a game math book. The basics of vectors, matrices, quaternions, etc. are the bread and butter for a 3D programmer. The coverage here is solid and great for a beginner. Advanced readers  may not find any surprises, but it’s still a good refresher.  The interpolation chapter I found interesting, especially the detail into different types of curves and splines .  This could be immediately useful for coding  a skinned character or animating a camera in a game.  Viewing and projection were given adequate coverage and are essential to anyone wishing to code a graphics engine themselves.  The next chapter was particularly long and explained the programmable shader pipeline to great effect.  The authors explained everything from color representation, vertex attributes, drawing geometry, fixed-function versus programmable, vertex and fragment shaders (aka pixel shaders), and texture mapping. Really a great introduction for anyone wanting to learn to code shaders themselves.  Then they  move onto lighting and go into the basic types (point, spot, directional, and ambient), surface materials, per-vertex and per-fragment lighting, combining with textures, and a few small sections of more advanced topics like normal mapping, physically based lighting, HDR, and deferred shading.

Next up is rasterization, which was an awesome chapter that explained (in epic detail) how rasterizers work which I feel does help when you know what’s going on behind the scenes. I don’t know of many other books that explain this part of the pipeline so well, so this was much appreciated. The random number chapter was also quite informative. It’s easy to just call a function that spits out a number and not actually understand what’s happening.  I found this  portion of the book to be a nice surprise. Intersection testing was covered near the end, and  it was one of the longer chapters. Almost anything you could think of was here: finding distances from lines and points, sphere/ray/plane intersections, axis-aligned bounding boxes (AABBs), swept spheres, object-oriented boxes, triangle intersection, and a simple collision system. Finally the book closes with a chapter on rigid-body dynamics. I actually purchased my copy mostly for the rigid-body material and I felt I learned a few useful things. Of course, it was only one chapter but some of the explanation was better than whole books I’ve read on physics. Certainly it gave me a few things to research further, and I appreciate that.

Overall I would say that  Essential Mathematics for Games and Interactive Applications is an almost flawless textbook. I may be a great place to start for a beginner, and even intermediate to advanced readers may learn a thing or two. Some of the other game math books I recommend I read so long ago it’s hard to make a direct comparison. But this title is certainly up there with the best. I would wholeheartedly recommend.

beginning_math_and_physics

Beginning Math and Physics for Game Programmers by Wendy Stahler is the kind of book I like. The title is straight-forward, and the content actually delivers what it claims. I’ve read a number of game development math books but I find that many of them expect a college level mathematics background, or at least some intermediate knowledge already. Not here. This is a book that is accessible to stark beginners, and I’d even recommend it to high school students.

Stahler’s text covers all the basics for both 3D math and physics. Topics include: points and lines, geometry, trigonometry, vector and matrix math, transformations, unit conversions, motion, Newton’s laws, energy and momentum, collisions, and, finally, rotational motion. Clocking in at around 500 pages, there is enough space to delve into each area with adequate coverage. I found the explanations to be very clear and geared to novices.  The author uses lines like: “The fancy name for moving objects in these directions is translation.” While advanced readers may feel somewhat patronized by the language, I actually think this is a great approach for beginners. 3D programming is not easy, but sometimes the arcane conventions used in more advanced books can be off-putting to people just getting started.

One thing I should note, I don’t typically test code samples or verify the accuracy of formulas while I’m progressing through the text. What I expect from the book is to gain a high-level conceptual understanding of the material in order to better grasp the subject matter. When it comes to the actual programming implementation, I will just use the book as a reference but usually find the formula online on Wikipedia or similar sites. I realize some people expect every code sample to work, but I’m not one of those people. It’s the concepts themselves that are important to learn and once you understand you should be able to know what to search for or even implement the code yourself.

One aspect I appreciated was that most of the concepts started with an explanation first in one dimension, then two, then three.  This was especially helpful as it’s conceptually simple to understand something like motion in only 1 dimension and it gradually builds upon that. Some other books jump straight into higher dimensions right off the bat, and that may be difficult to some without prior knowledge. The author also provides ample diagrams, graphs, charts and sample code. She also makes effort to show unit conversions when needed, and emphasizes differences between easily confused units.

Wendy Stahler’s book is, however, somewhat dated being originally published in 2004. While the core material is still relevant, and hasn’t really changed much in those years, some of the samples are written for antique computer systems. For example, for one demo included on the CD-ROM she recommends that the “minimum system requirements for the program are a 700MHz processor, a graphics card with 8MB of memory, and 64MB of RAM.” Those specs would have been laughable even in 2004, when the book originally came out. However, it is humbling to consider my smart-watch has specs that would put the machine those demos were build for to shame.

Overall I enjoyed the book, even with the caveat the nearly all the material was a refresher for me. If you are already a professional game developer, then there probably won’t be much to learn here. I’ve been kind of on a binge of game math and physics books, so I figured I’d give this a shot. I also like to have material to recommend to people new to game development and I find it interesting to read books of different levels to get a broader perspective. If you are just starting out, this may be a nice resource to get your feet wet before graduating to the more complex, but much better math books out there.

ProgrammingAI

Programming Game AI By Example by Mat Buckland is one of those books that comes highly recommended and was one I had been meaning to read for a long time. In fact, I originally purchased the paperback in 2006 and never got around to reading it. The interesting part is that the book is still very much relevant today and is not dated in the least. Well now maybe some of the engines and middleware have this stuff built in, but the fundamentals I think I still important to understand.

The book starts with a quick primer on math and physics. The basics are explained, like Cartesian coordinates, trigonometry, vectors, coordinate spaces, and some physics. Like most people reading a book of this level, the beginning was a light refresher. However, I’m a big stickler for reading books from cover to cover with no skipping around, so I did not mind a short recap. Next Buckland gets into state-driven design and demonstrates a simple command-line app using the concepts. I found this approach successful, and it was able to show the concepts without complex 2D or 3D math getting in the way.

He followed up with autonomous moving agents, mostly based on steering behaviors. I was already somewhat familiar with steering behaviors, but I found the author’s description and code to be clear and concise and explained the concept better than I’ve seen before. He then applies the previous topics to a simple soccer game. This was a great next step, and really compiled the knowledge being taught into something concrete. In the next chapter, the author went into graphs; what they are, how to use them, and some popular algorithms link Dijkstra and A*. I always wanted to know what A* was, and this book explains it fairly well.

Buckland then devotes a section to cover scripting languages and why they are useful. In this case, he chose Lua (not a bad choice) and explains some basics about the language, how to interface it with C++, and creates a simple finite state machine. This chapter is helpful even if you’re not coding AI and just need a scripting language for your game or engine (provided you like Lua). In fact, a lot of the concepts in this book are generic enough that they can be applied to multiple fields of interest for game developers.

Next, the author creates a simple overhead game framework used in the subsequent examples. Using this framework he then shows practical path planning, goal driven agent behavior, and finishes up with fuzzy logic. Fuzzy logic is another one of those buzzwords that always intrigued me but I never really understood. Buckland concludes with a quite excellent explanation of the concept.

Overall I found this book to be stellar on all accounts. I feel that any game developer could gain insight from this text, even if they aren’t primarily working with AI programming. The scripting coverage could be used in many games, and the algorithms covered are generic enough to apply to different disciplines. While this is the first book I’ve read on AI, I really can’t imagine a better introduction. Highly recommended.

LearningUnreal

Right here is a book with a clearly defined goal and an excellent execution. Learning C++ by Creating Games with UE4 by William Sherif takes you on a journey from being a total blank in C++ to coding some basic features of a 3D game. Even though I have been coding in C++ for years, I still enjoy reading novice level texts as sometimes they can teach you a new way of thinking about familiar problems. For me, it’s also important to have good book recommendations (especially for people starting out), and I actually discovered this book from a member of the Unreal Engine community looking for a review. So here it is.

William Sherif starts the book proper, with how to setup a project using either Visual Studio or XCode. This is actually a great design, and it’s thoughtful to include both operating systems (Linux is not officially supported by Epic yet, so I can’t knock the author on that one). When first starting with C++ programming, probably the hardest thing is not the syntax but understanding how to configure the project and settings in the IDE, so I like that this was covered first. Next Sherif moves onto the basics of programming: variables and memory (numbers and pointers), control flow (if, else, equality and comparison), looping (while and for loops), functions and macros, variable scoping, objects and classes, inheritance, and finishing up with dynamic memory allocation and arrays. Really quite a good foundation for learning C++. I found the explanation to be clear and concise, and the author did a good job of easing the reader into the information. C++ is a huge topic to cover, and there are volumes of text many times this size going deeper into the intricacies of the language. I wouldn’t actually fault the book for this, I think it’s a strength. Some novices may be overwhelmed by C++ if they start with something like Stroustrup’s 1,300 page tome. So I would say this is a great introduction to the language, and a great refresher if you’re coming back after a while.

The second half of the book is focused on Unreal development in particular. The author opens by discussing templates and containers in UE4, including some basic ones like TArray, TSet, TMap and then discussing the STL versions of these and how they differ in Unreal. He follows up with the first real example in the engine: an inventory system (with a UI) and the ability to pickup items in the world. I like this approach as it’s a real tangible task that many games would include. The author then shows how to code NPCs that are able to display a text message to the player. Next, Sherif talks about how to create monsters – basically enemy characters that can chase and attack the player. He closes with adding spell casting (including the code and setup of the particle system).

So this is not a book that will show you “How to Make a Complete AAA Game in 24 Hours” but I don’t think that was the intention. What the author does is introduce C++ at the right pace, and also show how to get started with applying that knowledge to developing games in Unreal 4. In some ways, it almost feels like two separate books: one on basic C++ programming, and another on coding in C++ for Unreal Engine 4. This is not necessarily a bad thing, and I think both parts are worthwhile. Really, this book would be most valuable to someone that has little experience with C++ and is also new to using C++ in UE4. If you are already a C++ pro, the first half of the book may seem too basic. However, I think the Unreal coverage can be useful to developers of varying skill levels.

Overall I enjoyed Learning C++ by Creating Games with UE4 and would entirely recommend it to anyone interested in gaining knowledge in C++ for Unreal. To be honest, this is one of the only books out there on the topic right now, so it sort of stands alone. I believe it’s taken me a little over a week to read the 342 page text. Certainly, it doesn’t cover everything you need to know (not even close) but it’s a great place to start. I’d also add that I read the book on the Kindle Fire HDX, and the formatting looked pretty good. The price on the e-book was also much more affordable, so now may be a good chance to upgrade if you’ve still been reading on ink and paper.