There is a trend these days to avoid writing about technical things in programming — and in particular game development — blogs. Just go to places like r/programming or altdevblogaday, and so on and you find plenty of articles giving you great advice on everything EXCEPT math and programming! What gives?
There’s just not enough articles any more that get down to the nuts and bolts of algorithms and data structures, or at an even more basic level actually bother to try explaining some interesting theoretical concept. Once venerable clearing houses like flipcode or gamedev.net have either shutdown or become diluted into shallow social-networking-zombies. Perhaps this is a symptom of our ever decreasing attention spans, or even more pessimistically a sign that indie devs have simply given up on trying to push the technological envelope out of fear of competing with big studios. It seems that trying to innovate technically is now viewed as `engine-development’ and derided as unproductive low-level tinkering. Wherever it comes from, I am convinced that these insubstantial discussions are making us all stupider, and that the we need to start writing and paying attention to hard technical articles.
So, rather than sit back and complain, I’ve decided to do something proactive and try to update this blog more often with useful — or at least interesting and substantial — technical content. But before that, I will start by listing some of the things I am *not* going to talk about:
- Industry news
- Business advice
- Coding “best practices”
- Social networking
- Project management
As I’ve just described, there’s already an abundance of literature on these subjects, possibly because they are trivial to write about, and it is easy to have an opinion about them. As a result, I don’t really feel particularly compelled, or even much qualified as an industry-outsider-academic-type, to discuss any of those things. More pragmatically, I also find that discussing these sorts of “soft”, subjective issues leads to either pointless back patting or unproductive bickering.
Instead, I’m going to use this blog to talk about the “harder” foundational stuff. When possible, I will try to provide real code here — though I will probably switch languages a lot — but my real focus is going to be on explaining “why” things work the way they do. As a result, there will be math, and this is unavoidable. I’m also going to make an effort to provide relevant references and links when possible, or at least to the extent of my knowledge of the prior art. However, if I do miss a citation, please feel free to chime in and add something.
I don’t have a set schedule for topics that I want to cover, but I do have some general ideas. Here is a short and incomplete, list of things that I would like to talk about:
- Procedural generation and implicit functions
- Physical modeling using Lagrangians
- Mesh data structures
- Spatial indexing
- Non-linear deformable objects
- Collision detection and Minkowski operations
- Fourier transforms, spherical harmonics and representation theory
- Applications of group theory in computer graphics
- Audio processing
I’m also open to requests at this stage. If there is a topic that more people are interested in, I can spend more time focusing on that, so please leave a request in the comments.