執筆者紹介
「大熊大介さん」
ポジション:メタバース事業本部 エンジニア部 クライアントチーム
参加時期:2022 年 1 月
業界歴:モバイルゲームやブラウザゲームの開発・運営に13年従事。
主にUnityエンジニアとして活動し、ホロアースではフィールド構築、通信まわり、最適化などを担当。
「梶田悠さん」
ポジション:メタバース事業本部 アートデザイン部 3Dチーム
参加時期:2023 年 5 月
業界歴:ノンゲーム領域も含めて広くUnityを使用した開発に7年従事。
テクニカルアーティストとして演出やルックの開発から、グラフィックの最適化、エンジニアリング領域の開発などクライアントサイド全般を見れるスキルを活かして活動中。
はじめに
サンドボックスゲームの魅力のひとつは、プレイヤーが自由に探索できる広大なフィールドです。
ホロアースにおいても日々フィールドの拡張を続け、プレイヤーが新たな冒険に挑むための舞台を提供しています。
しかし、その広大なフィールドを実現するためには地形の生成とパフォーマンスの最適化が非常に重要な課題となります。
広大で複雑な地形はプレイヤーにとって魅力的な体験を提供しますが、同時にパフォーマンスの低下やロード時間の増加といった技術的な課題が伴います。
今回はこれらの課題にどのように対処し、パフォーマンスの最適化をしているのか、現在も取り組んでいる負荷対策の一部をご紹介します。
フィールドの作成とパフォーマンス課題 (大熊)
ホロアースではUnityのTerrainツールを活用してフィールドを作成しています。
Terrainは地形や植生を効率的に作成できる非常に有用なものですが、フィールドの規模が大きくなるにつれてパフォーマンスに影響を与えるようになりました。
特に、大きなTerrainをそのまま使用してゲーム内に組み込むと描画処理が重くなり、フレームレートが低下することがありました。
そこで、これらの課題に対処するためにいくつかの最適化手法を導入しました。
Terrainの分割とLOD(大熊)
まず最初に取り組んだのは、ひとつの大きなTerrainを細かく分割することです。
具体的には、100m x 100mのセクションに分割することで各セクションを個別に最適化できるようにしました。
次に、分割したTerrainからローポリメッシュ(低詳細モデル)を作成し、LOD(Level of Detail)を導入することでパフォーマンスを向上させました。
フィールドをグリッド状に分割し、プレイヤー周囲のグリッドには高詳細なTerrainを、その他のグリッドにはローポリメッシュをロードすることで描画負荷を削減しています。
地形メッシュの改善(梶田)
続いて取り組んだのは、分割されたTerrainを含む地形全体の統合です。
地形はTerrainだけでなく、岩などのオブジェクトが多数配置されて構成されています。
これらのオブジェクトが非常に多くなると、描画処理が増加し、パフォーマンスに悪影響を与えます。
特に、地形に埋まっている部分や重なり合っているオブジェクトも多く、無駄な処理が発生していたので、重なり合ったポリゴンをカットしメッシュを統合することで描画効率を改善させています。
同時に結合後のメッシュをポリゴン削減してLODメッシュの生成もしています。
メッシュの結合、冗長なポリゴンの削除、LODメッシュの生成を叶える為にHoudiniを使用しています。高度なジオメトリの処理を利用できて、パイプラインツールとしても有用なHoudiniによってこれらの処理を出来る限り半自動化させることを目指しています。
TerrainもUnity標準の機能で、地形に使用する岩もUnity上で配置するワークフローになっています。
地形のデータは全てUnityのシーンに存在しているので、これらをHoudini上で扱える形式に変換する必要があります。
Terrainはobjファイルに変換、岩はHoudiniEngine for Unityを用いて直接Houdiniに送っています。
HoudiniEngine for Unityを拡張して地形の素材の情報などもアトリビュートとして持たせています。
Unity上にしかない情報を柔軟に扱えるため、既存のワークフローを崩さずにHoudiniを使用することができます。
▲TerrainのobjファイルをHoudiniで読み込んだジオメトリ
▲Houdiniに送られた岩のジオメトリ
まずは岩のみを結合します。岩のBoundsを元に重なり合っている可能性のある岩同士を洗い出して、全ての岩に対してBoolean SOPを使用して不要なポリゴンを削除します。
その後、Terrainと結合した岩でBooleanする事で地形全体を結合します。
実際にはBooleanを正常に実行する為に各ジオメトリに様々な事前処理が必要ですが、ここでは割愛します。
▲結合処理を終えた地形ジオメトリ
結合した地形ジオメトリからPolyReduce SOPを使用してLODメッシュを生成します。
ポリゴン削減の度合いや条件による重み付けを指定でき、アートやQAからのフィードバックを元に調整し直せるのがHoudiniの強みです。
▲LODメッシュの生成結果(左からLOD0,LOD1,LOD2)
今後の展望(大熊)
今後もフィールドの拡張に伴い、より高度な最適化技術が求められます。
たとえば、現在のグリッドベースのロード方法から、ボクセルベースのロード方法への切り替えや、プロシージャル生成による地形構築など、新たな技術を取り入れることで、さらに広大で動的な世界を作り上げていきたいと考えています。
これらの新たな技術に取り組む際にもパフォーマンスの最適化は最優先課題であり、プレイヤーの体験に悪影響を及ぼさないように引き続き改善を重ねていきたいと思っています。
終わりに(大熊)
地形生成とパフォーマンス最適化は、サンドボックスゲームにおいて非常に重要な要素であり、その実現には技術的な挑戦が伴います。
しかし、これらの課題を乗り越えることでプレイヤーにとって魅力的な世界を提供し、さらに没入感のある体験を実現することができると考えております。
今後も新たな技術を導入し、さらに広がりを持つフィールドを提供するために最適化を続けていきたいと考えています。
ホロアース開発メンバー募集中