SlideShare ist ein Scribd-Unternehmen logo
1 von 30
UnityでOculus Quest開発する
ならこれ読んどけ
UnityでのMobile VR用の推奨パフォーマンス設定
 良好なパフォーマンスの基本となる設定です。プロ
ジェクトに応じて最適な設定をみつけてください。
 UnityのAndroidビルドがすでにできる状態である
ことを前提にしています。
 UnityのバージョンはUnity2019をベースに説明し
ています。
はじめに
 FileメニューからBuild Settingsを開く
PlatformにAndroidを選択します。
 Texture CompressionにASTCを選択します。
ASTC圧縮は、品質とファイルサイズの最適なバランスを提供します。画質
を重視する場合は、非圧縮を選択する必要がある場合もあります。
 設定後にSwitch Platformボタンを押します。
Build Settings
 WindowメニューからPackage Managerを開くき
ます。
 パッケージの一覧から、Oculus Androidを選択し
Installボタンを押します。
Packageのインストール
 Project SettingsのPlayerタブ、Resolusion and Presentation
Settingsを開き、Use 32-bit Display buffer にチェックします。
 Disable Depth and Stencil のにチェックを外します。
PlayerタブのResolusion Settings
 Color SpaceでLinearが選択できます。inear color はよりリ
アルなライティングを生成します。
 Project SettingsのPlayerタブ、Other Settingsを開き
Graphics APIsのVulkanを削除します。
Oculus Go/Questで OpenGLES 3がサポートされています。
 Multithreaded Renderingにチェックします。
グラフィックAPI呼び出しをメインスレッドから別のワーカースレッドに移
動します。CPU負荷をさげることができます。
PlayerタブのOter Settings
 Static Batchingにチェックします。
同じマテリアルの複数のStaticなオブジェクトがある際、それをあらかじめ
一つにまとめて描画して。Draw Callを減らすことができます。
 Dynamic Batchingにチェックします。
 GPU Skinningにチェックします。
Skinningの処理をGPU側で実行します。
 Graphics Jobsはチェックを外します。(デフォルトのまま)
PlayerタブのOter Settings
 Minimum API Levelを「Android 6.0 Marshmallow
(API level 23)」に変更します。
 Scripting Backendに IL2CPPを選択します。
デバイスで高速に実行されますが、ビルド時間が長くなります。 (OVR Quick
Scene Previewを使って、ビルド時間を短縮することをすすめます。)
 Target ArchitecturesのARMv7のチェックを外し、
ARM64にチェックを入れます。
PlayerタブのOter Settings
 Prebake Collision Meshesにチェック
Unityは、読み込み時に物理メッシュを計算します。このボックスをチェッ
クすると、代わりにビルド時にメッシュが生成されます。これにより、プロ
ジェクトのビルドサイズが増加しますが、レベルの読み込み時間が短縮され
ます。 APKのサイズに問題がない場合は、このチェックボックスをオンに
することをお勧めします。
 Keep Loaded Shaders Aliveにチェック
このオプションを選択すると、起動時にすべてのシェーダーがロードされます。これに
より、アプリケーションの初期ロード時間が増加しますが、オンデマンドシェーダーコ
ンパイルによる問題は解決されます。オンデマンドでシェーダーをコンパイルすること
が問題になる場合は、このチェックボックスをオンにします。
PlayerタブのOter Settings
 Optimize Mesh Dataにチェック
このボックスをチェックすると、メッシュを使用するマテリアルによって参
照されていないメッシュから頂点データ(接線、法線、色、UVなど...)が
削除されます。このオプションを有効にすると、最終的なAPKサイズを小さ
くすることができます。
PlayerタブのOter Settings
 XR Settingsタブを開き、Virtual Reality
Supportedにチェックします。
 Virtual Reality SDKsリストにOculus SDKを追加し
ます。
 Stereo Rendering ModeにSingle Passを選択します。
左右の目の画像を同時に 1 つのまとめてレンダーテクスチャにレンダリングす
ることで、パフォーマンスを向上させます。
PlayerタブのXR Settings
 Qualityタブを開き、quality Levels checkboxes
を Mediumを除きチェックを外します。
Qualityタブ
 Pixel Light Count to either に1か0に設定します。
ピクセルライトカウントは1にする必要があります。可能であれば、頂点ラ
イトシェーダーを使用してみてください。その場合、ピクセルライトカウン
トは0に設定できます。
 Anisotropic TexturesをDisableに設定します。
ARM Mali GPU'sは異方性フィルタリングをサポートしていません。
 Anti Aliasingに、4x Multi Samplingを選択します。
Qualityタブ
 Shadows にDisable ShadowsかHard Shadows
Onlyを選択します。
 Blend Weightsを2 Bonesに設定します。
 V Sync CountをDon‘t Syncに設定します。
oculusランタイムは独自のV Syncを処理します。
Qualityタブ
 Audioタブを開き
オーディオ最高の没入感を得るために、すべてのゲームでspatialize audio
にすることをお勧めします。spatialize audioでは、少なくともオーディオ
マネージャーで次の設定を変更する必要があります。
・DSPバッファサイズを適切なレイテンシに設定
します。
・SpatializerプラグインをOculus Spatializerに
設定します。
Audioタブ
 Graphics tabタブを開き、Standard shader
qualityのすべてのドロップダウンをLowを選択し
ます。
可能であれば、標準シェーダーの使用を避け、代わりにモバイルシェーダー
を使用してください。
 Rendering Pathは全てForwardを選択します。
 Real Time GI CPU Usageのすべてのドロップダウ
ンをLowを選択します。
Graphicsタブ
おまけ
 CPU・GPUレベル
負荷によってCPUとGPUの変動するクロック数を固定
することができます。
OVRManager.cpuLevel = 0(低)~3(高);
OVRManager.gpuLevel = 0(低)~3(高);
スクリプトでの設定
(Oculus Integrationを利用する場合)
 Fixed Foveated Rendering
人の目線がいく視野の中心部のみを高解像度で、まわりを低解
像度でレンダリングすることで負荷を減らします。
OVRManager.fixedFoveatedRenderingLevel =
OVRManager.FixedFoveatedRenderingLevel.{High~Off};
負荷状況に応じて、おまかせで変更する場合
OVRManager.useDynamicFixedFoveatedRendering = true;
スクリプトでの設定
(Oculus Integrationを利用する場合)

Weitere ähnliche Inhalte

Mehr von 聡 大久保

VRでのUI設計のヒント
VRでのUI設計のヒントVRでのUI設計のヒント
VRでのUI設計のヒント聡 大久保
 
ハードサーフェイスモデリング勉強会(Blender2.79b編)
ハードサーフェイスモデリング勉強会(Blender2.79b編)ハードサーフェイスモデリング勉強会(Blender2.79b編)
ハードサーフェイスモデリング勉強会(Blender2.79b編)聡 大久保
 
Google Tangoで 現実世界を感じてみよう
Google Tangoで現実世界を感じてみようGoogle Tangoで現実世界を感じてみよう
Google Tangoで 現実世界を感じてみよう聡 大久保
 
仮想マシンを仮想空間で見る Cloud roadshow
仮想マシンを仮想空間で見る Cloud roadshow仮想マシンを仮想空間で見る Cloud roadshow
仮想マシンを仮想空間で見る Cloud roadshow聡 大久保
 
AWSのEC2の複数インスタンスからファイルを共有する方法
AWSのEC2の複数インスタンスからファイルを共有する方法AWSのEC2の複数インスタンスからファイルを共有する方法
AWSのEC2の複数インスタンスからファイルを共有する方法聡 大久保
 
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加するAwsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する聡 大久保
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい聡 大久保
 
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更聡 大久保
 
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得聡 大久保
 
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得聡 大久保
 
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残すAwsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す聡 大久保
 
awsを学ぶ上で必要となる前提知識(DB)
awsを学ぶ上で必要となる前提知識(DB)awsを学ぶ上で必要となる前提知識(DB)
awsを学ぶ上で必要となる前提知識(DB)聡 大久保
 
AWSを学ぶ上で必要となる前提知識(SSL)
AWSを学ぶ上で必要となる前提知識(SSL)AWSを学ぶ上で必要となる前提知識(SSL)
AWSを学ぶ上で必要となる前提知識(SSL)聡 大久保
 
Awsを学ぶ上で必要となる前提知識(DNS/LB)
Awsを学ぶ上で必要となる前提知識(DNS/LB)Awsを学ぶ上で必要となる前提知識(DNS/LB)
Awsを学ぶ上で必要となる前提知識(DNS/LB)聡 大久保
 
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニングAWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング聡 大久保
 
iOSバージョン差異(iOS6まで)
iOSバージョン差異(iOS6まで)iOSバージョン差異(iOS6まで)
iOSバージョン差異(iOS6まで)聡 大久保
 
iOSで開発をはじめる前に
iOSで開発をはじめる前にiOSで開発をはじめる前に
iOSで開発をはじめる前に聡 大久保
 
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編聡 大久保
 
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)聡 大久保
 
iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編聡 大久保
 

Mehr von 聡 大久保 (20)

VRでのUI設計のヒント
VRでのUI設計のヒントVRでのUI設計のヒント
VRでのUI設計のヒント
 
ハードサーフェイスモデリング勉強会(Blender2.79b編)
ハードサーフェイスモデリング勉強会(Blender2.79b編)ハードサーフェイスモデリング勉強会(Blender2.79b編)
ハードサーフェイスモデリング勉強会(Blender2.79b編)
 
Google Tangoで 現実世界を感じてみよう
Google Tangoで現実世界を感じてみようGoogle Tangoで現実世界を感じてみよう
Google Tangoで 現実世界を感じてみよう
 
仮想マシンを仮想空間で見る Cloud roadshow
仮想マシンを仮想空間で見る Cloud roadshow仮想マシンを仮想空間で見る Cloud roadshow
仮想マシンを仮想空間で見る Cloud roadshow
 
AWSのEC2の複数インスタンスからファイルを共有する方法
AWSのEC2の複数インスタンスからファイルを共有する方法AWSのEC2の複数インスタンスからファイルを共有する方法
AWSのEC2の複数インスタンスからファイルを共有する方法
 
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加するAwsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
 
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
 
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
 
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
 
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残すAwsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
 
awsを学ぶ上で必要となる前提知識(DB)
awsを学ぶ上で必要となる前提知識(DB)awsを学ぶ上で必要となる前提知識(DB)
awsを学ぶ上で必要となる前提知識(DB)
 
AWSを学ぶ上で必要となる前提知識(SSL)
AWSを学ぶ上で必要となる前提知識(SSL)AWSを学ぶ上で必要となる前提知識(SSL)
AWSを学ぶ上で必要となる前提知識(SSL)
 
Awsを学ぶ上で必要となる前提知識(DNS/LB)
Awsを学ぶ上で必要となる前提知識(DNS/LB)Awsを学ぶ上で必要となる前提知識(DNS/LB)
Awsを学ぶ上で必要となる前提知識(DNS/LB)
 
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニングAWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
 
iOSバージョン差異(iOS6まで)
iOSバージョン差異(iOS6まで)iOSバージョン差異(iOS6まで)
iOSバージョン差異(iOS6まで)
 
iOSで開発をはじめる前に
iOSで開発をはじめる前にiOSで開発をはじめる前に
iOSで開発をはじめる前に
 
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
 
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
 
iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編iOSハンズオントレーニング Uikit編
iOSハンズオントレーニング Uikit編
 

UnityでOculus Quest開発するならこれ読んどけ - UnityでのMobile VR用の推奨パフォーマンス設定 -

  • 3.  FileメニューからBuild Settingsを開く PlatformにAndroidを選択します。  Texture CompressionにASTCを選択します。 ASTC圧縮は、品質とファイルサイズの最適なバランスを提供します。画質 を重視する場合は、非圧縮を選択する必要がある場合もあります。  設定後にSwitch Platformボタンを押します。 Build Settings
  • 4.
  • 5.  WindowメニューからPackage Managerを開くき ます。  パッケージの一覧から、Oculus Androidを選択し Installボタンを押します。 Packageのインストール
  • 6.
  • 7.  Project SettingsのPlayerタブ、Resolusion and Presentation Settingsを開き、Use 32-bit Display buffer にチェックします。  Disable Depth and Stencil のにチェックを外します。 PlayerタブのResolusion Settings
  • 8.
  • 9.  Color SpaceでLinearが選択できます。inear color はよりリ アルなライティングを生成します。  Project SettingsのPlayerタブ、Other Settingsを開き Graphics APIsのVulkanを削除します。 Oculus Go/Questで OpenGLES 3がサポートされています。  Multithreaded Renderingにチェックします。 グラフィックAPI呼び出しをメインスレッドから別のワーカースレッドに移 動します。CPU負荷をさげることができます。 PlayerタブのOter Settings
  • 10.  Static Batchingにチェックします。 同じマテリアルの複数のStaticなオブジェクトがある際、それをあらかじめ 一つにまとめて描画して。Draw Callを減らすことができます。  Dynamic Batchingにチェックします。  GPU Skinningにチェックします。 Skinningの処理をGPU側で実行します。  Graphics Jobsはチェックを外します。(デフォルトのまま) PlayerタブのOter Settings
  • 11.
  • 12.  Minimum API Levelを「Android 6.0 Marshmallow (API level 23)」に変更します。  Scripting Backendに IL2CPPを選択します。 デバイスで高速に実行されますが、ビルド時間が長くなります。 (OVR Quick Scene Previewを使って、ビルド時間を短縮することをすすめます。)  Target ArchitecturesのARMv7のチェックを外し、 ARM64にチェックを入れます。 PlayerタブのOter Settings
  • 13.
  • 14.  Prebake Collision Meshesにチェック Unityは、読み込み時に物理メッシュを計算します。このボックスをチェッ クすると、代わりにビルド時にメッシュが生成されます。これにより、プロ ジェクトのビルドサイズが増加しますが、レベルの読み込み時間が短縮され ます。 APKのサイズに問題がない場合は、このチェックボックスをオンに することをお勧めします。  Keep Loaded Shaders Aliveにチェック このオプションを選択すると、起動時にすべてのシェーダーがロードされます。これに より、アプリケーションの初期ロード時間が増加しますが、オンデマンドシェーダーコ ンパイルによる問題は解決されます。オンデマンドでシェーダーをコンパイルすること が問題になる場合は、このチェックボックスをオンにします。 PlayerタブのOter Settings
  • 15.  Optimize Mesh Dataにチェック このボックスをチェックすると、メッシュを使用するマテリアルによって参 照されていないメッシュから頂点データ(接線、法線、色、UVなど...)が 削除されます。このオプションを有効にすると、最終的なAPKサイズを小さ くすることができます。 PlayerタブのOter Settings
  • 16.
  • 17.  XR Settingsタブを開き、Virtual Reality Supportedにチェックします。  Virtual Reality SDKsリストにOculus SDKを追加し ます。  Stereo Rendering ModeにSingle Passを選択します。 左右の目の画像を同時に 1 つのまとめてレンダーテクスチャにレンダリングす ることで、パフォーマンスを向上させます。 PlayerタブのXR Settings
  • 18.
  • 19.  Qualityタブを開き、quality Levels checkboxes を Mediumを除きチェックを外します。 Qualityタブ
  • 20.
  • 21.  Pixel Light Count to either に1か0に設定します。 ピクセルライトカウントは1にする必要があります。可能であれば、頂点ラ イトシェーダーを使用してみてください。その場合、ピクセルライトカウン トは0に設定できます。  Anisotropic TexturesをDisableに設定します。 ARM Mali GPU'sは異方性フィルタリングをサポートしていません。  Anti Aliasingに、4x Multi Samplingを選択します。 Qualityタブ
  • 22.  Shadows にDisable ShadowsかHard Shadows Onlyを選択します。  Blend Weightsを2 Bonesに設定します。  V Sync CountをDon‘t Syncに設定します。 oculusランタイムは独自のV Syncを処理します。 Qualityタブ
  • 23.
  • 24.  Audioタブを開き オーディオ最高の没入感を得るために、すべてのゲームでspatialize audio にすることをお勧めします。spatialize audioでは、少なくともオーディオ マネージャーで次の設定を変更する必要があります。 ・DSPバッファサイズを適切なレイテンシに設定 します。 ・SpatializerプラグインをOculus Spatializerに 設定します。 Audioタブ
  • 25.
  • 26.  Graphics tabタブを開き、Standard shader qualityのすべてのドロップダウンをLowを選択し ます。 可能であれば、標準シェーダーの使用を避け、代わりにモバイルシェーダー を使用してください。  Rendering Pathは全てForwardを選択します。  Real Time GI CPU Usageのすべてのドロップダウ ンをLowを選択します。 Graphicsタブ
  • 27.
  • 29.  CPU・GPUレベル 負荷によってCPUとGPUの変動するクロック数を固定 することができます。 OVRManager.cpuLevel = 0(低)~3(高); OVRManager.gpuLevel = 0(低)~3(高); スクリプトでの設定 (Oculus Integrationを利用する場合)
  • 30.  Fixed Foveated Rendering 人の目線がいく視野の中心部のみを高解像度で、まわりを低解 像度でレンダリングすることで負荷を減らします。 OVRManager.fixedFoveatedRenderingLevel = OVRManager.FixedFoveatedRenderingLevel.{High~Off}; 負荷状況に応じて、おまかせで変更する場合 OVRManager.useDynamicFixedFoveatedRendering = true; スクリプトでの設定 (Oculus Integrationを利用する場合)