2. GPU

A PICA graphics core (268 MHz) developed by Digital Media Professionals (DMP) is installed as the 3DS GPU. It employs a framebuffer architecture. There are no equivalents of the OBJ and BG concepts previously employed on the Nintendo DS. Unlike rendering with the 3D engine for the Nintendo DS (which was closely connected with the VSync), on CTR rendering is possible until buffers are swapped. In other words, you can control the trade-off between the frame rate and rendering quality.

3D graphics features are based on OpenGL ES 1.1, but some of them correspond to OpenGL ES 2.0. Frequently used 3D graphics features are built into the hardware. Shader programs are supported. Programmable vertex shaders and non-programmable pixel shaders are also provided.

Note:

A simple comparison of the GPU reveals that its specifications do not match the Wii or Nintendo GameCube GPU in terms of vertex operations or fill rate. However, built-in hardware features allow richer imagery to be shown for some scenes than is possible with the Wii or Nintendo GameCube.

2.1. Built-In Hardware Features

Frequently-used graphics features, including some that are not stipulated by the OpenGL ES standard, are built into the hardware. This makes it possible to express varied imagery in a small number of processing steps.

The following features have been provided.

  • Silhouette generation
  • Particle generation
  • Procedural textures
  • Fragment lighting
  • Gas rendering
  • Self-shadowing and soft shadowing
  • Polygon subdivision

Shader programs and reserved uniform settings can use these features for graphics processing.

2.1.1. Silhouette Generation

Silhouette generation is a feature that uses the GPU to detect object edges and render only those edges. You can use this feature to outline a selected object for emphasis or to render soft shadows.

2.1.2. Particle Generation

Particle generation is a feature that renders a large number of random particles. You can use this feature to render explosions, snow, and other effects.

2.1.3. Procedural Textures

Procedural textures represent a feature that automatically generates textures using a combination of random noise and geometric patterns. This feature is a fast, low-cost way to generate textures with regular geometric patterns, in addition to textures that have some randomness in addition to a regular pattern, such as wood grain and marble.

2.1.4. Fragment Lighting

Fragment lighting is used on the 3DS system to light scenes on a per-fragment basis. This feature allows you to use bump mapping, apply environment maps, and run lighting calculations quickly.

2.1.5. Gas Rendering

Gas rendering is a feature used to render gaseous objects, while accounting for intersections and foreground/background relationships with polygon objects. This feature allows you to render surface boundaries with other objects more naturally than, for example, gaseous objects rendered by particles.

2.1.6. Self-Shadowing and Soft Shadows

Self-shadowing and soft shadows are supported by the 3DS system. These features allow an object to cast shadows on itself, and soft shadows to be rendered more naturally around the contours of an object.

2.1.7. Polygon Subdivision

Polygon subdivision is a feature that takes a group of vertices that are input according to fixed rules and automatically splits them into smooth polygons, using the GPU. This feature allows you to render objects with curved surfaces, given a small number of input vertices.

2.2. Rendering Pipeline

3D graphics for 3DS are processed in a series of steps known as the rendering pipeline.

Figure 2-1 shows a block view of the rendering pipeline and Table 2-1 shows what each process does. For more information, see the relevant pages for each process.

Figure 2-1. Schematic View of the Rendering Pipeline

Vertex Input Vertex Operations Geometry Generation Rasterization Triangle Generation Fragment Lighting Early Depth Test Scissor Test Texture Combiners Fog Per-Fragment Operations Framebuffer Operations Texel Generation Clipping Processes that must be run Optional processes

Table 2-1. Actions Performed by Each Process

Process

Description

Vertex input

Processes vertex data input from the application.

Vertex operations

Runs the vertex shaders.

Geometry generation

Runs the geometry shaders.

Triangle generation

Converts all primitives into triangles.

Clipping

Uses a clipping volume to clip primitives.

Rasterization

Converts primitives into fragments.

Scissor test

Eliminates unnecessary fragments via scissoring.

Early depth test

Runs depth tests before per-fragment operations.

Fragment lighting

Processes per-fragment lighting.

Texel generation

Determines texel colors from texture coordinates.

Texture combiners

Combines fragment light colors, texture colors, and so on.

Fog

Renders fog and gas.

Per-fragment operations

Runs tests, blending, logical operations, and other processing on fragments.

Frame buffer operations

Copies data from the framebuffer, runs pixel-read operations, and so on.


CONFIDENTIAL