2021年1月時点におけるUnityのVR開発環境を取り巻く状況

7 min読了の目安(約6400字TECH技術記事

TL;DR

  • OpenXR や Unity XR Tech Stack といった統一的な XR 開発環境を創出する試みが行われている
  • とはいえまだまだ移行の最中ということもあり、 SteamVR のようにゴチャついているところもある

ベンダーの方針

Unity

  • XR Plug-in Framework の導入をデベロッパーとハードウェアベンダーに要請している
  • build-in XR ( ProjectSetting > Player > XR で有効にできる Unity の XR SDK マネジメントフレームワーク)は廃止される
  • XR Plug-in Framework によって XR デバイスのレンダリングや入力を抽象化し、プラットフォームによらない統一的な API を提供する
  • XR Plug-in Framework を前提として XR Interaction Toolkit が用意される
    • 3D オブジェクトや UI へのインタラクションフレームワークを提供し、 XR アプリケーションの迅速な実装を可能にする
  • XR Plug-in Framework や XR Interaction Toolkit といった一連のパッケージを Unity XR Tech Stack と呼んでブランディングしている
  • OpenXR への対応を進めており、OpenXR の XR Plugin が Preview でリリースされた

Valve

  • OpenVR の機能追加を止め、 OpenXR 対応を進めている
  • OpenVR の XR Plug-in Framework 対応が難航しており、現在は HMD へのレンダリングに対応したが、コントローラー入力には対応していない
  • 入力のハンドリングは現状 SteamVR Plugin のフレームワークを利用する必要がある

Oculus

  • XR Plug-in Framework に対応済みで、 built-in XR 向けの機能追加は止まっている
  • Quest については OpenXR に Experiment で対応しており、 OpenXR XR plugin で Quest に対応する事ができるが、Foveated Rendering など一部の機能は対応していない

デベロッパーの選択肢

  • XR フレームワークは built-in XR or XR Plugin ?
    • Unity 2020.1+ : XR Plugin のみ
    • Unity 2019.3/4 : XR Plugin か built-in XR を選べる
      • Unity 2020.1+ に上げる予定なら XR Plugin にしておきたい
    • Unity 2019.2- : built-in XR のみ
  • XR Plugin の XR Rig を使うか
    • SteamVR 以外では検討に値する
  • OpenXR XR Plugin を使うか
    • Unity 2020.2+ かつ Preview なので人柱向け
    • 将来的にはこのプラグインを使うのがスタンダードになりそう
  • XR Interaction Toolkit を使うか
    • SteamVR での利用にはハックが必要であり、また、 Preview なので人柱向け

用語集

SDK

  • OpenVR
    • Valve が開発する VR デバイス SDK/API
  • OpenXR
    • Khronos Group が開発する VR/AR デバイス SDK/API
    • Valve がコミッターをしている
  • SteamVR
    • Valve が提供するOpenVR, Chaperone, Compositor, Lighthouse Tracking などの VR 向けツール/サービススイート
    • OpenVR を実装している
    • 2020/6/26 に OpenXR を実装することが表明され、今後の機能追加は OpenXR を通じて行われることに
    • 2021/1/14 に Beta リリースされた SteamVR 1.16.1 にて、Windows 上での Vulkan、OpenGL、 D3D11、D3D12 における OpenXR 1.0 適合性テストに合格した

Unity関連

  • built in XR
    • レガシーな VR/AR フレームワーク
    • ProjectSettings >Player > XR Settings > Virtual Reality Supported にチェックを入れることで有効にできる
    • Unity 2019.3+ で非推奨、 Unity 2020.1+ で廃止
  • XR Plug-in Framework
    • built in XR を置き換える VR/AR フレームワーク
    • Unity 2019.3+ で利用可能
  • XR Plugin Management
    • XR Plugin の管理、初期化、読込、設定、ビルドを可能にする Package
    • UPM で配布
  • XR Plugin
    • XR デバイス SDK/API と Unity を接続する Package
  • XR Interaction Toolkit
    • Unity純正のVR/AR用 Interaction Framework およびそれを提供する Package
    • プラットフォーム間の差異を吸収してXRアプリケーションに必要な Locomotion、Grab などの機能を提供する
    • UPM で配布
    • まだ Preview
  • Unity XR Input
    • XRデバイスの入力マッピング層
    • 様々なデバイスのコントローラーの差異を吸収
    • Input System および Input Manager との互換性がある
  • Input System (New Input System)
    • Unity の入力マッピング層
    • Unity 2019.4+ で利用可能
    • UPM で配布
  • Input Manager (Legacy Input System)
    • Unity の入力マッピング層
    • Edit > Project Settings > Input Manager から設定する
    • デフォルトで Editor に含まれる
  • SteamVR Plugin
    • Unity と SteamVR のスムーズな接続を提供する UnityPackage
    • AssetStore / GitHub で配布
    • コントローラーの3Dモデルのロード、入力のハンドリング、手の見た目の推定をサポート
    • 独自の Interaction System をサポート
    • v2.5 では built in XR に依存しており、インストールすると自動的に built in XR が有効化され、 OpenVR Desktop がインストールされる
    • v2.6+ から XR Plugin に対応し、Unity 2020.1+ にインストールすると自動的に OpenVR Unity XR Plugin がインストールされる
    • v2.6+ を Unity 2019.3/4 にインストールした場合は、 built in VR と XR Plugin どちらを利用するか選択できる
    • Unity 2019.4 において、v2.5 インストール下では built in XR をオフにできないが、 v2.6+ インストール下では built in XR をオフにできる
      • オフの状態で Unity を再起動すると、built in VR と XR Plugin どちらを利用するか選択するダイアログが出現する
  • OpenVR Unity XR Plugin
    • OpenVR デバイスへのレンダリングを提供する XR Plugin Package
    • GitHub で配布
    • デバイスの入力を使えるようにするには SteamVR Plugin のインストールが必要
      • Unity の XR フレームワークに乗せてくれ、と掲示板は大盛りあがり
      • SteamVR Input を XR Interaction Toolkit に乗せるハックがある
    • SteamVR Plugin を Unity 2020.1+ にインストールすると、この Package が自動的にインストールされる
      • 2019.3/4 の場合は任意にインストールできる
    • built-in XR の OpenVR でサポートされた Instancing しない Single Pass Rendering はサポートされないので注意
  • Oculus XR Plugin
    • Oculus デバイスの表示と入力をサポートする XR Plugin Package
    • UPM で配布
  • OpenXR Plugin
    • OpenXR デバイスをサポートする XR Plugin Package
    • Unity が提供し、UPMで配布
    • Unity 2020.2+ で利用可能
    • 詳細はフォーラムの記事を参照
  • Oculus Desktop / Oculus Android
    • built in XR で Oculus デバイスをサポートする Package
    • UPMで配布
    • Unity 2020.1+ では廃止される
  • OpenVR Desktop
    • built in XR で OpenVR デバイスをサポートする Package
    • UPMで配布
    • Unity 2020.1+ では廃止される
  • Oculus Integration for Unity
    • Unity が提供する Oculus デバイスサポート (built in VR および Oculus XR Plugin) に対して、追加のスクリプトやサンプルを提供する UnityPackage
    • AssetStore / oculus.com で配布
    • v23.1 から OpenXR のサポートが追加された
      • XR Plugin の AndroidOpenXR を使って Quest 対応させることができる
      • ただ、FFRやハンドトラッキングなど、幾つかの機能は使えない