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.
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.
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. |