DEV Community

KOGA Mitsuhiro
KOGA Mitsuhiro

Posted on • Originally published at qiita.com

1

VulkanをサポートしたOculus QuestでVisual Effect Graphを使う

はじめに

Unity2019.3になってOculus QuestでVulkanがサポートされました。
更にURP 7.2.0からXR周りが改善されたりXR Interaction Toolkitだけでクロスプラットフォームにカメラリグやコントローラーを扱えるようになっています。

そこでUnityとPackage Managerの機能だけで外部アセットを使わずにOculus QuestでVisual Effect Graphを使ってみます。

できあがったもの

開発環境

  • Unity2019.3.1f1
    • Android Build Support
    • Android SDK & NDK Tools
    • OpenJDK
  • Oculus Quest v13以上

Unityインストール時にAndroid Build Supportを展開してAndroid SDK & NDK ToolsとOpenJDKもチェックします。
0.unity2019.3install.png

手順概要

  1. 新規プロジェクト作成
  2. Oculus Quest向けにProject Settingsを変更
  3. Package Managerから必要なパッケージを追加
  4. VisualEffectGraph Additionsをインポート
  5. シーン構築
  6. ビルドと実行
  7. クオリティ調整

新規プロジェクト作成

UnityHubで新規作成してUniversal Template Projectから作成します。
1.10.new-project.png

Oculus Quest向けにProject Settingsを変更

  1. Androidプラットフォームに変更

    • メニューのファイル > ビルド設定を開き、プラットフォームからAndroidを選択してSwitch Platformボタンを押します。

    2.10.switch-platform2.png

  2. Oculus Quest向けにProject Settingsを変更

    1. Build Settingsのプレイヤー設定ボタンを押してProject Settingsを開きます。
    2. Player > Androidアイコン > その他の設定を開きます。

      • Graphics APIsをVulkanのみに変更
      • 最低APIレベルを4.4から6.0に変更

      2.30.player-settings-after2.png

    3. XR Plugin Managementを開きます。

      1. Install XR Plugin Managementボタン、Oculus XR PluginのInstallボタンの順に押します。
      2. AndroidアイコンのPlugin ProvidersにOculus Loadersを追加します。

      2.50.xr-settings-all2.png

    4. Oculusを開きます。

      • 作成ボタンを押してOculus Quest用の設定を作ります。

      2.80.oculus-all2.png

Package Managerから必要なパッケージを追加

  1. メニューのウインドウ > Package Managerを開き、AdvancedからShow preview packagesをチェックしてプレビューバージョンを見えるようにします。
  2. プロジェクト内をすべてのパッケージに変更して以下のパッケージをインストールします。

    • XR Integration Toolkit
    • Visual Effect Graphの7.2以上
    • Universal RPの7.2以上
    • Android Logcat

    3.10.package-manager.png

VisualEffectGraph Additionsをインポート

  1. Package ManagerのVisual Effect GraphからVisualEffectGraph AdditionsのImport into Projectボタンを押します。

    4.10.import-vfx-additions2.png

  2. Assets/Samples/Visual Effect Graph/7.2.1/VisualEffectGraph Additions/VFX/にアセットが作られますがそのままでは動かないのでメニューの編集 > Visual Effects > Rebuild All Visual Effect Graphsから再コンパイルします。

    image.png

シーン構築

  1. メニューのゲームオブジェクト > XR > Room-Scale XR Rigを選択するとMain CameraがVR用のXR Rigに変換されます。

    5.10.xr-rig2.png
    元のカメラに合わせる場合は以下のTransformになります。
    5.20.xr-rig-transform.png

  2. Assets/Samples/Visual Effect Graph/7.2.1/VisualEffectGraph Additions/Prefabs/にあるVFXのプレハブをヒエラルキーに追加します。

    5.30.vfx-prefab2.png

  3. 追加したVFXをカメラから見やすい位置に調整します。

ビルドと実行

  1. メニューのファイル > ビルド設定を開きます。
  2. デバイスを実行しますからOculus Questを選択します。
  3. ビルドして実行ボタンを押します。
  4. アプリを起動してメニューのウインドウ > 分析 > Android Logcatを開くとVulkanが使われているのが分かります。

    androidlog.png

クオリティ調整

このままでもVisual Effect Graphは動きますがBloomが弱いのでPCと比べると貧弱です。以下の設定を行うとBloomの違いが分かります。
ただしHDRとPostProcessingはOculusの開発者ブログでパフォーマンス低下させると指摘されているようにFPSが更に下がってしまいます。

  1. Assets/Settings/UniversalRP-MediumQuality.assetsAssets/Settings/UniversalRP-OculusQuest.assetsに複製して以下の項目を変更します。

    • HDRを有効にする
    • Anti Aliasing (MSAA)を4xにする
    • Grading ModeをHigh Dynamic Rangeにする

    image.png

  2. Player Settings > 品質にOculusQuestを追加して以下の項目を変更します。

    • AndroidのDefaultに設定する
    • RenderingにUniversalRP-OculusQuestを設定する
    • それ以外はMediumと同じ

    image.png

  3. Player Settings > グラフィックスのスクリプタブルレンダーパイプライン設定にUniversalRP-OculusQuestを設定します。

    image.png

その他

  • カメラのPost Processingを有効にしてStereo Rendering ModeをMultiviewにすると右目の位置がおかしくなります。
  • Post Processingが重いのでFPSは40~60くらいしか出ません。Post Processingを無効にすると70FPSくらい出ます。
  • Visual Effect GraphをRebuildするとOpenGLES3でもVulkanと同様に表示できました。設定ミスの場合OpenGLES3だとVisual Effect Graphのエフェクトが謎のレーザーになってしまいました。 screenshot

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay