Before working on Impulse, I never really thought about what makes games feel ‘fast'; XG3 and F-Zero did it really well, but what’s actually happening to give that impression? Remember that when we’re playing games, we’re just looking at simulated 3D worlds projected onto 2D screens – when so much of our perception of the world is not visual, how do we give the illusion of speed entirely through the visual medium?
Initially I thought I could have some fancy blur effects going on, but it turns out that most mobile devices just can’t handle modern blur effects nicely – they have the nasty habit of having lots of pixels and relatively low performance, so I had to think outside the box. That last sentence underpins a lot of my issues here – if I want to make a good looking game, I can’t dedicate too much processing time to fancy effects, even if they do make it look fast. We need a table.
Camera closer to the ground
Road texture patterns
Increased engine glow
More roadside/close objects
Fancy graphical effects such as motion and radial blur
In our handy table, I jotted down everything I thought of that could give that fast feel. Surprisingly, a lot of the effects that cost the least turned out to be the most effective, especially since I can add them together with very little overhead.
Increasing the field of view was my first action, it stretches the edges of vision and it does give a great effect, but turn it up too high and it distorts the view loads. One thing though – we actually need something on the screen to distort! Adding some visual noise around the edge of the tracks and near to the camera increased the visual speed hugely. Things added were buildings close to the track and some edge features, like an embankment and hazard stripes at the edge. The next thing I changed was the road texture. Mario Kart has a vertically-blurred gravel texture for some tracks that I tried to emulate, which looked good but it didn’t feel fast. By adding horizontal lines to the track, we’re creating loads of reference points for the player to see zoom past. Interestingly, if we slightly change how far apart these lines are, we also change how the player perceives their speed, despite it not really changing – shows how much is about perception. I’m not sure how to use this new found super power to impact the track designs yet, I’m sure I’ll think of something!
Position of the camera was also pretty important, in two ways. First, I used it to maximise the above effects; placing the camera nearer to the ground makes the track’s horizontal lines go by really fast and draws the player in to the screen. As an added bonus, the more of the screen I can cover with track the better, since it’s so fast to render! The second way I used the camera position was by moving it depending on the player’s speed. Increasing the field of view slightly and moving the camera away from the player’s car when boosting makes it seem really fast, far moreso than the actual speed boost gained. I feel that having the temporary moments of boost speed looking different helps separate “cruise speed” from “shit that’s fast” speed, in the same way pacing would work in non-racing games.
My final method for creating the illusion of speed was to add a shadowing effect to everything that was glowing. Basically instead of clearing the old frame completely, it leaves a little there dependent on speed, as seen below, to make an almost-motion-blur effect. It does take a little extra memory, but it’s well worth it. Worth noting is that it only comes in to effect when the player’s going really fast, so it really drives home the point that they’re going above cruising speed.
So that’s what worked for me! I’m also interested in hearing what you’ve tried, or if you have any suggestions, so send me an email or tweet at me!