The Inner Product is a monthly column dedicated to the exploration of game engine technology.  The column is written by Jonathan Blow; you can find the print version in Game Developer Magazine.  It's been running there since December 2001, when Jeff Lander concluded his run of the previous technical column, Graphic Content.  For links to other columns, see the list at the bottom of this page.

Over time, I will revise these articles to fix errata and make clarifications.  So feedback is helpful!  Drop me a line and let me know what you think.

Generally, the articles below differ from the versions printed in the magazine.  They come from my original drafts, so they are not as nicely laid out, and they don't contain the editors' grammar tweaks.  Some errata have already been fixed, and many segments that were cut for the magazine have been restored (the length limit for the print magazine is quite short.)

 

The Inner Product is aimed at practicing, professional game programmers who are already good at what they do.  At the time I started writing the column, I felt that most game-related technical articles were slanted toward beginner- and intermediate-level programmers; and that if you were already at the level where you could read SIGGRAPH papers and implement them effectively, then there wasn't much in the way of game-specific writing that was helpful to you.  Among the articles that did exist, I felt there was a lot of redundancy.  So with The Inner Product I set out to write about technical subjects at the edges of professional game developers' understanding (or at least my own personal understanding), and to perform experiments that may be useful to professional programmers but also out-of-the-ordinary enough that people would not have explored those directions themselves.  As I said in the first column, "if it wouldn't have been new and useful information to me 2 months ago, then I won't write it."

The name of the column signifies several things at once.  The "inner product" is a mathematical operation, also commonly known as the "dot product"; this operation takes two vectors, which can be quite large many-dimensional quantities, and it crunches them together and yields for you a simple scalar value, telling you something about the relationship between those vectors.  Accordingly, in the column I aspire to take complex-seeming subjects and distill them into their simpler essence, to find the kernel at the heart of the matter.  Secondly, the name "inner product" signifies that we're building the mechanisms deep inside a game; whereas the players of a game see mostly the outer parts of the product (texture maps, 3D meshes and the like), it's that inner engine that makes it all possible.  Thirdly, the name is a meditation on the idea of game development as self-improvement.  All the mathematical and algorithmic knowledge, engineering, and discipline required for a modern game are difficult things to cultivate; whereas we employ them to build a tangible, outerly visible product (a game), perhaps the real value is that we are honing our ability to create and refining our understanding of the world.

 

Rights to reproduce these articles in print media are held by CMP Media, LLC.  However, I retain electronic distribution rights, and I'm happy to pass these along to you.  You can feel free to copy these articles, put them up on your own site, or whatever you want, provided you don't be a jerk about it (e.g. don't claim that you wrote them; and if you edit them, please make it clear to the reader that they are edited).

 

Articles Organized by Subject (an article may be classified under multiple subjects):

Graphics:

Mipmapping 1 (December 2001)
Mipmapping 2 (January 2002)
Rendering Level-of-Detail Forecast (August 2002)
Unified Rendering LOD 1 (March 2003)
Unified Rendering LOD 2 (April 2003)
Unified Rendering LOD 3 (May 2003)
Unified Rendering LOD 4 (June 2003)
Unified Rendering LOD 5 (July 2003)

 

Animation:

Hacking Quaternions (March 2002)
IK with Quaternion Joint Limits (April 2002)
Understanding Slerp, Then Not Using It (April 2004)

Math:

Mathematical Growing Pains (February 2002)
Hacking Quaternions (March 2002)
IK with Quaternion Joint Limits (April 2002)
My Friend, The Covariance Body (September 2002)
Understanding Slerp, Then Not Using It (April 2004)

 

AI:

Toward Better Scripting 1 (October 2002)
Toward Better Scripting 2 (November 2002)
Predicate Logic (December 2003)

Networking:

Packing Integers (May 2002)
Scalar Quantization (June 2002)
Transmitting Vectors (July 2002)
Arithmetic Coding 1 (August 2003)
Arithmetic Coding 2 (September 2003)
Adaptive Compression Across Unreliable Networks (October 2003)
Piecewise Linear Data Models (November 2003)

Scripting Languages:

Toward Better Scripting 1 (October 2002)
Toward Better Scripting 2 (November 2002)
Predicate Logic (December 2003)
Lerp 1 (January 2004)
Lerp 2 (February 2004)
Lerp 3 (March 2004)

 

Tools:

Interactive Profiling 1 (December 2002)
Interactive Profiling 2 (January 2003)
Interactive Profiling 3 (February 2003)

Misc:

Miscellaneous Rants (May 2004)
Experiments I'd Like to Work On (June 2004)

 

 

Articles Organized Chronologically:

Mipmapping 1 (December 2001)
Mipmapping 2 (January 2002)
Mathematical Growing Pains (February 2002)
Hacking Quaternions (March 2002)
IK with Quaternion Joint Limits (April 2002)
Packing Integers (May 2002)
Scalar Quantization (June 2002)
Transmitting Vectors (July 2002)
Rendering Level-of-Detail Forecast (August 2002)
My Friend, The Covariance Body (September 2002)
Toward Better Scripting 1 (October 2002)
Toward Better Scripting 2 (November 2002)
Interactive Profiling 1 (December 2002)
Interactive Profiling 2 (January 2003)
Interactive Profiling 3 (February 2003)
Unified Rendering LOD 1 (March 2003)
Unified Rendering LOD 2 (April 2003)
Unified Rendering LOD 3 (May 2003)
Unified Rendering LOD 4 (June 2003)
Unified Rendering LOD 5 (July 2003)
Arithmetic Coding 1 (August 2003)
Arithmetic Coding 2 (September 2003)
Adaptive Compression Across Unreliable Networks (October 2003)
Piecewise Linear Data Models (November 2003)
Predicate Logic (December 2003)
Lerp 1 (January 2004)
Lerp 2 (February 2004)
Lerp 3 (March 2004)
Understanding Slerp, Then Not Using It (April 2004)
Miscellaneous Rants (May 2004)
Experiments I'd Like to Work On (June 2004)

 


Other Game Developer Magazine technical columnists:

Jeff Lander's Game Developer Companion page

Brian Hook's page doesn't actually have his articles right now, but maybe that will change sometime in the future.

Chris Hecker's Game Developer articles

 

 

[number-none.com]    [Jonathan Blow's home page]