Tag Archives: テクスチャ処理

Direct3D9やレンダリングパイプライン関連用語(3DCG全般の基礎知識めも)

3D情報から2Dの画像が生成されるまでのリアルタイムレンダリングの流れや、各処理での用語について、自分なりに調べてまとめてみました。

Unity5 では Direct3D 9 がデフォルトで利用される2D/3D CG用APIとなっています。Direct3D 9 が利用できなければOpenGL を利用するようです。

また、以下のフローや用語はMSDNのDirect3D 9 を参考にしつつ調べたものです。間違っている点がありましたら指摘いただけると助かります。

それと、以下は特に個人的に重要だと思う箇所をピックアップしており、とりあえずゲームを作るにあたってのレンダリングの全体の流れを抑えられれば良いかなと思っています。

Direct3D 9 のレンダリングパイプライン(自分なりに抜粋)

Direct3D 9 のレンダリングパイプライン(自分なりに抜粋)

Unity5ではグラフィック APIの OpenGLとMicroSoft Direct3D を利用しており、デフォルトではDirect3D 9 を利用、もし利用不可ならばOpenGL を利用するとのこと。(Unity5 のマニュアル参照)

基本的な流れと、処理概要(ほんとに大雑把な理解ですが)は以下のようになるかと思います。

◆テッセレーション(Tessellation)

概要:アプリからメモリを通して受け取った頂点データやプリミティブ(基本的な)3Dデータ(点、線分、三角メッシュなど)を、必要に応じて分割したり変形したりする。(ディスプレイスメント・マッピング(Displacement Mapping)など、Bump Mappingに似ているが見かけ上に陰影をつけるのではなく、実際に形状を変形する)

◆頂点処理(Vertex Processing)

概要:頂点処理に必要なデータリストに変換します。

  • ジオメトリブレンディング(Geometry Blendig) ・・・ 人間の手を曲げる動きに合わせて、肌のMeshの各頂点が関連づけられているボーン(骨格)の方向に応じて、曲げた先の肌meshの頂点の位置情報を算出する処理をするなど。(スキニング(Skinning)と呼ばれる計算)
  • ポイントスプライト(Point Splite) ・・・ ある程度までのサイズの点を描画する。

◆ジオメトリ処理(Geometry Processing)

概要:3D上の座標をカメラが見る2D座標(スクリーン座標)に変換します。

  • カリング処理(Culling) ・・・ 表示されることのない、mesh の裏面を判定し描画から除き処理を軽くするなど
  • クリッピング処理(Clipping) ・・・ 描画範囲を指定する。近すぎるオブジェクトや遠すぎるオブジェクトを描画対象から除き処理を軽くするなど

◆ラスタライズ処理(Rasterize)

概要:ジオメトリ処理で作られた2次元スクリーン座標上のデータを元に、ピクセル単位の2次元画像を出力する。(光源情報や材質情報を反映した色相が計算されたものが生成される)

◆テクスチャ処理

概要:Mesh上に貼り付けるテクスチャのマッピングを行う。

  • テクスチャのラスタリング、フィルタリング処理 ・・・ テクスチャをMesh上に割り当てるときの拡大・縮小等を綺麗に処理するなど。
  • ミップマップ作成(MIP Map) ・・・遠くのオブジェクトと近くのオブジェクとで、同じ解像度のテクスチャを貼り付けるのでなく、遠くのオブジェクトには事前に作成しておいた小さなテクスチャを貼り付けることで、計算速度を上げる処理。(メモリは~1.6倍に程度、使用量が増える)
  • 複数のテクスチャの合成 ・・・ Meshに複数テクスチャが指定されているときの合成を行う。
  • テクスチャリソース管理 ・・・ メモリロード先の自動管理を行う。保存先がVRAMかそれ以外か、Cacheされているかの管理等。CacheについてはFILOで古いものから破棄される。

◆ピクセル処理とレンダリング(Pixel Processing&Rendering)

概要:生成される画像への加工を行う。

  • シザーテスト(Scissor Test) ・・・ 出力画面上で、矩形を指定することで、指定された領域(シザー矩形)以外をレンダリング対象外とする
  • 深度バイアス(Z-Bias) ・・・ 同一平面上にあるMesh(例えば「壁」と「壁の上の影」)の描画順序を決める。Z値を決めておくことで、順序を設定できる。
  • ステンシルテスト(Stencil Test) ・・・ 出力画面上で、マスクを指定しておくことで、シザーテストと違い、様々な形状の範囲をレンダリング対象外とすることができる。
  • バンプマッピング(Bump Mapping) ・・・ 法線マップを計算して平面上での凹凸を陰影で表現する。
  • 光線処理(Specular Add) ・・・ 物体に艶があるとして、光源が物体に反射して光源の色が反映されるハイライト処理の反映をする。
  • フォグ処理(Fog) ・・・ 描画対象の物体までの距離から、霧の濃淡を計算してピクセルを変化させる。遠くの物体を表示させないためのクリッピング処理と合わせて処理を軽くしたりできる。
  • アルファブレンド処理 ・・・ ピクセルのαブレンド(透過率を考慮して、各工程で生成された画像同士の合成処理)を行う。

 

非常に参考になったサイトさま: