UnityでOculus Quest用のアプリをサクサク動かすためにやっておくべき設定項目についてまとめます。
Unity2019.2.10
- はじめに
- 一覧
- テクスチャ圧縮形式はASTCにする
- Development Buildを外す
- マルチスレッドレンダリングは有効に
- テクスチャフィルタリングを正しく設定する
- オクルージョンカリングを使う
- フォワードレンダリングを使う
- アンチエイリアシングを設定する
- テクスチャの最大解像度は2kに
- 衝突判定のある動的オブジェクトにはRigidbodyを
- コスパの悪いエフェクトは使わない
- マルチパスのシェーダを使いすぎない
- 初期シーンでテクスチャやPrefabを使いすぎない
- リアルタイムGIは使わない
- 処理負荷が上がりすぎたらリアルタイムシャドウを消す
- ピクセルライトの使い過ぎに注意
- 関連
- 参考
はじめに
この記事ではOculus Quest用のアプリを作る際に設定しておくべきUnityの設定項目についてまとめます。
基本的なビルド設定については下記の記事にまとめていますので、必要に応じて参照してください。
一覧
最初に、設定しておくべき項目を一覧化しておきます。
各々の項目については次節以降細かく説明していきます。
- テクスチャ圧縮形式はASTCにする
- Development Buildを外す
- マルチスレッドレンダリングは有効に
- テクスチャフィルタリングをトライリニアにするか異方性フィルタリングを使う
- オクルージョンカリングを使う
- フォワードレンダリングを使う
- アンチエイリアシングは4x MSAAを使う
- テクスチャの最大解像度は2048に
- 衝突判定のある動的オブジェクトにはRigidbodyを忘れずに
- GPUの処理負荷的にコスパの悪いエフェクトは使わない
- マルチパスのシェーダを使いすぎない(バッチングが効かないので)
- 初期シーンでテクスチャやPrefabを使いすぎない
- リアルタイムGIは重いので使わない
- 処理負荷が上がりすぎたらリアルタイムシャドウを消す
- ピクセルライトの使い過ぎに注意
テクスチャ圧縮形式はASTCにする
テクスチャの圧縮形式はASTCが推奨されています。
これに設定するには、各テクスチャのInspectorからOverride for Androidにチェックを入れ、FormatをASTCに変えます。
あるいは、Override for Androidのチェックを外した状態にしておき、Build SettingsのTexture CompressionをASTCに設定します。
これによりOverride for AndroidのチェックをしていないテクスチャがすべてASTCになります(ブロック数はどうなるのか不明)。
なおテクスチャ圧縮形式については以下の記事にまとめていますので、必要に応じて参照してください。
Development Buildを外す
Build SettingsのDevelopment Buildのチェックは外しておくことが推奨されています。
これは、Development Buildを行うとログ出力やパフォーマンス計測などの処理が走ることにより処理負荷が大きくなってしまうためです。
マルチスレッドレンダリングは有効に
Multi Thread Renderingは有効にしたほうが良いようです。
有効にするには、Project Settings > Player > Other Settings > Multi Thread Renderingにチェックを入れます。
レンダリング処理をメインスレッド以外で行うことで処理負荷を分散させる機能です。
テクスチャフィルタリングを正しく設定する
テクスチャフィルタリングはFilter ModeをTrilinearにするか、
Aniso Levelを挙げて異方性フィルタリングを有効にすることが推奨されています。
処理負荷を考えると、Filter ModeはBilinear、Aniso Levelを3か4あたりにしておいて、
テクスチャの品質が気になるようであれば上げていけばいい気がします。
このあたりの概要と設定方法は以下の記事で説明していますので、必要に応じて参照してください。
オクルージョンカリングを使う
シーンの構成にもよりますが、メッシュ同士の遮蔽が多く発生するような場合には、
オクルージョンカリングは使ったほうがよさそうです。
UnityのOcclusion Cullingについては以下の記事にまとめていますので、必要に応じて参照してください。
フォワードレンダリングを使う
レンダリングパスはForward Renderingが推奨されています。
Project Settings > Graphicsで各TierのRendering PathがForwardになっていればOKです。
SRPを使う場合にはSRP側で設定します。
アンチエイリアシングを設定する
VRでは4xのアンチエイリアシングを適用することが推奨されています。
Project Settings > Quality > Anti Aliasingを4x Multi Samplingにすることで適用できます。
また、Oculus IntegrationのOVRManagerを使う場合にはUse Recommended MSAA Level
にチェックを付けるだけで良いようです。
ちなみにアンチエイリアスについては以下の記事にまとめていますので、必要に応じて参照してください。
テクスチャの最大解像度は2kに
テクスチャの解像度は2048 x 2048に収める必要があります。
最初から大きすぎるテクスチャを作らないのが一番ですが、
テクスチャのインポート設定から最大解像度を指定することもできます。
衝突判定のある動的オブジェクトにはRigidbodyを
Staticではない動的なオブジェクトにColliderを付けている場合にはRigidbodyをつけ忘れないようにします。
コスパの悪いエフェクトは使わない
SSAOやモーションブラー、グローバルフォグ、視差マッピングなどコスパの悪い効果は使わないようにします。
アンチエイリアシングもMSAAでかけるのでポストエフェクトとしては必要なかったりと、
描画の処理効率を考えてなるべく重い処理を削っていく必要があります。
マルチパスのシェーダを使いすぎない
マルチパスのシェーダはバッチングされないので使いすぎると処理負荷が大きくなります。
部分的には問題ないですが、使いすぎには注意します。
初期シーンでテクスチャやPrefabを使いすぎない
初期シーンでテクスチャを使いすぎたりPrefabを置きすぎたりするのは避けることが推奨されています。
リアルタイムGIは使わない
リアルタイムGIは単純に重いので使ってはいけません。
重い理由などは以下の記事にまとめていますので、必要に応じて参照してください。
処理負荷が上がりすぎたらリアルタイムシャドウを消す
影を使うこと自体は問題ありませんが、ドローコールがボトルネックになっていたり、
処理負荷を削る必要がある場合にはオフにすることを検討すべきです。
リアルタイムシャドウの設定については以下の記事で説明していますので、必要に応じて参照してください。
ピクセルライトの使い過ぎに注意
Forward Renderingではピクセルライトを使いすぎると処理負荷が増大します。
ピクセルライトの数はGraphics Settingsから指定できるので、1個とか少ない数にしておくべきです。
なおForward Renderingとピクセルライトの話は以下にまとめていますので、必要に応じて参照してください。