While answering a question on the Creators Club forums, I found myself thinking about the difference between general purpose rendering techniques, which tend to be flexible, reusable, and widely understood, versus game specific hacks, which rely on creativity and lateral thinking to achieve their desired result, often by efficiently taking advantage of some other work the game was already doing.
The world is full of knowledge about general purpose rendering techniques. These are presented at conferences, written about in books, and described on blogs and forums. But there is less information about game specific hacks, most likely because these are only relevant to the game they were designed for. Also I suspect some developers might be embarrassed to admit in public just how many shortcuts they took
This struck me as a shame. Sure, these hacks may only be directly applicable to a particular game or platform, but the delicate balancing acts that can achieve interesting effects with a minimum of resources are relevant to all developers.
So I decided to talk about some of the techniques my team used to create MotoGP.
- Shipped in 2002, with a sequel in 2003
- One year of development for each version
- 6 programmers, 12 artists, 2 designers, and 2 audio guys
- Designed and optimized for the original Xbox, but we also shipped a PC version
MotoGP used two “proper” (aka. at least somewhat general purpose) rendering techniques that are, as far as I know, original and unique:
- The bikes and riders used a hemisphere lighting model with a precalculated ground radiosity map, which provided effects like shadowing when they went under bridges, a green tint when they drove on the grass, and flickering colors on the underside of the bike when they leaned over a brightly colored rumble strip.
- The road texture used realtime motion blur to reduce aliasing and create a sensation of speed. See how the tarmac is blurred along the direction of motion in these screenshots:
We also used a number of techniques I have written about elsewhere on this blog:
- Detail textures
- Cubemap reflections
- Faked fullscreen motion blur
- Dynamic field of view to increase the perception of speed
- Bitfield renderstate management
- Stencil swipes for menu transitions
- Skies created from digital photos
For laughs, we implemented some stylized rendering effects as unlockable Easter eggs. Our approach was similar to this XNA Framework sample, but with less sophisticated edge detection. I still think it looked pretty cool though:
But wait, there is more! Unless you are making a motorbike racing game for Xbox-1 hardware, the following ideas may not all be immediately applicable, but I hope you will find some of them interesting and possibly even useful.