TOPIC 13|VRワールドをつくるためのプラットフォームでの利用 [2/3] |VR用データの最適化とリダクション
Unityで作成したVR用データはそのままではデータサイズが大きく、動作が重くなってしまいます。VR用データを軽量化するため、3Dポリゴン数を削減するSimplygonプラグインを使った最適化とリダクションの方法を説明します。
【目次】
13.1.5 モデルの最適化ならびにリダクション
13.1.6 Rendererを設定して軽量化する
13.1.7 Colliderの設定
13.1.8 VR用データの作成
13.1.5 _ モデルの最適化ならびにリダクション
以上で、基本的なVRワールドができるのですが、再生して確認すると、重すぎて十分なFPSが出ていません。そこでこのモデルを軽量化していきます。
■ 重さの原因
重さの原因は、いくつかあります。そもそものモデルのデータ量が大きいのが原因ですが、モデルの構成にも問題があります。例えば、各区画のモデルのマテリアル数を見てみると、1000ほどの区画があります。またテクスチャ画像を見ると、図13-31に示すように、建物ごとに分かれているため、使われていない領域も多くあります。
これらは適切な単位ごとにアトラス化という処理をすることで複数のマテリアルやテクスチャをまとめて、より少ないマテリアル数とテクスチャ数でレンダリングできるように最適化するのが理想です。ポリゴン数も300万ポリゴン以上と多いため、こちらも品質をできるだけ落とさずに少なくするのが理想です。
■ Simplygonプラグイン
こうした最適化の作業は、人力で行うことが多かったのですが、近年は自動化のソリューションがあります。ここではSimplygonというプラグインを使います。
Simplygonは、3Dモデルの最適化やリダクションを行うプラグインです。有料の商用ソフトウェアですが、制限付きながらも無料で使えるFreeライセンスもあります。Simplygonのドキュメントを読んでUnityにインストールし、ライセンス認証してください。
インストールの方法については、下記の公式ページを参照してください。USD Pluginのバージョン、インストール方法などに、いくつかの注意点があります。
【Simplygonのインストール】
■ Simplygonによるリダクション
Simplygonを使ってモデルの最適化をする流れは、次のとおりです。
[1]Simplygonの起動
Unityの[Window]メニューから[Simplygon]をクリックして起動します。
[2]処理方法を選ぶ
Simplygonでは、いくつかの最適化処理の種類を選べます。[Add LOD Component]をクリックして[Template]-[Basic]から[Aggregation with material baking]を選択します。
[3]出力設定する
出力の設定をします。ここでは、[Texture Width]と[Texture Height]を、どちらも「8192」に設定します。
[4]変換対象ファイルを選択する
[Hierarchy]パネルから、変換したいモデルを選択します。すべてを一括で変換して、ひとつのモデルに統合することもできますが、巨大なモデルを一括で変換すると品質が悪くなるため、ここでは、ひとつずつ選んで、下にある黄色いアイコンをクリックして変換していきます。
【メモ】
データによっては、途中でエラーになって変換できないことがあります。その場合、データの問題以外に、プラグインのプログラムの不具合が考えられます(その場合は、ソースコードを編集して修正するなど、プログラミングの知識が必要です)。
13.1.6 _ Rendererを設定して軽量化する
これでモデルの軽量化ができました。次に、Rendererを設定して軽量化していきます。
■ Mesh Rendererの設定
Simplygonでリダクション済みのモデルに対して、Mesh Rendererの設定を、図13-36のように修正します。これは影などをオフにすることで軽量化する設定です。リアリティは下がりますが、PLATEAUのオルソ画像は、もともとテクスチャに影が入っているので、そこまで気になりません。
■ シェーダーの変更
同様に、[Material]の[Shader]も変更します。ここでは[Unlit/Texture]という、テクスチャマッピングのなかで、最も軽量なものにしました。
■ Static設定
建築物、橋梁、地形をまとめたGameObjectにおいて、[Static]にチェックを付けます。
■ FPSの確認
以上で、ひとまず最適化は完了とします。再び確認してみると、Editor上で、おおよそ30FPSの速度を実現できています。最初に比べて、5倍ほど改善されていることがわかります。
■ Textureのパラメータ調整
さらに軽量化を進めるため、Textureのパラメータ調整をしていきます。
【メモ】
Textureの設定は、どのような用途を使うかによって、見栄えと速度など、さまざまなトレードオフがあるので、試行錯誤しながらの調整が必要です。
【メモ】
AndroidやiOSの場合、プラットフォームの特性に応じてOverrideの設定をします。PCよりも非力であることを考えると、「SizeをPCより一回り小さめに設定する」「FormatをASTCなどの圧縮率が高いものに設定する」などを検討するとよいでしょう。
Simplygonで軽量化すると、各モデル1枚ずつのTextureにまとめられます。Textureでは、次の点を調整します。
① Max Size
ここでは、次のように設定することにします。
・建築物 8192
・橋梁 4096
・地形 2048
② Mip Map
見た目で判断しながら調整します。チェックを付けると1.5倍のメモリ容量を消費しますが、遠くのオブジェクトがちらつきにくくなります。今回は、テクスチャの構造上、Mip Mapを設定することは推奨しません。
③ CompressionとCrunch Compression
圧縮を有効にするため、[Compression]をNone以外に設定しておきます。また、[Crunch Compression]にチェックを付けておくと、容量がかなり減ります。
最終的にここまでの調整で、Editor上では40FPSを超えるぐらいのフレームレートになりました。今回は、9区画ですが、これを4区画に減らすと、ほぼ90FPSを実現できます。他のギミックなどの負荷も考える必要があるので、どうしても目的のパフォーマンスにならない場合は、区画を減らすなどしてみるとよいでしょう。
13.1.7 _ Colliderの設定
VR空間に取り込んで、そこでプレイする場合、このままだと建築物などをすり抜けてしまいます。こうしたことにならないよう、Mesh Colliderを設定します。このとき[Convex]には、チェックを付けません。
13.1.8 _ VR用データの作成
以上で完成です。ひととおり、建築物・橋梁・地形をUnity上に展開できました。以下では、このVRデータ用を使って、各VRプラットフォームのワールドを製作していきます。
【メモ】
作成したデータは、Prefab化したのちに、ExportしてUnityPackageに変換しておくと、各プラットフォーム用の製作で参照しやすくなります。
【文】
大澤文孝
【監修】
常名 隆司(ユニティ・テクノロジーズ・ジャパン株式会社)
於保 俊(株式会社ホロラボ)