【Unity】Oculus Quest用のアプリをサクサク動かすためにやっておくべき設定項目総まとめ

UnityでOculus Quest用のアプリをサクサク動かすためにやっておくべき設定項目についてまとめます。

Unity2019.2.10

はじめに

この記事ではOculus Quest用のアプリを作る際に設定しておくべきUnityの設定項目についてまとめます。
基本的なビルド設定については下記の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

一覧

最初に、設定しておくべき項目を一覧化しておきます。
各々の項目については次節以降細かく説明していきます。

  • テクスチャ圧縮形式はASTCにする
  • Development Buildを外す
  • マルチスレッドレンダリングは有効に
  • テクスチャフィルタリングをトライリニアにするか異方性フィルタリングを使う
  • オクルージョンカリングを使う
  • フォワードレンダリングを使う
  • アンチエイリアシングは4x MSAAを使う
  • テクスチャの最大解像度は2048に
  • 衝突判定のある動的オブジェクトにはRigidbodyを忘れずに
  • GPUの処理負荷的にコスパの悪いエフェクトは使わない
  • マルチパスのシェーダを使いすぎない(バッチングが効かないので)
  • 初期シーンでテクスチャやPrefabを使いすぎない
  • リアルタイムGIは重いので使わない
  • 処理負荷が上がりすぎたらリアルタイムシャドウを消す
  • ピクセルライトの使い過ぎに注意

テクスチャ圧縮形式はASTCにする

テクスチャの圧縮形式はASTCが推奨されています。
これに設定するには、各テクスチャのInspectorからOverride for Androidにチェックを入れ、FormatをASTCに変えます。

f:id:halya_11:20191102221802p:plain

あるいは、Override for Androidのチェックを外した状態にしておき、Build SettingsのTexture CompressionをASTCに設定します。
これによりOverride for AndroidのチェックをしていないテクスチャがすべてASTCになります(ブロック数はどうなるのか不明)。

f:id:halya_11:20191102222002p:plain

なおテクスチャ圧縮形式については以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

light11.hatenadiary.com

Development Buildを外す

Build SettingsのDevelopment Buildのチェックは外しておくことが推奨されています。

f:id:halya_11:20191102222235p:plain

これは、Development Buildを行うとログ出力やパフォーマンス計測などの処理が走ることにより処理負荷が大きくなってしまうためです。

マルチスレッドレンダリングは有効に

Multi Thread Renderingは有効にしたほうが良いようです。
有効にするには、Project Settings > Player > Other Settings > Multi Thread Renderingにチェックを入れます。

f:id:halya_11:20191102221119p:plain

レンダリング処理をメインスレッド以外で行うことで処理負荷を分散させる機能です。

テクスチャフィルタリングを正しく設定する

テクスチャフィルタリングはFilter ModeをTrilinearにするか、
Aniso Levelを挙げて異方性フィルタリングを有効にすることが推奨されています。

処理負荷を考えると、Filter ModeはBilinear、Aniso Levelを3か4あたりにしておいて、
テクスチャの品質が気になるようであれば上げていけばいい気がします。

このあたりの概要と設定方法は以下の記事で説明していますので、必要に応じて参照してください。

light11.hatenadiary.com

オクルージョンカリングを使う

シーンの構成にもよりますが、メッシュ同士の遮蔽が多く発生するような場合には、
オクルージョンカリングは使ったほうがよさそうです。

UnityのOcclusion Cullingについては以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

フォワードレンダリングを使う

レンダリングパスはForward Renderingが推奨されています。
Project Settings > Graphicsで各TierのRendering PathがForwardになっていればOKです。

f:id:halya_11:20191102233556p:plain

SRPを使う場合にはSRP側で設定します。

アンチエイリアシングを設定する

VRでは4xのアンチエイリアシングを適用することが推奨されています。
Project Settings > Quality > Anti Aliasingを4x Multi Samplingにすることで適用できます。

f:id:halya_11:20191102233912p:plain

また、Oculus IntegrationのOVRManagerを使う場合にはUse Recommended MSAA Levelにチェックを付けるだけで良いようです。

f:id:halya_11:20191102234331p:plain

ちなみにアンチエイリアスについては以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

テクスチャの最大解像度は2kに

テクスチャの解像度は2048 x 2048に収める必要があります。

最初から大きすぎるテクスチャを作らないのが一番ですが、
テクスチャのインポート設定から最大解像度を指定することもできます。

f:id:halya_11:20191102234533p:plain

衝突判定のある動的オブジェクトにはRigidbodyを

Staticではない動的なオブジェクトにColliderを付けている場合にはRigidbodyをつけ忘れないようにします。

コスパの悪いエフェクトは使わない

SSAOやモーションブラー、グローバルフォグ、視差マッピングなどコスパの悪い効果は使わないようにします。
アンチエイリアシングもMSAAでかけるのでポストエフェクトとしては必要なかったりと、
描画の処理効率を考えてなるべく重い処理を削っていく必要があります。

マルチパスのシェーダを使いすぎない

マルチパスのシェーダはバッチングされないので使いすぎると処理負荷が大きくなります。
部分的には問題ないですが、使いすぎには注意します。

初期シーンでテクスチャやPrefabを使いすぎない

初期シーンでテクスチャを使いすぎたりPrefabを置きすぎたりするのは避けることが推奨されています。

リアルタイムGIは使わない

リアルタイムGIは単純に重いので使ってはいけません。
重い理由などは以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

処理負荷が上がりすぎたらリアルタイムシャドウを消す

影を使うこと自体は問題ありませんが、ドローコールがボトルネックになっていたり、
処理負荷を削る必要がある場合にはオフにすることを検討すべきです。

リアルタイムシャドウの設定については以下の記事で説明していますので、必要に応じて参照してください。

light11.hatenadiary.com

ピクセルライトの使い過ぎに注意

Forward Renderingではピクセルライトを使いすぎると処理負荷が増大します。
ピクセルライトの数はGraphics Settingsから指定できるので、1個とか少ない数にしておくべきです。

f:id:halya_11:20191103000412p:plain

なおForward Renderingとピクセルライトの話は以下にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

参考

developer.oculus.com

developer.oculus.com