VDP2 (Saturn)

From Sega Retro

VDP2 1st version.

Video Display Processor 2 (VDP2) is one of two graphics processing units housed within the Sega Saturn console. It is a custom integrated circuit used only in Saturn hardware, and the Saturn-derived Sega Titan Video arcade hardware.

VDP2 is typically responsible for rendering "background" graphics. It works in conjunction with a second graphics processor, VDP1, to render an image onto the screen.

The existence of VDP2 was unusual even for its day, as most graphical processing systems rely on a single chip to handle both foregrounds and backgrounds. The Saturn's choice to delegate these two "layers" to different processors can lead to greater performance at the expense of simplicity - while VDP2 is designed to render relatively large graphics, rotating, scaling and translating their contents at high speeds, with clever manipulation of its features it can fulfill other roles, such as helping create various visual effects, including transparency effects for sprites and polygons, something the "foreground" processor, VDP1, struggled to do on its own.


Rewrite.svg
This article needs to be rewritten.
This article needs to be rewritten to conform to a higher standard of article quality. After the article has been rewritten, you may remove this message. For help, see the How to Edit a Page article.


The VDP 2 serves as the Sega Saturn's background processor. Certain special effects such as texture transparency and playfield rotation and scrolling (up to five fields at any given time) are handled here.

Both the VDP2 and VDP1 32-bit video display processor have direct access to the both SH2s, as well as direct memory access (DMA) to both the main and video RAM.

Overview

The VDP2 was based on Sega System 32 technology, itself an evolution of Super Scaler technology. The VDP2's tiled infinite plane engine uses tilemap compression and a form of scanline/tiled rendering. It draws large 2D background planes and/or large 3D textured infinite planes (for things such as grounds, seas, walls, ceilings, skies, etc.) with perspective correction and a virtually unlimited draw distance, at a very high fillrate for its time. It is also capable of effects such as transparency, parallax scrolling, water, fire, fog, heat haze, etc.

The VDP2 draws 3D infinite planes with perspective correction as large as 4096×4096 pixels at 30 FPS, a fillrate of over 500 megapixels/sec, significantly larger than what other console or PC hardware were capable of with polygons at the time. It requires 1 million textured 500-pixel polygons/sec to draw a textured 4096×4096 infinite plane at 30 FPS; the Dreamcast was the first home system capable of doing this with polygons, as it was the first home system with a polygon fillrate exceeding 500 megapixels/sec. If the VDP2 is used for drawing infinite planes, this frees up the VDP1's polygons for other 3D assets, whereas other home systems at the time needed to draw many polygons to construct 3D planes (with very limited draw distance compared to the VDP2).

The VDP2 can draw up to five 2D planes, or two 3D planes, or two 2D planes with one 3D plane.[1][2] From among the 3D planes, one is capable of three-axis rotation, while the other is capable of two-axis rotation.[3] The 3D planes can be manipulated as polygon objects,[4] including perspective transformation,[5] essentially making the 3D planes two very large polygons.

The VDP2 also has full transparency, which does not affect the VDP2's performance. It could make up for the VDP1's transparency issue, either by VDP1 sprites/polygons using the VDP2 palette, or by using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in Burning Rangers). A faster technique for transparency was multi-texturing, applying a VDP2 layer as a transparent overlay for certain VDP1 polygon objects (e.g. Sonic R).

The VDP2's tiled infinite plane engine, which could draw large 3D infinite planes with a much higher draw distance, texture details and fillrate than polygons at the time, was unfamiliar to most developers who relied on polygons to construct 3D planes. Sega's first-party 3D games often utilized the VDP2, but the hardware's complexity and difficult 3D development environment led to most third-party developers only utilizing the VDP1, just a portion of the Saturn's power, for 3D games. While the VDP2 was under-utilized for 3D games, it was frequently used for 2D games, where the VDP1 draws sprites and the VDP2 draws scrolling backgrounds. The Saturn's combination of a VDP1 sprite framebuffer and VDP2 parallax scrolling backgrounds made it both more powerful and straightforward to program 2D graphics, compared to other 3D systems which draw all 2D graphics to a single framebuffer.

Unlike the VDP1's polygons, the VDP2's 3D rotation planes lack hardware lighting or Gouraud shading capabilities, but it is possible to approximate these with the VDP2's color gradient capabilities. The VDP2 also has shadow capabilities, which the VDP1 struggles with. It is also possible to program software lighting for VDP2 planes, such as ambient lighting (e.g. Panzer Dragoon Saga).

Technical specifications

  • VDP2 @ 28.63636 MHz: Handles background, scroll and 3D rotation planes[6]
    • Versions: Sega 315‑5890 (Yamaha) Video Display Processor 2 (VDP2),[7] Yamaha 315‑5690 VDP2[8]
    • Adjustable video clock rate: 28.63636 MHz (NTSC), 28.4375 MHz (PAL)
  • VDP2 cores: 4 parallel cores (17 units),[9] 114.5456 million operations/sec[fn 1]
    • Bus control
    • H/V counter & timing generator
    • Scroll picture block: 8 units (Normal picture coordinate calculation, Rotation picture coordinate calculation, Pattern name control, Window control, Character control, Line picture control, VRAM control, Dot data control)
    • Video process: 7 units (Color offset & shadow, Output data control, Color computing control, Color RAM, Priority control, Color RAM control, Sprite control)
  • Features: Transparency (32 levels of transparency, can also be applied to VDP1 polygons/sprites),[10] shadowing, 2 windows for special calculations,[11] matrix calculations,[12] multi-texturing,[13] bump mapping,[14] color gradients
    • Background engine
    • Four simultaneous scrolling backgrounds
    • Uses 8x8 or 16x16 tiles or bitmap display per background
    • Programmable memory access controller for VDP2 VRAM
    • Two simultaneous rotating playfields
    • VDP2 can rotate VDP1 framebuffer position while scanning out to display for rotation effects
    • Color RAM supports 15-bit (32768 colors) and 24-bit (16.7 million colors) display modes
    • Programmable priority at the per-background / per-tile / per-pixel levels
    • Background color tinting/fading, and transparency effects
    • Background blur effect (gradation) to simulate distance
    • 3D infinite planes: Can be manipulated as large polygon objects,[4] with perspective transformation[5][15] and rotation. Can have curved surface and bumps,[16] and be used for grounds, walls, ceilings, seas, skies, etc.
    • Visual effects: Water, fire, fog, heat haze, misting, reflective water surfaces[17]
  • Programmable display resolution:
    • Horizontal sizes of 320, 352, 640, 704 pixels
    • Vertical sizes of 224, 240, 256 scanlines, non-interlaced
    • Vertical sizes of 448, 480, 512 scanlines, interlaced (only PAL consoles support 256 and 512 scanline displays)
  • Hi-Vision (EDTV) and 31KHz (VGA) display support:
    • 31KHz: 320x480 or 640x480, non-interlaced (progressive scan)
    • Hi-Vision: 352x480 or 704x480, non-interlaced (progressive scan) (requires compatible monitor and video cable)
  • Planes: 7 layers, 2–6 simultaneous layers (1–4 scrolling 2D backgrounds, 1–2 rotating 3D playfields, 1 back screen)[11][1][18]
    • 2D scrolling backgrounds: Scrolling, parallax scrolling, single-axis 2D rotation[19]
      • NBG0: 16–16,777,216 colors, tilemap (1024×1024 to 2048×2048) or bitmap (512×256 to 1024×512), column/row/line scrolling, scaling
      • NBG1: 16–32,768 colors, tilemap (1024×1024 to 2048×2048) or bitmap (512×256 to 1024×512), column/row/line scrolling, scaling
      • NBG2/NBG3: 16–256 colors, tilemap (1024×1024 to 2048×2048)
    • 3D rotating playfields: Scrolling, scaling, dual-axis 3D rotation,[19] three-axis 3D rotation,[3] 3D infinite ground planes, perspective correct 3D rotation, can be manipulated as large polygon objects,[4] perspective transformation,[5][15] can have curved surface and bumps[16]
      • RBG0: 16–16,777,216 colors, tilemap (2048×2048 to 4096×4096) or bitmap (512×256 to 512×512)
      • RBG1: 16–16,777,216 colors, tilemap (2048×2048 to 4096×4096)
    • Back screen: 1 plain background,[20] 1 to 240 colors (1 color/scanline)
  • Tilemap capabilities: 8×8 and 16×16 tile sizes,[1] scroll plane up to 8192×8192 pixels,[21] rotating 3D infinite planes up to 4096×4096 pixels each,[18] tile compression, tiled rendering, virtually unlimited draw distance
  • Bitmap capabilities: Bitmap layers can be used as additional framebuffer[22] (with full transparency), displays VDP1 framebuffer as additional bitmap layer, can rotate VDP1 framebuffer[23]
  • Color palette: 16,777,216 colors (24-bit), 32,768 colors (15-bit), 65,536 colors (15-bit with transparency)
    • Colors per plane: 16,777,216 colors (3 planes, Lo-Res), 32,768 colors (4 planes), 16–256 colors (6 planes)[24][25]
  • Bitmap fillrate:
    • 2D scrolling planes: 14.31818–114.54544 MPixels/s
      • 16,777,216 colors on screen: 14.31818 MPixels/s[fn 2]
      • 32,768 colors per plane: 28.63636 MPixels/s[fn 3]
      • 256 colors per plane: 57.27272 MPixels/s[fn 4]
      • 16 colors per plane: 114.54544 MPixels/s[fn 5]
    • 3D rotating playfield: 14.31818 MPixels/s[fn 6]
  • Tile fillrate: 125.82912–534.77376 MPixels/s[fn 7]
    • 2D scrolling planes: 125.82912–503.31648 MPixels/s[fn 8]
      • Tile fillrate: 3,932,160 tiles/sec, 65,536 tiles per frame[fn 9]
    • 3D rotating playfields: 125.82912–503.31648 MPixels/s[fn 10]
      • Effective polygon fillrate: 1 million texture-mapped polygons/sec (500-texel polygons)

Footnotes

  1. [28.4375 MHz per core 28.4375 MHz per core]
  2. [2 cycles per pixel (8 cycles per 4 pixels)[26][27] 2 cycles per pixel (8 cycles per 4 pixels)[26][27]]
  3. [1 pixel per cycle (4 pixels per 4 cycles)[26][27] 1 pixel per cycle (4 pixels per 4 cycles)[26][27]]
  4. [2 pixels per cycle (4 pixels per 2 cycles)[26][27] 2 pixels per cycle (4 pixels per 2 cycles)[26][27]]
  5. [4 pixels per cycle[26][27] 4 pixels per cycle[26][27]]
  6. [2 cycles per pixel (8 cycles per 4 pixels)[26][27] 2 cycles per pixel (8 cycles per 4 pixels)[26][27]]
  7. [4096×4096 texel texture, 1024×1024 texel texture, 30 frames per second[28] 4096×4096 texel texture, 1024×1024 texel texture, 30 frames per second[28]]
  8. [1024×1024 to 2048×2048 pixel tilemaps 1024×1024 to 2048×2048 pixel tilemaps]
  9. [4x 128×128 tiles[18] 4x 128×128 tiles[18]]
  10. [2048×2048 to 4096×4096 texel textures 2048×2048 to 4096×4096 texel textures]

References