このページに書いていること
Unity や Unreal Engine などが3D を表示するときに使用している、Microsoft 社の3Dレンダリングエンジンである Direct3D9 について、基本的な動作の流れを記載してます。
Direct3D9(Unity5)を利用したレンダリングの流れ
Unity5 でのリアルタイムレンダリングの流れ
3D情報から2Dの画像が生成されるまでのリアルタイムレンダリングの流れや、各処理での用語について、自分なりに調べてまとめてみました。特に個人的に重要だと思う箇所をピックアップしており、とりあえずゲームを作るにあたってのレンダリングの全体の流れを抑えられれば良いかなと思っています。
Unity5 では Direct3D 9 がデフォルトで利用される2D/3D CG用APIとなっています。Direct3D 9 が利用できなければOpenGL を利用するようです。
Direct3D9 のフロー抜粋
また、以下のフローや用語はMSDNのDirect3D 9 を参考にしつつ調べたものです。
Direct3D 9 のレンダリングパイプライン(自分なりに抜粋)
Unity5ではグラフィック APIの OpenGLとMicroSoft Direct3D を利用しており、デフォルトではDirect3D 9 を利用、もし利用不可ならばOpenGL を利用するとのこと。(Unity5 のマニュアル参照)
基本的な流れと、処理概要は以下のようになるかと思います。
テッセレーション(Tessellation)
概要:アプリからメモリを通して受け取った頂点データやプリミティブ(基本的な)3Dデータ(点、線分、三角メッシュなど)を、必要に応じて分割したり変形したりする機能です。
- 例えばディスプレイスメント・マッピング(Displacement Mapping)など、Bump Mappingに似ているが見かけ上に陰影をつけるのではなく、実際に形状を変形する機能があります。
頂点処理(Vertex Processing)
概要:頂点処理に必要なデータリストに変換します。
- ジオメトリブレンディング(Geometry Blending) … 人間の手を曲げる動きに合わせて、肌のMeshの各頂点が関連づけられているボーン(骨格)の方向に応じて、曲げた先の肌メッシュの頂点の位置情報を算出する処理をするなどを行います。肌を曲げたりする計算処理をを特にスキニング(Skinning)と呼んだります。
- ポイントスプライト(Point Sprite) … ある程度までのサイズの点(Point)を描画します。
ジオメトリ処理(Geometry Processing)
概要:3D上の座標をカメラが見る2D座標(スクリーン座標)に変換します。
- カリング処理(Culling) … 表示されることのないメッシュの裏面を判定して、描画から除いて、画面描画の処理を軽くする処理を行います。
- クリッピング処理(Clipping) … 描画範囲を指定して、近すぎるオブジェクトや遠すぎるオブジェクトを描画対象から除き処理を軽くするなどを行います。
ラスタライズ処理(Rasterize)
概要:ジオメトリ処理で作られた2次元スクリーン座標上のデータを元に、ピクセル単位の2次元画像を出力します。このとき、光源情報や材質情報を反映した色相が計算されたものが生成されます。
テクスチャ処理
概要:ポリゴンメッシュ上に貼り付けるテクスチャ画像のマッピングを行います。
- テクスチャのラスタリング、フィルタリング処理 … テクスチャをメッシュ上に割り当てるときの拡大・縮小等を綺麗に処理するなどの処理をします。
- ミップマップ作成(MIP Map) … 遠くのオブジェクトと近くのオブジェクとで、同じ解像度のテクスチャを貼り付けるのでなく、遠くのオブジェクトには事前に作成しておいた小さなテクスチャを貼り付けることで、計算速度を上げる処理です。メモリは使用しない時と比べて約~1.6倍程度に使用量が増えます。
- 複数のテクスチャの合成 … メッシュに複数テクスチャが指定されているときの合成を行います。
- テクスチャリソース管理 … メモリロード先の自動管理を行う。保存先がVRAMかそれ以外か、Cacheされているかの管理等。CacheについてはFILOで古いものから破棄されます。
ピクセル処理とレンダリング(Pixel Processing & Rendering)
概要:生成される画像への加工を行う。
- シザーテスト(Scissor Test) … 出力画面上で、矩形を指定することで、指定された領域(シザー矩形)以外をレンダリング対象外とします。
- 深度バイアス(Z-Bias) … 同一平面上にあるMesh(例えば「壁」と「壁の上の影」)の描画順序を決める。Z値を決めておくことで、順序を設定できます。
- ステンシルテスト(Stencil Test) … 出力画面上で、マスクを指定しておくことで、シザーテストと違い、様々な形状の範囲をレンダリング対象外とすることができます。
- バンプマッピング(Bump Mapping) … 法線マップを計算して平面上での凹凸を陰影で表現します。
- 光線処理(Specular Add) … 物体に艶があるとして、光源が物体に反射して光源の色が反映されるハイライト処理の反映します。
- フォグ処理(Fog) … 描画対象の物体までの距離から、霧の濃淡を計算してピクセルを変化させる。遠くの物体を表示させないためのクリッピング処理と合わせて処理を軽くしたりできます。
- アルファブレンド処理 … ピクセルのαブレンド(透過率を考慮して、各工程で生成された画像同士の合成処理)を行います。
非常に参考になったサイトさま
ページの更新履歴
更新日 |
更新内容 |
2015.11.5 |
ページ公開 |
2018.3.24 |
スマホからレイアウトが崩れて読みにくいので修正。ついでに文章構造と内容も訂正。アイキャッチ画像も作成・追加 |