2. GPU

3DS の GPU には、DMP 社開発の PICA グラフィックスコア(268 MHz)を搭載しています。フレームバッファアーキテクチャを採用しており、DS のときのような OBJ、BG という概念はありません。また、VSync と密接に連動していた DS の 3D エンジンと違い、バッファを切り替えるまでレンダリングを行うことができます。つまり、フレームレートとレンダリングの質をトレードオフの関係で調節することができます。

3D グラフィックス機能は OpenGL ES 1.1(一部機能は OpenGL ES 2.0 相当)をベースにしており、3D グラフィックスでよく使用される機能はハードウェアで搭載されています。シェーダプログラムに対応しており、プログラマブルな頂点処理シェーダと、非プログラマブルなピクセル処理シェーダを備えています。

補足:

GPU を単純に比較すると、頂点処理やフィルレートといったスペックは Wii やゲームキューブには及びません。しかしハードウェア搭載された機能で、シーンによっては Wii やゲームキューブよりもリッチな映像を表現することができます。

2.1. ハードウェアで搭載されている機能

OpenGL ES 標準には規定されていないものを含め、よく使用されるグラフィックス機能をハードウェアで搭載することにより、少ない処理ステップ数で多彩な表現を可能としています。

提供する機能には以下のものがあります。

  • シルエット生成
  • パーティクル生成
  • プロシージャルテクスチャ
  • フラグメントライティング
  • ガスレンダリング
  • セルフシャドウ、ソフトシャドウ
  • ポリゴンサブディビジョン

これらの機能は、シェーダプログラムや予約されたユニフォームの設定によってグラフィックス処理に利用することができます。

2.1.1. シルエット生成

シルエット生成は、オブジェクトのエッジを GPU が検出し、エッジのみを描画する機能です。選択したオブジェクトを強調するために輪郭を縁取る場合やソフトシャドウの描画に利用することができます。

2.1.2. パーティクル生成

パーティクル生成は、大量のパーティクルをランダムに描画する機能です。爆発や雪など、エフェクト処理の描画に利用することができます。

2.1.3. プロシージャルテクスチャ

プロシージャルテクスチャは、ノイズと幾何学模様を組み合わせたようなテクスチャを自動的に生成する機能です。幾何学模様のように規則的なパターンや、木目や大理石のようにランダム性を持ちながらも規則的なパターンのテクスチャをローコストで高速に作成することができます。

2.1.4. フラグメントライティング

3DS のライティング処理はフラグメント単位で行われるフラグメントライティングです。バンプマップ、環境マップの適用や、ライトの計算を高速に行うことができます。

2.1.5. ガスレンダリング

ガスレンダリングは、ポリゴンオブジェクトとの交差や前後関係を考慮しながらガス状物体を描画する機能です。パーティクルなどで描画されるガス状物体に比べ、ほかのオブジェクトとの境界面をより自然に描画することができます。

2.1.6. セルフシャドウ、ソフトシャドウ

3DS のシャドウ機能はセルフシャドウおよびソフトシャドウに対応しています。オブジェクト自身に落ちる影や、より自然で柔らかな輪郭の影を描画することができます。

2.1.7. ポリゴンサブディビジョン

ポリゴンサブディビジョンは、決められた法則で入力された頂点群を GPU が自動的に分割し、ポリゴンを滑らかにする機能です。数少ない頂点の入力で、滑らかな曲面を持つ物体を描画することができます。

2.2. レンダリングパイプライン

3DS の 3D グラフィックス処理は、レンダリングパイプラインと呼ばれる一連の処理に沿って行われます。

レンダリングパイプラインの概略図を図 2-1 に、各プロセスで行われる処理を表 2-1 に、それぞれ示します。処理の内容については関連するページを参照してください。

図 2-1. レンダリングパイプラインの概略図

頂点入力 頂点処理 ジオメトリ生成 ラスタライズ トライアングル生成 トライアングルセットアップ フラグメントライティング アーリーデプステスト シザーテスト テクスチャコンバイナ フォグ パーフラグメントオペレーション フレームバッファオペレーション テクセル生成 クリッピング 必ず実行されるプロセス 実行が選択可能なプロセス

表 2-1. 各プロセスで行われる処理

プロセス

処理内容

頂点入力

アプリケーションから入力された頂点データを処理する

頂点処理

頂点シェーダを実行する

ジオメトリ生成

ジオメトリシェーダを実行する

トライアングル生成
(トライアングルセットアップ)

プリミティブをすべて三角形プリミティブに変換する

クリッピング

クリップボリュームによるプリミティブのクリップ処理を行う

ラスタライズ

プリミティブをフラグメントに変換する

シザーテスト

シザリングで余分なフラグメントを削減する

アーリーデプステスト

フラグメント処理の前にデプステストを行う

フラグメントライティング

フラグメント単位のライティング処理を行う

テクセル生成

テクスチャ座標からテクセルの色を決定する

テクスチャコンバイナ

フラグメントライトのカラーやテクスチャカラーなどを合成する

フォグ

フォグおよびガスの描画を行う

パーフラグメントオペレーション

フラグメントに対して、テスト、ブレンディング、論理演算などの処理を行う

フレームバッファオペレーション

フレームバッファからのコピー、ピクセルリード処理などを行う