tpc13-2

TOPIC 13|VRワールドをつくるためのプラットフォームでの利用 [2/3] |VR用データの最適化とリダクション

Unityで作成したVR用データはそのままではデータサイズが大きく、動作が重くなってしまいます。VR用データを軽量化するため、3Dポリゴン数を削減するSimplygonプラグインを使った最適化とリダクションの方法を説明します。

Share

【目次】

 13.1.5  モデルの最適化ならびにリダクション

 13.1.6  Rendererを設定して軽量化する

 13.1.7  Colliderの設定

 13.1.8  VR用データの作成

13.1.5 _ モデルの最適化ならびにリダクション

以上で、基本的なVRワールドができるのですが、再生して確認すると、重すぎて十分なFPSが出ていません。そこでこのモデルを軽量化していきます。

図13-30 FPSが出ていない

重さの原因

重さの原因は、いくつかあります。そもそものモデルのデータ量が大きいのが原因ですが、モデルの構成にも問題があります。例えば、各区画のモデルのマテリアル数を見てみると、1000ほどの区画があります。またテクスチャ画像を見ると、図13-31に示すように、建物ごとに分かれているため、使われていない領域も多くあります。

図13-31 建物ごとに分けられており、使われていない領域が多くある

これらは適切な単位ごとにアトラス化という処理をすることで複数のマテリアルやテクスチャをまとめて、より少ないマテリアル数とテクスチャ数でレンダリングできるように最適化するのが理想です。ポリゴン数も300万ポリゴン以上と多いため、こちらも品質をできるだけ落とさずに少なくするのが理想です。

Simplygonプラグイン

こうした最適化の作業は、人力で行うことが多かったのですが、近年は自動化のソリューションがあります。ここではSimplygonというプラグインを使います。

Simplygonは、3Dモデルの最適化やリダクションを行うプラグインです。有料の商用ソフトウェアですが、制限付きながらも無料で使えるFreeライセンスもあります。Simplygonのドキュメントを読んでUnityにインストールし、ライセンス認証してください。
インストールの方法については、下記の公式ページを参照してください。USD Pluginのバージョン、インストール方法などに、いくつかの注意点があります。

【Simplygonのインストール】

https://documentation.simplygon.com/SimplygonSDK_10.0.1400.0/unity/gettingstarted/installation.html#simplygon-unity-plugin

Simplygonによるリダクション

Simplygonを使ってモデルの最適化をする流れは、次のとおりです。

[1]Simplygonの起動

Unityの[Window]メニューから[Simplygon]をクリックして起動します。

図13-32 Simplygonを起動する

[2]処理方法を選ぶ

Simplygonでは、いくつかの最適化処理の種類を選べます。[Add LOD Component]をクリックして[Template]-[Basic]から[Aggregation with material baking]を選択します。

図13-33 [Aggregation with material baking]を選択する

[3]出力設定する

出力の設定をします。ここでは、[Texture Width]と[Texture Height]を、どちらも「8192」に設定します。

図13-34 Texture WidthとTexture Heightを設定する

4]変換対象ファイルを選択する

[Hierarchy]パネルから、変換したいモデルを選択します。すべてを一括で変換して、ひとつのモデルに統合することもできますが、巨大なモデルを一括で変換すると品質が悪くなるため、ここでは、ひとつずつ選んで、下にある黄色いアイコンをクリックして変換していきます。

【メモ】

データによっては、途中でエラーになって変換できないことがあります。その場合、データの問題以外に、プラグインのプログラムの不具合が考えられます(その場合は、ソースコードを編集して修正するなど、プログラミングの知識が必要です)。

図13-35 モデルを選んでひとつずつ変換していく

13.1.6 _ Rendererを設定して軽量化する

これでモデルの軽量化ができました。次に、Rendererを設定して軽量化していきます。

Mesh Rendererの設定

Simplygonでリダクション済みのモデルに対して、Mesh Rendererの設定を、図13-36のように修正します。これは影などをオフにすることで軽量化する設定です。リアリティは下がりますが、PLATEAUのオルソ画像は、もともとテクスチャに影が入っているので、そこまで気になりません。

図13-36 Mesh Rendererの設定

シェーダーの変更

同様に、[Material]の[Shader]も変更します。ここでは[Unlit/Texture]という、テクスチャマッピングのなかで、最も軽量なものにしました。

図13-37 シェーダーを変更する

■ Static設定

建築物、橋梁、地形をまとめたGameObjectにおいて、[Static]にチェックを付けます。

図13-38 [Static]にチェックを付ける

FPSの確認

以上で、ひとまず最適化は完了とします。再び確認してみると、Editor上で、おおよそ30FPSの速度を実現できています。最初に比べて、5倍ほど改善されていることがわかります。

図13-39 軽量化を施したところ

■ 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]にチェックを付けておくと、容量がかなり減ります。

図13-40 Textureのパラメータ設定

最終的にここまでの調整で、Editor上では40FPSを超えるぐらいのフレームレートになりました。今回は、9区画ですが、これを4区画に減らすと、ほぼ90FPSを実現できます。他のギミックなどの負荷も考える必要があるので、どうしても目的のパフォーマンスにならない場合は、区画を減らすなどしてみるとよいでしょう。

図13-41 40FPSを超えるようになった
図13-42 区画を減らすと、より高速になる

13.1.7 _ Colliderの設定

VR空間に取り込んで、そこでプレイする場合、このままだと建築物などをすり抜けてしまいます。こうしたことにならないよう、Mesh Colliderを設定します。このとき[Convex]には、チェックを付けません。

図13-43 Colliderを設定する

13.1.8 _ VR用データの作成

以上で完成です。ひととおり、建築物・橋梁・地形をUnity上に展開できました。以下では、このVRデータ用を使って、各VRプラットフォームのワールドを製作していきます。

【メモ】

作成したデータは、Prefab化したのちに、ExportしてUnityPackageに変換しておくと、各プラットフォーム用の製作で参照しやすくなります。

図13-44 Unityで作ったVR用データの例

【文】

大澤文孝

【監修】

常名 隆司(ユニティ・テクノロジーズ・ジャパン株式会社)
於保 俊(株式会社ホロラボ)