Vrrroom! Whoosh!

Originally posted to Shawn Hargreaves Blog on MSDN, Wednesday, September 5, 2007

Only four posts in the whole of August! I do apologize. I have clearly been slacking :-)

Continuing on from my article about motion blur, I'm going to talk about some other ways to make a game feel fast.

In real life, an obvious clue to when we are going fast is that our surroundings are whooshing past in the opposite direction. You might expect this to work in games, too, but it often doesn't, or at least not so well as one might hope.

This is because of the difficulty of judging scale. In both games and real life, parallax make things whoosh more quickly if they are close to us, or more slowly if they are further away. Those distant mountains are unlikely to be doing much whooshing at all, for instance.

In real life we take advantage of our built-in stereoscopic vision hardware to judge how far away something is, and we adjust our sensation of whooshyness accordingly. This does not work in games for several reasons:

  1. Games are not (usually) rendered in stereovision.
  2. Games are often built to unrealistic scales.
  3. Games often put the camera in misleading places.

I assume most of my audience will be sitting indoors as they read this sentence. Stand up. Look up. How far is it from your head to the ceiling? How far from either side of you to the nearest wall?

Imagine you are a game developer deciding where to position a camera. In order to display the character at a reasonable size and also be able to see a reasonable amount of the surroundings, the camera will end up maybe 6 feet behind you and 4 above. Will that fit in your room? Would it still fit if you started to run around, or jumped onto your desk?

Unlikely. Game designers usually build their worlds at unrealistically large scales in order to leave room for the camera (note that this trickery is not unique to games: movie sets often have ridiculously high ceilings and/or missing walls in order to fit the camera where the director wants it).

Trouble is, the gamer is unlikely to realize you built your world to such a large scale. They are simply going to notice a lack of whooshyness which makes everything feel sluggish and boring. This isn't helped by the fact that when the camera is floating in the air behind the character, the gamer will be empathizing directly with the character, not with the camera. Many games have a peculiar mental displacement going on where the player feels it is actually themselves right there in front of them on the screen, even though they are actually watching themselves from some distance above and behind.

The sensation of whooshyness is directly correlated to your height above the ground. There is a reason why low-slung sports cars feel fast but camper vans feel slow even when both are traveling at the same speed. Thanks to the effect of parallax, the closer you are to the ground, the faster it seems to be scrolling past.

When controlling a third person character, gamers judge the expected amount of whooshyness based on the height of their character above the ground. When they only actually see the amount of whooshyness produced by a much higher camera viewpoint, the game can feel sluggish.

Once you realize what is going on, it can actually be easy to make your game seem faster and more exciting. Just tweak your graphics to include more sources of whooshyness!

You want a nice variety of visual objects that will not affect the gameplay but can go whooshing past nice and close to the player. Scatter trees, telephone poles, and other clutter around where you expect the player to be moving, some as close as possible to the edge of the play area in order to achieve maximum whooshyness, and others set further back to provide a contrasting amount of parallax (by including a few things that move slower, we make the fast ones feel even faster). Even better, hang clutter overhead. Power cables, bridges, and cranes are all good: the lower the better.

Above all else, look to the texturing of your ground surface. A single texture containing a detailed repetitive pattern may look great in a stationary screenshot, but is unlikely to do much whooshing at speed. By putting larger, coarser, and more varied patterns into the ground texture (either using multitexturing or just by drawing them directly onto a single large texture), you can dramatically increase the amount of stuff available to whoosh beneath the player. In addition to placing trees by the side of the road, texture their shadows across the road itself. If you have a field of grass, include lush dark patches, worn muddy spots, etc. In the corridors of an alien spaceship, break up the repetitive tile pattern with splatters of oil, rust marks, and manhole covers.

These techniques made a huge difference when we were creating MotoGP. If you look at screenshots from early builds you will notice a dreadful lack of detail in the road surface. The bikes were traveling over 200 miles per hour, but it felt sluggish and boring. In the final game the artists used multitexturing to add varied patterns of stains and skidmarks onto the road surface. Whoosh! Fast. Exciting. The reviewers loved it, and it was easier to play because the bikes were actually moving slower than in previous builds. The sensation of speed came from giving the right visual clues, and had little to do with the underlying physics.

These overlay textures were useful for more than just making the game feel fast. The designers also used them to give subtle hints as to the best racing line. When you start along a straight section there are no skidmark overlays, so there isn't much whooshing going on and you will naturally want to speed up. As you approach a bend, the number of skidmarks increases and they start to crisscross in a more chaotic pattern so there is more and more whooshing going on and the game feels faster and Faster and FASTER and FASTER and... then right before the corner we bunch all the skidmarks up along the racing line, showing the player exactly where they need to steer to make it around the apex.

Blog index   -   Back to my homepage