青木そらす(@sorasu2113)
自己紹介
 青木そらす(@sorasu2113)と申します
 VR / ARのアプリケーションを趣味で作ってます
 VR空間で究極の幸せを獲得したいと目論む人です
何がしたいか
何がしたいか
60FPSを維持した状態で
何がしたいか
60FPSを維持した状態で
制服Unityちゃんに
何がしたいか
60FPSを維持した状態で
制服Unityちゃんに
保健室で膝枕してもらいたい
検証環境
 Unity 5.0.2 f1
 Oculus Mobile SDK 0.5.1
 Galaxy S6 edge / ファーム最新(2015年5月30日現在)
前提条件①
 出すもの … 制服Unityちゃん、男性キャラ、保健室
 保健室はStaticにチェックを入れる
 固定視点で移動は無し
 ShadowはBake以外使わない
前提条件②
 Light Mapを作成する Lightingは極力Bake設定
 Light Probeを設置、Reflection ProbeはBoxとBake指定
 Static Batching、Dynamic Batching、GPU Skinning
Multi Thread Renderingは有効。
前提条件③
 Unity Gear VR Gameのパフォーマンスを搾り出せ(抜粋)
 フレーム当たりのドローコール数 : 50~100
 フレーム当たりのポリゴン : 5万~10万
 テクスチャはできるだけ少なめに(ただし大きくても可)
数字の出し方
 SetPassCall – UnityEditor上で確認
 FPS – 実機で計測した値
SetPassって何者?
 【Unity】Unity Performance Casual Talk
「ドローコール伝説の終わり」 レポート
 http://qiita.com/baba_s/items/5260807ced7fc3c02ca6
SetPassって何者?
 ざっくり言うと
 Unity→OpenGLドライバに命令を投げる回数
 オブジェクトを大量に出しても、共通マテリアルなら
 1Mesh * 1Material * 1PassのShader = SetPassCall 1
 Materialの個数やShaderのPassが多いと増える
 Shaderのプロパティを動的に変更すると、別物になるので
 インスタンス毎にSetPassが呼ばれる → 良くない
普通に出してみる
 SetPassCall – 90
 FPS – 50
そこそこのFPSが出てしまった…
もっと快適にできる
 マテリアルとメッシュが複数あるため、個々に描画している
 シェーダーの中でPassを複数呼んでいる
 ここを減らす
施策
 モデルデータをMeshBakerで結合する($50)
 シェーダーを可能な限りMobileに変える
出してみる
 SetPassCall – 16 ~30
 FPS – 60
出してみる
 SetPassCall – 16 ~ 30
 FPS – 60
どれだけ減ったのか
 背景 Set Pass Call - 72→ 2
 男性キャラ Set Pass Call – 8 → 4
 Unityちゃん Set Pass Call – 30 → 22
それでもSetPassCallが減らせなかった場合
 固定視点に限り背景をSkyBox化することで
 SetPassCallを6まで抑えられます。
 ※両眼で12 Set PasCallです
 ※今回、背景が2Passで描画出来てしまったので紹介だけです
まとめ
 オブジェクトは極力、MeshBakerを使って1つにまとめる。
 Materialが細かく分かれてしまった場合は
SkyBoxでごまかす。
 このコンテンツは、『ユニティちゃんライセンス』で提供されています。

Gear vrの最適化方法を調べてみた