Let's take a look at the components inside a PlayStation 2 console, and what their capabilities are. (Check out How Video Game Systems Work first for a general introduction to game consoles.)
Processor: 128-bit "Emotion Engine"
- Processor clock speed: 300 MHz
- Floating point unit (FPU) co-processor operating at 6.2 gigaflops
- Bus speed: 3.2 GB per second
- Original Play Station CPU core as I/O processor
Graphics: "Graphics Synthesizer"
- 150 MHz
- Embedded cache
- 4 MB VRAM
- Resolution: 640x480 or 320x240 interlaced
- Colors: 24-bit (16,777,216) maximum, as well as 16-bit (65,536) mode
- Geometry engine:alpha channel, anti-aliasing, Bezier surfacing, Gouraud shading, Mip mapping, perspective correction, Z-buffer
- Polygon rendering: 75 million polygons per second
Audio: SPU2 (+CPU)
- Channels: 48
- Sample rate: 44.1 KHz or 48 KHz
- Memory: 2 MB RAM
- Optical digital output
- Supports original PlayStation CDs
- Video DVD support
- Audio CD support
Like the original PlayStation, the CPU in the PS2 is a RISC processor. RISC stands for reduced instruction set computer, and means that the instructions and computations performed by the processor are simpler and fewer. Also, RISC chips are superscalar -- they can perform multiple instructions at the same time. This combination of capabilities, performing multiple instructions simultaneously and completing each instruction faster because it is simpler, allows the CPU to perform better than many chips with a much faster clock speed.
The floating point unit (FPU) is a special processor that is dedicated to handling complex mathematical equations, particularly those that include non-integers, numbers after the decimal point. These calculations are commonly referred to as floating point operations because the decimal point can move, or float, depending on the outcome of the calculation. The complexity of such numbers can create a tremendous bottleneck if the main processor has to take the time to perform each calculation. To alleviate this, the non-integer numbers are sent to the FPU.
The speed with which the FPU can process these calculations is expressed as floating point operations per second (FLOPS). A gigaflop is one billion of these. So the PS2's 6.2-gigaflop FPU can perform 6.2 billion floating point operations in a second!
The PS2 has several hardware effects that are handled by the Graphics Synthesizer. They include an alpha channel, Bezier surfacing, perspective correction and mip mapping.
The PS2 uses the alpha channel to add transparency effects to an object. This is a special graphics mode used by digital video, animation and video games to achieve certain looks.
- 24 bits are used to define the amounts of red, green and blue, 8 bits each, needed to create a specific color.
- Another 8 bits are used to create a gray-scale mask that acts as a separate layer for representing levels of object transparency.
- The degree of transparency is determined by how dark the gray in the alpha channel is.
- By making an area of the mask dark gray, you can make an object appear to be very transparent
- By making it light grey, you can create special fog or water effects.
Bezier surfacing is a 3-D modeling process that calculates how many polygons are needed to create an object. It bases the number on the level of detail necessary to make the object appear to be smooth to the viewer. The PS2 only performs these calculations on Bezier-surfaced objects that are in the game. Perspective correction makes the texture map resize at the same rate as the object that it is mapped on.
Mip mapping is a cool process. It is a form of texture mapping whereby different sizes of each texture map are made. In essence, the processor replaces the appearance of an object with a more detailed image as you move closer to the object in the game. Let's take a look at how the PS2 uses these maps in trilinear mip mapping:
- The system calculates the distance from your viewpoint to an object in the game.
- The system loads the texture maps for the object. Our three maps will be 64x64 (large), 32x32 (medium), and 8x8 (small).
- The system determines the exact size that the image map needs to be -- let's say 16x16 for our example here.
- Based on the size, it decides which two texture maps to use. For our example, it might choose the medium and small texture maps.
- It then interpolates (averages) between the two texture maps, creating a custom texture map that is 16x16, which it then applies to the object.
The goal is to use the smallest texture map possible given the distance that the object is from the viewer. The smaller the texture map, the lower the processing load. On nearby objects, however, small texture maps create a grainy surface that looks bad, so larger texture maps are used there.