ユニティエバンジェリストが語る、HoloLens開発時の最適化手法【de:code2017】
日本マイクロソフトは23、24日、ザ・プリンス・パークタワー東京にて同社の開発者向けイベント「de:code 2017」を開催した。技術講演の中には「実践!Unity を使った HoloLensアプリ開発」と題して、ユニティ・テクノロジーズ・ジャパン合同会社の伊藤周氏による講演もあった。
講演では、HoloLensの活用事例、Unityを使ったアプリケーションの基本的な作り方、アプリ開発時の最適化手法が紹介された。本稿では、アプリ開発時の最適化手法についてまとめよう。
モバイル端末と思ってHoloLensのアプリを開発しよう
HoloLensは多くのVR機器と異なり、PCと接続しなくても単体で使えることが特徴だ。しかし、PCよりは性能が低く、PC向けVRコンテンツと同じ感覚で開発すると処理落ちするなどの問題がある。そこで、端末に必要な最適化をどうすればよいか、という視点で考えると良い。
最適化の方法としては、Unityの中で行う設定とソースコードの書き方によるものがある。それぞれピックアップしていこう。
また、本講演で提案された最適化手法については、Microsoftの公式HPでも言及しているので、そちらも参考にするとよいだろう。
Unityで行う設定
まずはBuild時の設定だ。
Forward Renderingとは、Unityで標準で使われているレンダリングの方式である。別方式のDeffered Renderingを使うことでライトや影を厳密に表現できるが、メモリ消費が大きい。そこで、HoloLensではForward Renderingを選択することが推奨されている。
ちなみに、Forward Renderingは、Edit / Project Settings / Graphicsを選択したときのInspector画面に含まれている。
ここでのTier1(Low)、Tier2(Middle)、Tier3(High)は、Windows Storeアプリをビルドするときに選択される。どのような基準で選択されるかは不明だが、基本設定では全てのTierでForwardを選択しておけばよいだろう。
また、depth bufferとは、深さ方向の表示情報を使ってCGの描画を行うためのバッファを意味する。このバッファの領域を減らすことでHoloLensの処理負荷を下げることができる。下記のように、16bitに設定する。
また、Shader Variant Collectionとは、アプリに使うShaderをあらかじめ登録しておくことで、実行時のShader読み込み速度を短縮してくれるものだ。
Shader Variant Collection機能の使い方については、こちらの記事でわかりやすく解説されている。
続いて、グラフィックに関する設定だ。描画による負荷を減らすため、いろいろと気をつけるべきところがある。
下記のスライドを参照してほしい。
さらに、Unity全般に関する設定として、いくつかの注意事項があった。
ソースコードの書き方による調整
こちらも同じく、スライドを参照してほしい。
細かく調査したいときは?
Unityに標準搭載されている Unity Profilerを使おう。HoloLensで有効にするには、Build時に以下のようにDevelopment BuildとAuto Connect Profilerにチェックをつける必要がある。
このように、CPUやGPUの使用率など、各種情報を見ることができる。
最後に、HoloLensのパフォーマンスを上げる方法として、ポリゴンを最適化するプログラム「Simplygon」が紹介された。
これは、Microsoftが無償公開しており、Microsoftアカウントでログインすると、メッシュの削減とモデル生成の2つが使えるようになる。
Optimize (メッシュ削減)
Generate Model (モデル生成)
5/28時点では、生成したモデルはobj形式のみだった。ただし、生成できるモデルはUnityの基本モデルと同一なので、Unity向けに使う限りは必須ではないt。
ちなみに、本講演では、Optimizeを試した例として、Unity仮面モデルのメッシュを削減した結果が公開されていた。
このように、元データによっては、数十分の一にまで頂点数を削減できるので、HoloLensアプリには適したツールと言える。
伊藤氏の発表通り、HoloLensのアプリを作るときはVRとは別の観点で注意が必要だ。今回の講演では注意すべき項目がまとまっているので、今後開発するときの参考になるだろう。
(TEXT by Takayuki Fujiwara)
*de:code 2017まとめページはこちら。
●関連リンク
・HoloLens
・de:code 2017
・Performance recommendations for Unity (Microsoft)
・Unity5 ShaderVariantCollectionを使用しShaderのPreloadを行う
・Simplygon