
三角形とポリゴンの使用方法
Tutorial
intermediate
+0XP
20 mins
Unity Technologies

このチュートリアルでは、3D モデルの三角形を操作しながら、効果的にパフォーマンスを最適化し、現実感のあるビジュアルを維持する方法について学びます。
1. 概要
アプリケーションのパフォーマンスの最適化のためには、まずどの時点においても画面上に表示されている三角形の数がいくつなのかが把握できているように、注意を払っておく必要があります。
3D モデルの品質を想定したレベルに保ちながら安定したパフォーマンスを提供できるように、正しくそのバランスをとるためには、使用する三角形の数を最小限に留めることが重要です。
以下の画像は、2 つの 3D オブジェクトを比較したものです。片方のオブジェクトでは三角形を 584 個、もう片方では 704 個使用しています。どちらのオブジェクトも、シェーディングモードでは同じように表示されます。これは、モデル内のエッジのうち、輪郭とは無関係のものは削除できることを示しています。
Unity では、メッシュのインデックスバッファのフォーマットによって、3D オブジェクトで使用できる頂点の最大数が決まります。
- 16 ビットのインデックスバッファは、最大 65,535 個の頂点に対応しています。
- 32 ビットのインデックスバッファは、最大 40 億個の頂点に対応しています。
使用する三角形の数が減ると、GPU によって処理される頂点の数も減ります。このことは、モバイルプラットフォーム向けのコンテンツを作成する際に特に重要です。頂点の処理は演算の負荷が大きいからです。処理する頂点の数が減ると、全体としてのパフォーマンスが向上し、非常に強力な GPU を搭載しているデバイスに限らず、より多くのデバイスにアプリケーションをリリースできるようになります。
2. さまざまなハードウェアや画面サイズでのテスト
できるだけ多くの対象デバイスで、アプリケーションを表示、テストしておくことは必須です。1 台のコンピューターの画面のみでアプリケーションをテストしたとしても、最適化に必要な情報は得られないものなのです。
モバイル端末の画面は、平均的なコンピューターのモニターよりも小さいことには注意しておくようにしましょう。そのため、多数の三角形が使用されているディテールは、モバイル端末では表示できない場合があります。カメラへ接近した状態の 3D オブジェクトには比較的多くの三角形を使用し、背景の 3D オブジェクトでは少なくしておくというのはベストプラクティスの一つです。
次の画像では、3D モデルがフォアグラウンドに使用されている一方で、低品質の 3D モデルが 2D 背景にベイキングされています。
画面上に表示させておくべき三角形の最大数などが決まっているわけではありませんが、画面上に同時に表示される 3D オブジェクトが多いほど、オブジェクトごとに使用できる三角形は少なくなってしまいます。逆に言えば、表示される 3D オブジェクトが画面上に少ないのであれば、各オブジェクト対して使用できる三角形の数が増えることになります。
対象となるデバイスも重要です。旧式のモバイル端末よりも、新しいハードウェアの方がより複雑なジオメトリを処理できる傾向があります。
3. 重要なエリアにおけるディテール
ポリゴンと頂点は、モバイルプラットフォームでは演算の負荷が大きくなります。アプリケーションのビジュアルクオリティーに大きく影響するエリアへポリゴンを配置することで、処理でバジェットを無駄にせずに済みます。
3D オブジェクトに小さな三角形が多数あっても、モバイル端末の画面が小さかったり、他の 3D オブジェクトの位置の影響を受けたりした結果、見えなくなってしまうことがあります。そのため、見えない可能性がある小さなディテールではなく、オブジェクトの輪郭に影響する大きな形状とパーツにフォーカスを合わせた方がよいでしょう。
以下の画像では、オブジェクトの輪郭が赤で示されています。これを見ると、さまざまな形状が輪郭にどのように影響しているのかがわかります。
画面にあまり表示されないエリアでは、使用する三角形の数を減らしましょう。この例としては、車の底や衣装ダンスの背部などがあります。
細かいディテールのモデリングには、高密度の三角形メッシュの使用は避けてください。代わりに、細かいディテールにはテクスチャと法線マップを使用します。
(注:法線マップは、各ピクセルでサーフェス方向をストアするテクスチャマップです)
次の画像は、法線マップがある場合とない場合の同じメッシュを示したものです。
カメラの視点からは見えることのない裏面や底面などのオブジェクトの削除を検討してください。ただし、この操作はシーンの再利用できる可能性を制限することもあるため、注意して行う必要があります。たとえば、テーブルメッシュの底部を削除すると、そのモデルを逆さまに配置したり、別の用途に使用したりできなくなります。
4. 微小三角形の使用は避ける
微小三角形とは、オブジェクトやシーンの最終的な外観にさほど寄与しない小さな三角形のことです。
ポリゴン数が多い 3D オブジェクトをカメラから遠ざけると、微小三角形の問題が発生します。微小三角形は、サイズで言えば 1 〜 10 ピクセルの三角形とされる場合がほとんどです。
微小三角形は小さすぎて見えませんが、処理に伴う演算負荷は大きくなります。
次の画像は、3D オブジェクトがカメラの近くにある場合の三角形の数(右)と、遠くにある場合の三角形の数(左)を示しています。
次の画像では、強調表示されたエリアのほとんどの三角形が小さすぎるため、モバイル端末では見えません。そのため、こういった三角形は最終的な外観にはあまり寄与していないのです。
次の画像では、遠くから見た柱のベベルが強調表示されています。近くで見ている限りはこのベベルに問題はありません。
この問題を軽減するために実行できる手順をいくつかご紹介します。
- カメラとの距離が変化するオブジェクトには、詳細レベル(LOD)を使用します(詳細は次のチュートリアルで説明します)。正しい LOD を使用すると、遠くにあるオブジェクトをシンプルにすることができます。
- 背景オブジェクトに使用する三角形を少なくします。
- 細かいディティールの作成には、ポリゴンを使用しないでください。代わりに、テクスチャと法線マップを組み合わせましょう。
- 光沢のあるマテリアルはちらつきの原因となるため、細長い三角形のオブジェクトには使用しないでください。
- 画面に表示するには小さすぎるか、最終的なイメージに大きく寄与しない頂点や三角形はマージしてしまいます。
- 三角形の内側の領域がエッジよりも広いことを確認します。具体的には、三角形の辺の長さをなるべく等しくすることが推奨されます。
- 三角形の面積を 10 ピクセルより大きく保つようにします。
- 可能な場合は、細長い三角形をすべてのオブジェクトから削除します。
微小三角形の使用を最小限に抑えることが重要な理由はいくつかあります。
- GPU は、最終的にシーンの価値が高まるものでなかったとしても、三角形と頂点のすべて確実に処理しなければなりません。これが結果的に不要な GPU サイクルの発生につながってしまいます。
- 処理を行うための GPU に送信するデータが増えるほど、メモリ帯域幅に悪影響が及びます。
- 必要な処理量は、モバイル端末のバッテリー寿命に直接影響します。そのため、データが少ないほど、バッテリー寿命が長くなることになります。
5. まとめ
シーン内の三角形の数を最小化し、重要な領域に集中すれば、アプリケーションの全体的なパフォーマンスが高まり、ローエンドのモバイル端末もターゲットに含めることができます。次のチュートリアルでは、詳細レベル(LOD)と、それをジオメトリのさらなる最適化に活かす方法について説明します。