ポリゴンメッシュ
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Dolphin_triangle_mesh.png/250px-Dolphin_triangle_mesh.png)
ポリゴンメッシュ (polygon mesh) または非構造格子 (en:unstructured grid) とは、3次元コンピュータグラフィックスとソリッドモデリングの多面体オブジェクトの形状を定義する頂点、辺、面の集合のこと。レンダリングを簡素化するため、通常は三角形、四角形または他の単純な凸型のポリゴンで構成されているが、より一般的な凹面の多角形、または穴のあるポリゴンで構成されることがある。
ポリゴンメッシュの研究は、コンピュータグラフィックスや幾何学モデリングの大きな副分野である。様々なポリゴンメッシュの表現が、様々なアプリケーションや目的に合わせて使用されている。メッシュ上で実行される操作にはブール論理、平滑化 (smoothing)、簡素化、その他多数が含まれる。ネットワークのための表現、"ストリーミング"と"プログレッシブ"メッシュは、ネットワーク上でポリゴンメッシュを送信するために使用される。ボリュームメッシュは構造物の表面 (surface) と内容部 (volume) の両方を明示的に表現するという点で、ポリゴンメッシュとは別個のものである(ポリゴンメッシュは、表面のみを明示的に表現し、内容部は暗黙的に表現する)。ポリゴンメッシュは広くコンピュータグラフィックスで使用されており、レイトレーシング、衝突検出、および剛体力学のためのアルゴリズムが存在する。
メッシュのモデリングの要素
ポリゴンメッシュで作成されたオブジェクトは、異なるタイプの要素を格納する必要がある。これらには、頂点、辺、サーフェス、ポリゴンや曲面などがある。多くのアプリケーションでは、頂点、辺、そして面またはポリゴンのどちらかが格納されているのみである。レンダラは3つの辺を持つ面(すなわち三角形面)のみをサポートすることがあり、その場合、ポリゴンは、上記の「イルカを表現している三角形メッシュの例」に示すように、多数の三角形面で構成されている必要がある。しかし、多くのレンダラは4辺もしくは5辺以上のポリゴンをサポートしているか、またはオンザフライで三角形に変換することができるため、三角形の形式で保管する必要がなくなる。また、ヘッドモデリングのような特定のアプリケーションでは、3辺と4辺の両方を作成できることが望ましい。
頂点 (vertex) は、色、法線ベクトル、テクスチャ座標などの他の情報と共に位置を表す。辺 (edge) は2つの頂点間の接続のことである。面 (face) とは閉じられた辺の集合であり、三角形の面は3つの辺を持ち、四角形の面は4つの辺を持つ。ポリゴンは面の集合である。多辺の面をサポートしているシステムでは、ポリゴンと面は等価である。しかし、ほとんどのレンダリングハードウェアは、わずか3辺もしくは4辺のみをサポートしていて、それゆえポリゴンは、複数の面として表現される。数学的にポリゴンメッシュは、幾何・形状・トポロジーなどの他の要素を持つ、非構造格子または無向グラフと考えることができる。
サーフェス(しばしばスムージンググループと呼ばれる)は、便利だが、滑らかな領域をグループ化するには必要とされない。ソーダの缶など、キャップとシリンダーを考えてみよう。円筒形状の側面のスムーズシェーディングのためには、すべての面法線は中心から水平に離れる方向を指している必要があるが、キャップの法線は ±(0,0,1) 方向を指している必要がある。単一のフォンシェーディングされたサーフェスとしてレンダリングされると、折り目の頂点は、不正な法線を持つことになる。従って、ポリゴンが3辺の面をグループ化するのとまったく同様に、平滑化を停止する場所を決定するためのなんらかの方法が、メッシュの滑らかな部分をグループ化するのに必要とされる。サーフェス/スムージンググループを提供する別の方法として、メッシュは、分割角度など、同じデータを計算するために必要な他のデータを含むことがある(この閾値以上の法線を持つポリゴンは自動的に別のスムージンググループとして扱われたり、または分割や面取りなどのいくつかの技法が自動的にそれらの間の辺に適用される)。さらに、非常に高解像度のメッシュでは、ポリゴンが非常に小さいため必要性が無意味になるとして、スムージンググループを必要とする問題を受けにくくなる。さらに、単にメッシュの残りの部分からサーフェスを切り離すという別の代替方法もある。レンダラは、連続していないポリゴン境界をこえてエッジを滑らかにすることはしない。
メッシュフォーマットは、他の有用なデータを定義することもあるし、しないこともある。グループはメッシュの中の独立した要素を定義し、骨格アニメーション (en:skeletal animation) のための独立したサブオブジェクトを決定したり、非骨格アニメーションのための独立したアクターを決定したりするのに有用である。一般的にマテリアルは、レンダリング時にメッシュの異なる部分が異なるシェーダーを使用できるように定義される。ほとんどのメッシュフォーマットは、何らかの形態のUV座標も仮定している。UV座標は、2次元テクスチャマップのどの部分が異なるポリゴンのどの部分に適用されるかを表示するために"展開"された、メッシュの別の2次元表現である。