幾何学

3D ゲームを多数のデバイスで適切に動作させるには、まず、グラフィック プロセッサを最大限に活用できるように設計された 3D アートが必要です。このガイドでは、モバイルでの 3D アセットの最適化とおすすめの方法を紹介します。これにより、ゲームのパフォーマンスを向上させ、消費電力を最小限に抑えることができます。

この記事の一部は、Arm Limited が寄稿し、著作権を有する著作物に基づいています。

ジオメトリの定義

ジオメトリ(ポリゴン メッシュ)は、3D オブジェクトの形状を構成する頂点、エッジ、フェイスの集合です。これは、自動車、武器、環境、キャラクターなど、ゲーム内のあらゆる種類のビジュアル アセットです。

図 1. 立方体の頂点、エッジ、三角形

ジオメトリは、以下の要素で構成されています。

  • 頂点(vertices): 頂点(vertex)の複数形。この点は、3D 空間におけるオブジェクトの構造を定義します。

  • エッジ: 2 つの頂点を直線で結んだもの

  • 三角形: 3 つの頂点同士を 3 つのエッジで接続すると三角形になります。これは、ポリゴンやフェイスと呼ばれることもあります。 3ds Max、Maya、Blender などの 3D ソフトウェアでは通常、クワッド(四角形)を使用します。クワッドは 4 辺のポリゴンで、変更や操作も簡単です。 このポリゴンは、レンダリングすると三角形として画面に表示されます。

ジオメトリの詳細については、次のセクションをご覧ください。

三角形とポリゴンの使用法

このセクションでは、三角形とポリゴンを使用する際のおすすめの方法についてご紹介します。 これには、以下の推奨事項が含まれます。

三角形の数を減らす

三角形が多すぎると、ゲームのパフォーマンスが低下します。

できる限り使用する三角形の数を減らします。必要な品質を実現するのに必要な最低限の数を使用することをおすすめします。モバイルゲームのコンテンツを制作する際は、パフォーマンスへの影響を検討します。頂点の処理にはコストがかかります。頂点の数が少ないほど、ゲームの全体的なパフォーマンスが向上します。また、使用する三角形の数が少ないほど、強力な GPU がなくてもゲームを実行できるデバイスが増えます。

以下の画像は、三角形の数を抑えながら品質を維持できることを示しています。

左側のオブジェクトには 584 個の三角形があり、右側のオブジェクトには 704 個の三角形があります。

図 2. 三角形の数が異なる 2 つのオブジェクトの比較。シェーディング モードでは同じように見える。左側のオブジェクトでは、シルエットに影響を与えないエッジが削除されている。

モバイル プラットフォームでは、個々のメッシュの最大頂点数は 65,535 であることが一般的です。互換性を最大限に高めるには、この数値を超えないようにする必要があります。

この制限は、すべての GPU で保証されているのが 16 ビット インデックスのサポートのみであるためです。これは 0~65,535 個の頂点を表現できます。最新の GPU のほとんどは、0~4,294,967,295 個の頂点を表す 32 ビット インデックスをサポートしています。16 ビット インデックスを使用する際にサポートされている範囲を超えると、ジオメトリの欠落や不正なレンダリングが発生します。

常に、PC モニターではなく、リリースする予定のデバイスで、ゲームを表示してテストします。詳細レベルの高いモデルの場合、正しくレンダリングされない場合や、モバイル デバイスで表示されないこともあります。

使用する三角形は、フォアグラウンド オブジェクトでは多くし、バックグラウンド オブジェクトでは少なくすることをおすすめします。これは、固定カメラ視点(POV)があるゲームにとって便利です。次の例は、さまざまなオブジェクトのディテールの適切な使用法を示しています。

フォアグラウンド オブジェクトのディテールが三角形で生成されます。バックグラウンドのディテールは平面にベイクされます。

図 3. この例では、バックグラウンド オブジェクトに比べて、フォアグラウンド オブジェクトの詳細レベルが高いことがわかる

1 つのモデルに使用する三角形の最大数は、デバイスとコンテンツによって異なります。画面に表示されるオブジェクトの数が多い場合は、各モデルの三角形の数を減らします。2 つまたは 3 つのオブジェクトしか表示されない場合は、より多くの三角形を含むことができます。

次の例は、異なるデモの 2 つのモデルを示しています。Circuit VR デモのロボット キャラクターは 1 つだけです。オブジェクトが 1 つしかないため、ロボットのモデルの方が三角形の数が多くなります。もう 1 つのモデルは、Armies デモのものです。このデモでは、各フレームに数百人の兵士が登場するため、各兵士に使用される三角形の数は少なくなります。

図 4. 2 つの異なるユースケースの三角形数の比較。左側の CircuitVR ロボットに使用されている三角形は 11,000 個。Armies の兵士の場合は 360 個。

三角形の使用例

次の図は、Armies 技術デモで使用される三角形の数の例を示しています。

Unity で構築された 64 ビットのモバイル技術デモである Armies デモでは、カメラが固定であり、多くのアニメーション キャラクターが使用されています。合計すると、各フレームで約 21 万個の三角形がレンダリングされます。この三角形の数により、約 30 フレーム/秒(FPS)で安定したデモを実現しています。

図 5. Armies 技術デモで使用されている三角形の数を示すレンダリング例

シーンの中で最大のオブジェクトである大砲の塔は、画面の大部分を占めているため、約 3,000 個の三角形が使用されています。

キャラクターではそれぞれ約 360 個の三角形が使用されています。数が多く、遠くからしか見えないため、三角形はあまり使用されていません。カメラの POV で見ると、適切に見えます。

図 6. Armies 技術デモに登場する、三角形の少ない戦士の概観

重要な部分に三角形を使用する

モバイル プラットフォームでは、頂点は非常に高コストです。処理の割り当てが無駄にならないように、ゲームの視覚的な品質を高める部分に頂点を配置します。3D オブジェクトのディテールは、ゲームの最終画面に表示されない可能性があります。小さな画面サイズと 3D オブジェクトの配置が原因で、ディテールが見えない場合があります。

精細なディテールにするのではなく、シルエットに影響する大きな形状に重点を置きます。次の画像は、シルエットに重点を置いた例です。

図 7. ロボットを囲む赤い線はシルエットを表しています

カメラの POV からあまり見えない部分は、三角形の数を少なくすることをおすすめします。たとえば、車の底やタンスの裏などです。オブジェクトの一部が決して表示されるものでない場合は、オブジェクトの該当部分を削除します。

オブジェクトの一部を削除する場合は、オブジェクトの再利用が制限される可能性があるため、慎重に行う必要があります。たとえば、テーブル メッシュの底面を削除した場合、テーブルが上下逆に配置されると、削除された部分がわかってしまいます。

高密度の三角メッシュで細かいディテールをモデル化しないでください。精細なディテールにはテクスチャや法線マップを使用します。次の例は、同じメッシュを法線マップがある場合とない場合で示しています。

図 8. 法線マップが適用されたモデルと適用されていないモデルの比較

マイクロ三角形を削除する

マイクロ三角形は、シーンの最終表示に影響しない非常に小さな三角形です。

ポリゴン数の多い 3D オブジェクトの場合、カメラから遠ざかると、マイクロ三角形の問題が発生します。マイクロ三角形に関する業界標準の定義はありませんが、マイクロ三角形は通常、最終的なイメージで 1~10 ピクセル未満の三角形として解釈されます。マイクロ三角形は、最終的なイメージに影響していなくても、GPU がこうしたすべての三角形に対してすべての処理を実行する必要があるため、不適切です。

マイクロ三角形は、次の 2 つの要因により生じます。

  • ディテールが小さすぎて多くの三角形で構成されている
  • 三角形の多いオブジェクトがカメラから離れたところにある

図 9. マイクロ三角形における距離の影響

図 9 では、手前のロボットにマイクロ三角形はありません。奥のロボットにはマイクロ三角形があります。各三角形のサイズは 1~10 ピクセルしかありません。

図 10. 高精細モデルにおけるマイクロ三角形の比較ハイライト表示された領域の三角形のほとんどは、スマートフォン画面で見るには小さすぎます。

カメラから離れた場所にあるオブジェクトには、詳細レベル(LOD)を使用します。これにより、オブジェクトの複雑さが軽減され、シンプルになります。その結果、三角形の密度が低いオブジェクトが出来上がります。

ディテールに三角形を数多く使用してモデル化しないでください。このような細かいディテールには、テクスチャや法線マップを使用します。小さすぎて最終的なイメージに影響しない頂点や三角形のディテールをマージできます。

メモリ帯域幅に影響を及ぼす可能性があるので、マイクロ三角形の数を減らすことが重要です。三角形が増えると、GPU に送信されるデータも増えます。モバイル デバイスでは、これはバッテリー寿命に影響します。消費電力が増加するとサーマル スロットリングが発生し、GPU の最大パフォーマンスが制限される可能性があります。

細長い三角形は使用しない

これは、最終的なイメージにレンダリングされたときの 1 次元のサイズが 10 ピクセル未満で、画面全体に広がる三角形のことです。一般的に、細長い三角形は他の三角形よりも処理コストが高くなります。

次の画像では、遠くから見ると柱のベベルが細長い三角形になっています。こうしたベベルは近くで見れば問題ありません。

図 11. 細長い三角形になっている、柱のベベル

可能であれば、すべてのオブジェクトから細長い三角形を取り除くことをおすすめします。

光沢のあるオブジェクトの場合、細長い三角形は、カメラの動きに合わせて光がちらつくことがあります。LOD は、オブジェクトがカメラから遠く離れている場合に、細長い三角形を取り除くのに役立ちます。

可能であれば、すべての三角形を正三角形に近くなるようにしてください。これにより、三角形の面積が増え、エッジが少なくなります。一般に、細長い三角形は、大きい三角形と比べるとパフォーマンスが低下します。三角形の面積については、三角形分割をご覧ください。

詳細レベル

詳細レベル(LOD)とは、オブジェクトがビューアから離れるにつれて複雑度を下げる手法を指します。LOD の最も一般的な形態は、複数のバージョンのメッシュを使用し、頂点の数を徐々に減らしていくものです。LOD は処理する頂点の数を減らすだけでなく、マイクロ三角形の問題も回避できます。また、シーンの中で遠くに配置されたオブジェクトの見栄えも良くなります。

可能な限り LOD を使用することをおすすめします。オブジェクトのシルエットに重点を置いてください。頂点を減らす場合は、平坦な領域に重点を置くと効果的です。次の画像は、ロボットモデルに適用されている LOD の使い方を示しています。

左側には、ディテール、三角形の数がともに最も多いロボットがあります。右側になると、ロボットがより遠い位置にあり、ディテールが少なく、使用する三角形の数も少なくなります。

図 12. LOD の変化に伴う使用頂点数の比較

図 12 では、同じオブジェクトでも、200 個の三角形で構成されているものと、2,000 個の三角形で構成されているものとの違いが、遠目にはわかりません。三角形が多いオブジェクトは、リソースコストが高くなりますが、遠くから見たときの見栄えが良くなるわけではありません。

図 13. 三角形の数が異なる遠景モデルの比較

LOD という概念は、シェーダーの複雑さやテクスチャの解像度にも当てはまります。LOD が低いと、よりシンプルなシェーダーと少ないテクスチャでさまざまなマテリアルを使用できます。また、テクスチャにミップマップを用意して、遠くのオブジェクトに低解像度のテクスチャ レベルが適用されるようにする必要があります。こうした措置により、パフォーマンスが向上しますが、データのサイズが大きくなるというトレードオフがあります。

カメラやオブジェクトが静止しているゲームでは、LOD はおすすめしません。LOD の最大のメリットは、カメラに向かってくるオブジェクトと、カメラから離れていくオブジェクトにあります。静的オブジェクトは動かないので、LOD のメリットはありません。

図 14. Armies 技術デモの固定カメラのシーン(LOD を使用しない)

LOD の比率

LOD のために三角形の数を減らす場合は、一貫した比率を使用します。各レベルごとに三角形を 50% ずつ減らしていくことをおすすめします。

シンプルなオブジェクトには LOD を使用しないでください。すでに三角形の数が少ないオブジェクトは、LOD のメリットが得られません。以下の Armies 技術デモの例では、静止画像と三角形が少ないオブジェクトを使用した場合のゲームの見え方を示しています。

図 15. LOD が低くなっていくモデルの比較

カメラから適当な距離間隔を取っていくと、LOD が変化することを確認します。ゲームの中でどのように使われているかを分析してみてください。

図 16. LOD 3 モデルの外観を、近くで見た場合と意図的に離れた位置から見た場合の比較

オブジェクトに設定する LOD がどの程度であれば妥当なのかという明確な基準はありません。 これは、オブジェクトのサイズと、そのオブジェクトの重要性によります。たとえば、アクション ゲームのキャラクターやレーシング ゲームの車には、木のような小さいバックグラウンド オブジェクトよりも LOD レベルが高くなっています。

LOD が多すぎると、CPU リソース消費量も増えますので注意が必要です。表示する LOD を CPU で判別するには、より多くの処理能力が必要となります。LOD はメモリも消費するため、ファイルサイズと VRAM の使用量が増えます。また、LOD モデルの作成と検証にはさらに時間がかかります。

LOD メッシュを作成するには、手動と自動の 2 つの方法があります。

  • LOD メッシュは、どの 3D ソフトウェアでも手動で作成できます。
    • そのためには、エッジループを削除するか、3D オブジェクトの頂点の数を減らします。
    • これにより、アーティストは最終製品を最大限に制御できますが、時間がかかる場合があります。
  • LOD メッシュは自動的に作成できます。
    • 3ds Max の ProOptimizer や Maya の Generate LOD Mesh のように、3D パッケージ内でモディファイアを使用できます。
    • Simplygon や InstaLOD などの LOD 生成ソフトウェアを使用できます。
    • 一部のゲームエンジンには、LOD メッシュを作成して適用できる自動 LOD 生成機能が用意されています。

おすすめの方法

ゲームに必要なリソースを削減しつつ、グラフィックの再現性を保つ手法もあります。

スムージング グループまたはカスタム頂点法線

スムージング グループやカスタム頂点法線を使用してエッジの硬さを定義し、モデルの外観を変更できます。スムージング グループは、低ポリゴンアート ディレクションのシェーディングを改善するのに役立ちます。スムージング グループは、ベイク処理時の UV アイランドの分割や法線マップの品質にも影響します。

スムージング グループの例。左側のロボットはスムージング グループを適用しています。

図 17. スムージング グループのあるモデルとないモデルの比較

3D モデルにスムージング グループを実装する場合は、3D ソフトウェアからエクスポートしてエンジンにインポートする必要があります。

メッシュ トポロジ

新しい 3D アセットを作成するときは、トポロジが適切であることを確認します。クリーン トポロジは、アニメーション キャラクターや変化するキャラクターなどのオブジェクトに欠かせません。トポロジは完璧である必要はありません。エンドユーザーにはワイヤフレームは表示されないこと、テクスチャやマテリアルがモデルの外観に大きな影響を与えることに注意してください。

図 18. 岩のトポロジ、ワイヤフレーム、最終バージョン(Armies 技術デモ)

形状の誇張

モデルを解釈しやすくするために、いくつかの形状を誇張できます。これは、ゲームの種類やスタイルによって大きく異なります。モバイル デバイスの画面は小さいため、非常に小さい特定の形状をキャプチャするのは難しい場合があります。こうした形状を誇張すると、ユーザーは離れた場所からでも形状を確認できます。

たとえば、キャラクターの手を大きくして、見やすくすることができます。

図 19. 視認性を高めるためにプロポーションを誇張したモデル例