こんにちは!テクニカルアーティストの黒澤です。今回は一般的なDCCツールに搭載されているCatmull Clarkによるサブディビジョンサーフェイスと、UnrealEngine4のPN Trianglesの比較をしてみたいと思います。
UE4のPN Triangleですが、MaterialのDetailsのTessellationの項目で、D3D11 Tessellation ModeをPN Trianglesに変更することで適用できます。

PN Triangles以外のTessellationとして、Flat Tessellationがありますが、こちらは適用しただけではメッシュの外観は変わることはありません。メッシュの外観が変わらないことを活かして、平らな壁などに適用し、World Displacementと併用することで凹凸を与えるといった使用法になります。
PN Trianglesの分割数設定
PN Trianglesの分割数はMaterialのTessellation Multiplierによって決まります。(無制限に細かくはなりません)
また関連する項目として、Project SettingのRenderingのTessellationの項目にAdaptive Pixel Per Triangleの設定があります。
こちらはマテリアルのAdaptive Tessellation(カメラからの距離に応じて動的に分割数が変わる設定)が有効なときに、何ピクセル以下で分割し始めるかをプロジェクト全体で定義します。
マテリアルのAdaptive Tessellationが無効なときにはこの値に関係なく、常に指定した分割が行われます。
(Adaptive Tessellationの様子)
それでは本題に入ります。
Case 1 四角ポリゴンに対するテッセレーション

立方体にCatmull Clarkを使用した場合、制御メッシュに内接する形でかなりきれいな球に近い形状が生成されます。
Mayaでは2キーで制御メッシュと生成されたメッシュをプレビューできます。
PN Trianglesもそれなりに球に近い形状にはなるのですが、やや角張りが目立ちます。
滑らかさ以外の大きな違いとして、Catmull Clarkは制御メッシュよりも小さくなるのに対し、PN Trianglesは法線ベクトルをみて膨らむことによりなめらかになります。

Case 2 制御メッシュに抑えのエッジを入れた形状に対するテッセレーション

立方体のエッジ周辺にエッジループを追加し、Catmull Clarkをかけた状態です。Catmull Clarkでは適度な丸みのある角ができますが、PN Trianglesでは、法線ベクトルをみて膨らむため、細いポリゴンの部分が盛り上がってしまいます。
Case 3 ハードエッジを含む形状のテッセレーション

円柱の蓋の部分をハードエッジに設定し、Catmull Clarkをかけた状態です。Catmull Clarkではハードエッジの設定は無視されます。
PN Trianglesではハードエッジの設定は有効になりますが、膨らまないために意味はありません。三角の中心に頂点を追加していくような挙動なので、ハードエッジやポリゴンの周辺エッジは頂点は増えないのです。
Case 4 三角ポリゴンで最適化された形状のテッセレーション

最後にPN Trianglesに最適化されたポリゴン分割を考えてみたいと思います。PN Trianglesでは「ゼルダの伝説」の『トライフォース』のように三角ポリゴンを4つの三角ポリゴンへと分割していきます。そのため、Trisphereに近い形状分割(いわゆる天球体)であれば、テッセレーションの中間状態であっても非常に滑らかに分割されます。

PN Trianglesに合わせたモデリングのコツ
- Catmull Clarkで有効な抑えのエッジは、エッジを追加しただけでは逆に膨らんでしまうため面取りを行う。
- PN Triangleではハードエッジは設定するとメッシュの周辺と同じく膨らまなくなるので設定しない。
- なるべく天球体に近いポリゴン割りでモデリングする。
リアルタイムでのポリゴンのテッセレーションは一時期注目されましたが、実際には殆どの場合でモデルを分割したほうが描画コストを抑えて表示できてしまいます。
そのため、ほぼ無視されてきた機能でしたが、最近ではVRで非常に有効なため(VRではノーマルマップがとても嘘っぽくみえてしまう&プレイヤーが自由に近づけるためにポリゴンの角が目立つ)、最近になって再び注目されてきました。
描画コストの高い表現には変わりないので、用量用法を守って正しく付き合いたいですね。
保存