テッセレーション
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、コンピュータグラフィックスにおけるテッセレーションについて説明しています。広義のテッセレーションについては「空間充填」、「平面充填」をご覧ください。

テッセレーション(英語: tessellation)は、コンピュータグラフィックスの画像演算手法の1つである。2次元画像上で3次元の複雑な立体を表現するために多数のポリゴン(polygon)が用いられるが、テッセレーションはこのポリゴンメッシュをさらに分割して表現することで、画像をより詳細かつ滑らかで現実感のあるものにする技術である。「テセレーション」とも表記される。テッセレーションの例(三角形と四角形)
上の三角形も下の四角形も当初のデータは各頂点の座標3点と4点に過ぎない。テッセレータはこれらの頂点間を補完する新たな頂点を生成するテッセレーションを行なう。テッセレーションによる分割単位は半端な数でも行なえる。
概要

この手法が登場した背景には、コンピュータの進歩に伴う3次元コンピュータグラフィックスにおけるポリゴン描画数の増加がある。映画やCMなどで用いられるプロダクションレンダリングの分野では、古くからサブディビジョンサーフェイス(細分割曲面)やNURBSのように、デザイナーが操作・管理するデータの量(特徴点の数)を抑制しつつ最終レンダリング品質における詳細度を向上させる仕組みが考え出されてきた。

一方、PCなどで用いられるGPUによる画像処理の演算速度やビデオメモリ(VRAM)容量の向上によって、リアルタイム(実時間)での3D画像の描画においても1フレームあたりのポリゴン数を増すことが可能になったが、今度は元のモデルにおいて膨れ上がった頂点データをGPU側で読み込むために長時間掛かるのが利便性や性能を損なうという問題が出てきた。特に2015年現在でも、マザーボードグラフィックスカード上のディスクリートGPUを接続するPCI-Express規格は、CPU-メインメモリ間やGPU-ビデオメモリ間と比べて遥かに帯域幅が小さく、CPU-GPU間におけるデータの転送速度が性能のボトルネックとなりうる。また、グラフィックスカードに搭載されているビデオメモリは直結型のため、CPU用システムメモリと比べて簡単に増設するわけにはいかず、ビデオメモリに格納するデータはできるかぎり少ないほうがよい。

そのため、最初に読み込むモデルでは粗めのポリゴンにしておいて、GPUで読み込んだ後にそれを演算によって(オンデマンドで)小さなポリゴンに分割・生成することで、大きくなり続ける初期モデルのデータ量を抑制する工夫がなされるようになった。テッセレーションをハードウェアによって実行できれば、例えば入力ジオメトリデータ量は同一だが、詳細化の必要がない遠景は低ポリゴンのままで表現し、視点に近いオブジェクトほどポリゴンを動的に細かく分割することでジオメトリを詳細に表現する、といった最適化が可能になる。テッセレーションは、詳細化が必要な近景に関してのみCPU側で実行してデータを増幅したのち、GPUに転送して描画する形にすることもできるが、実際の描画を担当するGPU側で増幅できるほうがCPUの負担やCPU-GPU間のデータ転送量を減らすことができる。

PC用リアルタイム3DグラフィックスAPIの標準規格には、主にマイクロソフトによって開発されているDirectXDirect3D)と、Khronosグループによって管理されているオープン規格であるOpenGLが存在するが、Direct3D 9およびOpenGL 2.xでのテッセレーション[1][2]AMDATI)による拡張実装にとどまる[3][4][5][6][7]など、テッセレーション機能に関しては長らく標準化が進まない状況にあった。2006年11月にWindows Vistaとともにリリースされた「DirectX 10」や2009年8月にリリースされた「OpenGL 3.2」ではジオメトリシェーダーが標準導入され、また2009年10月にWindows 7とともにリリースされた「DirectX 11」や2010年3月にリリースされた「OpenGL 4.0」からはついにテッセレーションシェーダーが標準導入されるに至った。DirectX 11やOpenGL 4に対応するハードウェアにおいては、実時間処理でのテッセレーションは幾つかの高性能なGPU内の専用回路であるテッセレータ(tessellator)によって実現されるようになっている。なお、組み込み環境向けのOpenGL ESにおいても、2015年8月にリリースされたOpenGL ES 3.2においてジオメトリシェーダーとテッセレーションシェーダーが標準化された。後発の下位レベルグラフィックスAPIであるVulkanMetalにおいてもテッセレーションのパイプラインを利用することができる。
描画パイプラインとテッセレーション

以下では、(PC用グラフィックスの分野に限定するならば)実質的な標準の1つとなっているマイクロソフト社のDirectX 11でのテッセレーション機能について説明する。なおジオメトリシェーダーもまたディスプレースメントマッピングなどでテッセレーションに応用することができる[8][9]が、マイクロソフトは(性能上の問題から)ジオメトリシェーダーをテッセレーションに使用することを推奨していない[10][11]

DirectX 11ではレンダリングパイプラインの途中(頂点シェーダーとジオメトリシェーダーの間)に新たにテッセレーション機能を加えており、以下の3つのステージから構成される。

ハル シェーダー(hull shader)

テッセレータ(tessellator)

ドメイン シェーダー(domain shader)

ハルシェーダーでは、パッチ(patch)情報に基づいてポリゴンごとの曲面の制御点(control points)の算出を行なう[注 1]。ハルシェーダーはプログラマブルシェーダーであり、ポリゴンの分割数をすべて一様に与えることもできれば、稜線近くだけポリゴンの分割度(Tess Factor)を増すような工夫も行なえる[注 2]

テッセレータでは、ハルシェーダーの指示に従ってポリゴンを実際に分割する。Direct3Dでは元のポリゴンとして3角形、4角形、線分が用いられる。

ドメインシェーダーでは、ハルシェーダーが計算した曲面生成用の制御点に沿ってテッセレータが分割したポリゴンごとの頂点座標を算出する。ドメインシェーダーはプログラマブルシェーダーであり、例えば凹凸データを与えることでディスプレースメントマッピング(Displacement Mapping)も可能である。

テッセレーション処理は描画パイプラインにおけるオプションであり、もしテッセレーションを行なわないならば、上記の3つのステージはスキップすればよい。

DirectX 11では、頂点シェーダーからデータを受け取り、テッセレーションを経て、ジオメトリシェーダーへと送られる構造になっている。

OpenGL 4では、ハルシェーダーに相当するものはテッセレーション制御シェーダー(tessellation control shader, TCS)、テッセレータに相当するものはテッセレーションプリミティブジェネレーター(tessellation primitive generator)、そしてドメインシェーダーに相当するものはテッセレーション評価シェーダー(tessellation evaluation shader, TES)と呼ばれる。
応用例

コンピュータゲームでよく用いられる手法のひとつであるLOD(Level of Detail)は、演算量を縮減する目的から、視点からの距離に応じて画像の遠部にある立体のポリゴン数を減らす工夫であり、テッセレーションを用いない従来手法ではポリゴン数を変えた数種のモデル(ハイポリゴンモデル?ミドルポリゴンモデル?ローポリゴンモデル)を距離に応じて切り替えるようにしていたが、切り替え時に外形の形状が突然変わるために不自然な印象を与えていた(ポッピング現象)。テッセレーションでは分割度を自在に変化させられるのでこのような問題は本質的に発生しないとされる。このような手法は距離適応型テッセレーション(Distance Adaptive Tessellation)と呼ばれる[12]

また、ピクセル陰影処理において、リアリティ向上のためにテクスチャを利用してバンプマッピングや法線マッピングなどを行なっているが、これらは最良の場合でも視線方向から見た陰影を元の形状に貼り付けているだけのフェイク技法であるため、元の形状が稜線によって途切れる凹凸形状までは変化しない。具体的には、例えば球状の物体にいくらテクスチャを貼り付けて凹凸に見せても、テッセレーションを用いない限り周囲の外形は常に円形でしかない。テッセレーションではテクスチャ情報などを元に凹凸の形状を後付けで加える「ディスプレースメントマッピング」(Displacement Mapping)と呼ばれる表現手法が容易に行なえ、先の例では外形まで変更できるため、さらにリアリティを向上することができる。
テッセレーションとコンピュータ・モデル有限要素問題を解決するために使用された円盤のテッセレーション。これらの矩形レンガは、辺同士のタイリングと考えられ、トポロジー的に六角形タイリング(英語版)と同一であるようなテッセレーションにて接続されている。ここで、それぞれの六角形は隣接レンガによってその長辺が2つに分割されるような矩形に帰着(平坦化)される。このバスケット織り(英語版)タイリングはトポロジー的にカイロタイリング(英語版)と同一であり、それぞれの矩形の一方の側面は2つの辺として数えられ、2つの隣接する矩形における1つの頂点によって分割される。

コンピュータグラフィックスの分野では、テッセレーション技術はポリゴンデータセットの管理およびレンダリングに適した構造への分割によく用いられる。通常は、少なくとも実時間レンダリングにおいては、データは三角形面にテッセレートされるが、これはときおり「三角形面化(triangulation)」と呼ばれる。テッセレーションはDirectX 11とOpenGL 4における主要な機能である[13][14][15][16][17]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:30 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef