
Books I used to develop a game engine - ingve
https://www.haroldserrano.com/blog/books-i-used-to-develop-a-game-engine
======
_sdegutis
This is neat and I always find myself coming back to these sort of topics year
after year, learning stuff I’ll never actually use, about how to make a video
game. I bet there’s a lot of people here like me who got into programming as a
teenager because they wanted to recreate their favorite 2D video games, ending
up having a useful career skill instead and almost no video games to show for
it for lack of time. The issue was only made worse when the industry went
toward much more math heavy 3D games which has logic my mind just can’t wrap
its head around. Maybe that explains why Kickstarter and Steam saw a ton of
retro 2D games in the past few years... some people just went for it.

~~~
fnayr
> Maybe that explains why Kickstarter and Steam saw a ton of retro 2D games in
> the past few years

I actually think (as someone with gamedev experience) that the explanation has
to do with the difficulty of creating art assets for 3d games rather than
complex math (as other users have pointed out, current widely used engines
take care of mostly).

Indeed, even indie games that are made in 3d generally take a low poly style
as they are easier to make (and obviously easier to achieve performant
results).

~~~
megaman22
> the difficulty of creating art assets for 3d games

As somebody who is a hobbyist at best, this is my biggest sticking point.
Anybody can learn to slam together some pixel art in Paint, and even doing
more advanced work in Photoshop is not out of reach with a little time and
practice. But learning a 3D modeling tool is orders of magnitude harder - I've
made a couple runs at Blender and older versions of 3D Max, and there's just
so much to making meshes that look decent, and then you have to skin them. And
then there is the question of adding animations. My hat is off to people who
have developed those skills.

My only hope is that technology to make this process easier will advance. I've
seen some demos of people using their phone cameras to scan real objects and
generate 3D models, but even if that worked perfectly, it appears to me that
there would be a lot of work to process that into passable 3D art assets.

~~~
Tobba_
I think the difficulty in 3D polygon modelling is partially a tooling problem,
and also a learning curve problem. The usual workflows I've seen/used that
didn't involve sculpting (which requires being good at that too) all involve
blocking out the model in several steps and applying semi-irreversible
transformations, making it really hard to go back and fix a dumb mistake. Some
editors like Blender are also notorious for having completely impenetreble
interfaces, and even 3ds max and similar probably aren't too straightforward
either. Ontop of all that, you're required to know a ton of technical details
(skinning, normal smoothing, etc) that aren't explained properly for modellers
anywhere I know of (building an engine/renderer is a fairly direct way to pick
up that knowledge though).

3D sculpting and CAD modelling are entirely different beasts however (I've
never actually seen CAD tools involved in a game asset workflow, but it could
be done and would be fairly useful for inorganic assets). Sculpting is dead
simple in principle, in the same sense that drawing is; meaning you don't need
to worry about the tools in the same way. CAD is a different beast, but still
works on some pretty simple principles (constraint-driven CSG).

I think the only real "hard" part right now is getting low-poly versions of
assets that can be used inside of your engine. Making the high-poly assets
might require more actual work (and 3D scanning could help there), but it's
nonetheless fairly straightforward.

edit: "low-poly" here meaning "reasonable number of polygons", not visibly
low-poly.

~~~
pasabagi
I'm from an art background - and honestly, I couldn't disagree more.

The reason why most people are bad at 3d modeling is that most people are bad
at art. Reproducing shapes from real life to any medium, if it's charcoal, or
clay, or 3d, is very difficult. People who are good at it typically spent tens
of thousands of hours practicing.

Part of what you learn in this practice is patience. Part of what you learn is
a good eye. However, unless you're fundamentally allergic to tech - tools like
Blender are simply way faster and more powerful than any other medium.

Consider an 'art' skill like making woodcuts. There's no 'undo'. Mistakes are
very easy to make, and often involve stabbing yourself through the web of your
thumb with a chisel. It takes days of painful, physically tiring work, that is
very bad for your hands, to simply make the lines. It's like that because real
material processes don't care about user-friendliness.

For me, learning Blender as an interface was enjoyable because I could see how
much easier it was going to make my life. It's neither large, nor unduly
complicated - I'd consider it similar to learning vim, or photoshop. The real
problems - the hard problems, are art problems.

------
psyc
Before I developed a serious rendering engine, I'd read Advanced Animation &
Rendering Techniques by Watt & Watt [1], cover to cover, a dozen times. It's
pretty dated now, but at the time I first acquired it (90s) it was the most
comprehensive overview of rendering I knew of. I'd also read Real Time
Rendering, and Math for 3D by Lengyel, which are both on this list. For really
proper collision, Real-Time Collision Detection (on the list) was absolutely
invaluable, but I didn't get to that until a few years later. Around that
time, I also read the excellent architecture book Game Engine Architecture [2]
which I don't see here. It's well written, does things in the right order, and
it's very comprehensive.

[1] [https://www.amazon.com/Advanced-Animation-Rendering-
Techniqu...](https://www.amazon.com/Advanced-Animation-Rendering-Techniques-
Alan/dp/0201544121)

[2] [https://www.amazon.com/Game-Engine-Architecture-Jason-
Gregor...](https://www.amazon.com/Game-Engine-Architecture-Jason-
Gregory/dp/1568814135)

------
maaaats
> Hope it helps.

Not really, listing 50 books without any explanation is as good as listing
none. A reader is none the wiser.

------
Keyframe
If you're interested in rendering, more in general, there's Principles of
Digital Image Synthesis by Glassner. This is probably the only book(s) I can
point out as a standing example out of all I've learned from during the
studies in the field. Lots of nice material now out there, of course, but this
one is at the core of everything. It wasn't maybe suitable for realtime
rendering, but as tech advances - we're getting there. It's even available now
online:
[http://www.realtimerendering.com/Principles_of_Digital_Image...](http://www.realtimerendering.com/Principles_of_Digital_Image_Synthesis_v1.0.1.pdf)
(and damnit I paid a bit over $200 back in the day)

~~~
sureaboutthis
As did I and I feel your pain. Thanks for the link.

------
vvanders
Solid list.

Out of all of them Realtime Collision Detection stands out. It's basically
datastructures for real-time spatial data. Every chapter of that book is gold.

~~~
vanderZwan
I just looked if there was a newer version of it. There doesn't seem to be,
but Christer Ericson does still have a dedicated page for the book. The errata
section[0] is surprisingly small given that it is 632 pages. I thought this
snippet was interesting:

> _All illustrations in the book were redrawn from my original illustrations.
> Unfortunately, the company in charge of redrawing the illustrations mangled
> almost all of the illustrations doing so (right angles became accute or
> obtuse, etc). I thought I had caught all their errors before the book went
> to print but sadly it seems I missed a few._

Tangent: his 2003 presentation on memory optimisation[1] is also still a very
interesting read, especially the last section on aliasing. I wonder how much
of those comments still apply to modern languages (or C and C++ compilers, for
that matter).

[0]
[http://realtimecollisiondetection.net/books/rtcd/errata/`](http://realtimecollisiondetection.net/books/rtcd/errata/`)

[1]
[http://realtimecollisiondetection.net/pubs/](http://realtimecollisiondetection.net/pubs/)

------
HugoDaniel
Three books on quaternions ? One wasn't enough ?

This list reads like "here is a list of all the books i know that exist
somewhat related to this topic"

------
krosaen
I used to consider 3d graphics something that's cool but non-essential to
learn, but lately, getting into computer vision and robotics, I've found that
much of 3d graphics overlaps / are a prerequisite. It's fun that these topics
are becoming more widely relevant as more jobs open up in computer vision and
robotics.

~~~
psyc
Certainly a lot of overlap with robotics, since articulated models in a game
are like virtual robots, complete with real-time requirements. (But no
actuators, thankfully.)

------
ohazi
Jason Gregory's "Game Engine Architecture" is very well written, and you can
actually read it cover to cover. Highly recommended.

[https://www.amazon.com/Engine-Architecture-Second-Jason-
Greg...](https://www.amazon.com/Engine-Architecture-Second-Jason-
Gregory/dp/1466560010/)

------
jefftime
Michael Abrash's Black Book is a very enjoyable read. The material is oriented
towards a much lower level than people are working with today, but there's
some great information in there. I feel that it does a good job of teaching
one how to think about approaching a problem; not just DOS graphics techniques

~~~
Bizarro
The Black Book is a classic. Obviously, much of the material is dated, but
Abrash is a great writer. IIRC, there's some tidbits in there about Carmack's
approach to getting BSP into Quake...or maybe that was Masters of Doom.

~~~
jefftime
You are correct. There are a couple chapters on some of the techniques in
Quake such as BSPs, surface caching, lighting, etc.

------
kelvin0
I know this author means well, but even for a game dev 'veteran' like myself,
all this reading seems quite daunting. Can't imagine what a junior aspiring
game dev thinks.

~~~
VHRanger
"let's use unity"

------
segmondy
Give me a break! 50+ books? No one needs that many books to develop a game
engine.

~~~
bhrgunatha
It's a _comprehensive_ list of books. There's a link in the very first
paragraph to an _essential /recommended_ list:

[https://www.haroldserrano.com/blog/best-books-to-develop-
a-g...](https://www.haroldserrano.com/blog/best-books-to-develop-a-game-
engine?rq=books)

------
Exuma
Jesus, I need to learn how to read faster.....

~~~
sempron64
How much value is there in reading without completing exercises? I find that,
for myself, knowledge gained through hands-off reading is very shallow and
difficult to apply. On the other hand knowledge I've applied hands on has been
vastly valuable. One recent example that springs to mind is kmv data sketches.
I understood their theory and the algorithm's details but the (simple) concept
and it's cases of applicability did not really click for me until I wrote one
for use in an application on someone else's recommendation. I spent the next
week gushing about my revelation, to my colleagues' annoyance.

~~~
Exuma
What is a KMV data sketch, the more detail the better - sounds fascinating

~~~
__float
One of the ways we count distinct elements in an unknown amount of data--
probabilistically! You may have heard of Bloom filters and the like, and this
is a similar family of algorithms.

[https://research.neustar.biz/2012/07/09/sketch-of-the-
day-k-...](https://research.neustar.biz/2012/07/09/sketch-of-the-day-k-
minimum-values/)

~~~
Exuma
Oh that makes sense, bloom filters are super fun

------
auggierose
I came to the conclusion that I need to learn blender as well, and spent about
2 weeks using it, but man, it is such a frustrating (yet powerful) tool,
somewhat like Apples Interface Builder :)

It’s just not how I would like to work. I want more control via a super smooth
interactive text-based interface; that interface should integrate seamlessly
with a visual direct manipulation interface.

~~~
moron4hire
If that is what you want, then I think, perhaps, you haven't learned Blender
deeply enough.

~~~
auggierose
I am pretty sure I have not learnt it deeply enough! I am also pretty sure
that what I want does not exist yet, so it would not make sense to get deeper
into Blender.

~~~
maaaats
You can manipulate everything in blender via python.

~~~
bringtheaction
I used the Python API of Blender in a project with a friend of mine once to
define the objects and the scene we were making and to provide parameters for
the placement of said objects. It was an okay-ish but not great experience.

The API did not feel totally Pythonic, and it did not feel like it was
intended for direct use. It felt more like it was meant for plumbing and
plugins, not for creating and controlling a specific scene.

------
megaman22
Can anyone recommend a project-based book for learning OpenGL? There have
always seemed to be a lot more books in this style for DirectX, for some
reason, but when it comes to OpenGL, the references are always the manuals,
whether that be the red, orange, or blue books. I've used the Nehe tutorials
in the past, but they are severely dated the last time I checked.

~~~
pjmlp
The reason being game developers mostly prefered DirectX and ARB (pre-Khronos)
was not that into games.

And despite urban myths, game consoles never had much love for OpenGL.

[https://softwareengineering.stackexchange.com/a/88055](https://softwareengineering.stackexchange.com/a/88055)

Had Apple not adopted OpenGL and GL ES as a means to save 3D R&D and make
their shinny new OS attractive to UNIX devs (they were researching Quickdraw
3D initially), OpenGL would be history concernig 3D game APIs.

~~~
megaman22
Great read, I hope that is mirrored somewhere to protect against it being
removed ftom stackexchange someday.

~~~
insertnickname
[https://web.archive.org/web/20180208111544/https://softwaree...](https://web.archive.org/web/20180208111544/https://softwareengineering.stackexchange.com/questions/60544/why-
do-game-developers-prefer-windows/88055)

------
benabbottnz
For those who are interested in 2D game development, the Phaser JavaScript
framework just released version 3.0 which had the support of a Mozilla Grant.

[https://github.com/photonstorm/phaser](https://github.com/photonstorm/phaser)

------
bluedino
What engine? How long did it take? Solo or team project?

------
partycoder
Many of those books contents overlap. The overlap is often good, though. If
you get stuck, you can read another book and continue making progress.

For now, 3D game development will see a lot of growth once VR/AR gains
adoption.

Now, to be honest, you can make a decent game with just high school math.

