A Guide to the Graphics of the Sega Mega Drive / Genesis

Return to Table of Contents

Scaling

Scaling, like rotation, is a powerful feature for making 2D games that, unfortunately, the VDP does not support. Scaling refers to zooming in and out on planes or sprites. Many of Sega’s classic arcade games such as Space Harrier feature sprite scaling that is used to create a pseudo-3D feel.

The VDP hardware does not support scaling, but as with rotation, developers can simulate the scaling effect through pre-drawn or pre-rendered animation. The tiles are loaded into VRAM and then animated by switching the displayed tile every so-many frames.

Here’s an example of scaling—the Sega logo screen from Gunstar Heroes:

The Sega logo screen from Gunstar Heroes.

The logo grows larger and then returns to its regular size several times at 60 fps. The rendering of each step is likely done in software when the console is turned on, and all of the frames are loaded into VRAM at once. Together, they occupy almost all of the VRAM’s available space, which indicates how costly this kind of large, smooth scaling can be for memory.

Let’s look at this example from Dynamite Headdy again:

In this Dynamite Headdy boss fight, the spheres making up the boss’s arms scale as it spins around.

This time, focus on the boss character. This boss is made entirely of sprites. The body of the boss is animated with just four frames but at a rate of 60 fps, so its rotating motion appears quite fluid. If you focus on the spheres that form its limbs, you will notice they scale as they move closer and further away from the screen. The scaling limbs contribute wonderfully to the sense that the platform is round, even though we never see the sides of it.

So how is the scaling done here? If you watch the spheres carefully, you can see that they noticeably shift in size as they move. They are pre-drawn at six different sizes, seen here:

The sprites used for the scaling animation on the above boss.

The difference between the size of each is quite large, but since the screen is so busy with movement, the not-so-smooth animation of the scaling does not stick out.

There is another, clever way to achieve scaling. Look at this clip from Yu Yu Hakusho: Makyo Toitsusen:

An example of scaling from Yu Yu Hakusho: Makyo Toitsusen.

As the character shifts from the near to the far fighting plane, it becomes smaller in size. Here is the animation in slow motion:

The scaling animation in slow motion.

The character seems to be shrinking in on itself, even though certain parts such as the head seem to remain the same in size. This is actually a clever manipulation of sprite positioning. The character is made up of several sprites, and when the character shifts to the far plane, the sprites shift closer together. The following image shows the borders of the sprites on the near and far planes:

A comparison of relative sprite positioning for the foreground and background characters. Left shows the foreground character, right shows the background character. The white outlines indicate sprites.

The inward-shifting movement of the sprites is gradual as the character changes planes, creating the appearance that the character is shrinking.

In certain games you might encounter effects like the following flame sequence in Battle Mania 2:

The explosion sprites in this scene from Battle Mania 2 appear up-scaled, but they’re stored in VRAM that way.

The low resolution of the flame sprites gives the impression that they are being scaled from a much smaller size. They might in fact have been up-scaled in software, but the sprite tiles themselves are stored in VRAM just as they are being displayed.

Next: Shadow and Highlight

Return to Table of Contents

List of Effects:
  1. Introduction
  2. Full-Screen Scrolling
  3. Row / Column Scrolling
  4. Line Scrolling
  5. Animation
  6. Multi-Jointed Characters
  7. Tilting / Rotation
  8. Scaling
  9. Shadow and Highlight
  10. Transparency
  11. Silhouette
  12. Palette Swapping
  13. Vertical Scaling
  14. Sprite Raster Effects

Want to post a comment? You can do so here.