VDP1 (Saturn)

From Sega Retro

VDP1 1st version

The Sega Saturn is equipped with dual custom VDP chips for graphics processing. The VDP 1 chip is primarily responsible for sprite generation. Polygon generation is accomplished through manipulation of the sprite engine. Texture mapping and Gouraud shading is also handled by the VDP 1. The VDP1 relies on a dual frame buffer that handles rotation and stores textures in special 512K cache.

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

  • Rendering engine for primitives: textured and untextured polygons, untextured polylines and lines
  • "Sprites" are textured polygons with specific rendering modes:
  • Normal sprite (one point), shrunk/scaled sprite (two points), quadrangle (four points)
  • Other rendering modes:
    • Overwrite (replace framebuffer contents)
    • Shadow (underlying framebuffer pixels rewritten with 1/2 brightness, primitive not drawn)
    • Half luminosity (primitive rendered with 1/2 brightness)
    • Half transparency (primitive and underlying framebuffer pixels averaged together)
    • Gouraud shading for RGB-format textures only
    • Dual 256kB frame buffers
    • Programmable frame buffer depth of 8 or 16 bits per pixel
    • Automatic erase feature to clear framebuffer with single color
  • 200,000 texture-mapped polygons per second
  • 500,000 flat-shaded polygons per second
  • 60 frames of animation per second

Overview

The VDP1 was based on the Sega Model series, with a quad polygon engine based on the Model 1, along with the Model 2's textured mapping capability. The VDP1 is capable of drawing more polygons than the Model 1, but less than the Model 2. The VDP1's quad polygons are drawn with edge anti‑aliasing (for smoother edges) and forward texture mapping (with limited perspective correction). The VDP1 rendered quad polygons, which, despite being used by the most powerful gaming system at the time (Sega Model 2 arcade system), was not industry standard for 3D graphics, compared to the more widely used triangle polygons. The VDP1 rendered quad polygons, which, despite being used by the most powerful gaming system at the time (Sega Model 2 arcade system), was not industry standard for 3D graphics, compared to the more widely used triangle polygons.

The VDP1 also had issues with transparency. The VDP1 supports per-pixel transparency between different polygons/sprites in the VDP1 framebuffer, or between VDP1 and VDP2 layers, but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. In addition, the VDP1 takes six times longer to draw transparent pixels than opaque pixels.[1] There are several ways to overcome the VDP1's transparency issues. The most common method used by Saturn games is to fake transparency with dithering, using a mesh that gets blended by a television's Composite or S-Video cable. Another method is to use the VDP2's hardware transparency, 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). Another method is software transparency, programming the CPU with software code.

The Saturn's VDP1 was the basis for Nvidia's first graphics processor, the NV1, which was one of the first 3D graphics accelerators on PC, released in 1995. Like the Saturn, it uses quad polygons and supports forward texture mapping with limited perspective correction, and several Saturn ports are available for it. However, the NV1 has a fillrate of 12.5 MPixels/s and a rendering performance of 50,000 polygons/sec, less than the VDP1's 28.4375–57.2728 MPixels/s fillrate and 500,000 polygons/sec rendering performance. In comparison, the most powerful PC graphics card of 1995, Yamaha's Tasmania 3D, which was based on triangle polygons, had a 25 MPixels/s fillrate and 300,000 polygons/sec rendering throughput, more than the NV1, but less than the VDP1.

Technical specifications

  • VDP1 32-bit video display processor @ 28.6364 MHz: Handles sprite/texture and polygon drawing,[2] color calculation and shading,[3] geometry[4]
    • Versions: Sega 315‑5883 (Hitachi HD64440) Video Display Processor 1 (VDP1),[5] Sega 315‑5689 VDP1[3]
    • Adjustable video clock rate: 28.6364 MHz or 26.8426 MHz (NTSC), 28.4375 MHz or 26.8426 MHz (PAL)
    • Buses: 3 buses (32-bit framebuffers, 16-bit polygon/texture/sprite RAM), 48-bit bus width[6]
  • Framebuffer capabilities: Double buffering, dual 256 KB framebuffers, rotation & scaling,[7] VDP1 framebuffer can be rotated as bitmap layer by VDP2[8]
    • Framebuffer resolution: 512×256, 512×512, 1024×256[9]
    • Overscan resolution: 1708×263 (NTSC), 1820×313 (PAL), 852×525 (31KC), 848×562 (HDTV)[10]
  • Color palette: 32,768 colors (15-bit RGB) to 16,777,216 (24-bit VDP2 CRAM palette, accessible by VDP1)[11]
    • Colors on screen: 32,768 colors (15-bit RGB) to 1,048,576 colors (15-bit RGB, 32 transparency levels)[12]
    • Colors per pixel: 32,768 colors (15-bit RGB), 256 colors (8-bit palette)
  • Polygon capabilities: Texture mapping,[2] lighting,[13][14] shading, wire‑frame, flat shading, Gouraud shading,[3][14] quad polygons, perspective correct forward texture mapping
  • Sprite/Texture capabilities: Rotation & scaling, flipping, distortion,[2][7] warping, vertical and horizontal line scrolling, virtually unlimited color tables,[4][15] System 24/32 sprite rendering system,[16]
    • Sprite/Texture size: 8×1 to 504×255 pixels[17]
    • Colors per sprite/texture in Lo-Res: 16, 64, 128, 256, and 32,768[18]
    • Colors per sprite/texture in Hi-Res: 16, 64, 128, and 256[19]
    • Maximum texels per scanline: 3624 (NTSC),[20] 3640 (PAL)[10]
    • Maximum sprites/textures per scanline: 453 (NTSC), 455 (PAL)
  • Sprite/Texture/Polygon RAM: 512 KB[21]
    • Sprite/Polygon size: 32 bytes (flat shading),[22][23] 40 bytes (Gouraud shading),[24] 64–96 bytes (shadows),[1] 72–104 bytes (shadows, Gouraud shading)
    • Texture size: 4 bytes (8×1 texels, 16 colors) to 251.02 KB (504×255 texels, 32,758 colors)[23]
    • Gouraud shading table: 264 bytes (optional)[14]
    • Maximum sprites per frame: 16,383 (virtually unlimited),[4] 5461–8191 (shadowed)
    • Maximum polygons per frame: 16,384 (flat shading), 16,383 (texture mapping), 13,100 (Gouraud shading), 13,099 (texture mapping, Gouraud shading), 8192 (shadows), 8191 (texture mapping, shadows), 7277 (texture mapping, shadows, Gouraud shading)
  • Rendering fillrate: 28.6364 MPixels/s (32,768 colors/pixel, 1 pixel/cycle),[20][25][10] 57.2728 MPixels/s (256 colors/pixel, 2 pixels/cycle)[26]
    • Shadow/Translucency fillrate: 4.772733 MPixels/s (32,768 colors/pixel, 6 cycles/pixel)[1]
  • Texture mapping fillrate: 19.024567 MTexels/s, 1.505232 cycles/texel[27]
    • Gouraud shading: 9.506583 MTexels/s, 3.01227 cycles/texel
    • Shadows/Translucency: 3.17749 MTexels/s, 9.01227 cycles/texel
  • Polygon rendering performance:[28]
    • 735,085 polys/sec: Flat shading, 38 cycles/poly, 22–45 pixels/poly, 12,251–16,384 polys/scene
    • 500,000 polys/sec: Flat shading,[29][4] 57 cycles/poly, 41–82 pixels/poly, 8333–16,384 polys/scene
    • 438,312 polys/sec: Lighting, flat shading, 65 cycles/poly, 49–98 pixels/poly, 7305–16,384 polys/scene
    • 376,794 polys/sec: Lighting, flat shading, shadows, translucency, 76 cycles/poly, 10 pixels/poly, 6279–7277 polys/scene
    • 110,993 polys/sec: Lighting, Gouraud shading, 258 cycles/poly,[27] 10 pixels/poly, 1814–13,100 polys/scene
  • Texture mapping performance:[27]
    • 289,256 polys/sec: Lighting, 99 cycles/poly, 4820–16,352 polys/scene, 1–361 KB textures
    • 200,000 polys/sec:[29][4] Lighting, 143–144 cycles/poly, 3333–16,352 polys/scene, 1–407 KB textures
    • 130,759 polys/sec: Lighting, shadows, translucency, 219 cycles/poly, 2179–7263 polys/scene, 1–375 KB textures
    • 90,000 polys/sec: Lighting, Gouraud shading,[30] 318 cycles/poly, 1500–13,075 polys/scene, 1–453 KB textures
  • Other features: Alpha blending, clipping, luminance,[7] shadows,[31] transparency[32] (32 levels),[12] per-pixel transparency, flat shading, Gouraud shading (15-bit color),[1] edge anti‑aliasing[33]

References