xR (VR / AR / MR, etc.) の標準仕様OpenXRについて調べてみた

はじめに

株式会社Synamonでエンジニアをしております,久能 (@do_i_know_it) と申します.

 

VRコンテンツを開発していて一番大変なのは,アプリケーションをOculusやSteamVRなど複数のプラットフォームに対応する,新しいデバイスに対応するなどの作業だと思います.

新しいデバイスは独自のプラットフォームに対応したSDKを使わないと動作できないといった状況が多いのが現状です.

Unityによる開発では,独自プラットフォームのSDKがUnity標準のAPIに十分に対応しておらず苦しめられることも多々あったりします (心当たりがある方も多いのでは?).

 

そんな中,VRにおける仕様を標準化することでアプリケーションの開発コストを削減するためにOpenXRなるプロジェクトが立ち上がりました.

本記事では,「OpenXRとは何ぞや?」という方に向けてOpenXRとその周辺の概要を簡単に紹介したいと思います.

www.khronos.org

OpenXRとは

OpenXRとは,VR (人工現実感) / AR (拡張現実感) / MR (複合現実感) などのxRランタイムプラットフォームにおけるアプリケーションとデバイスとの間の仕様を標準化する取り組みです.

glTF,OpenGL,Vulkanなどを策定したKhronos Groupによって2016年から提唱,推進されています. 

OpenXRは次のような特徴を持つAPIとして策定されます.

  • Open
  • Royalty Free
  • Cross Platform

OpenXR 0.90が2019年3月に公開され,一部の仕様が仮策定されました.

www.khronos.org

OpenXR 1.0は2019年秋に公開予定で,残りの仕様が仮策定されます.

(2019/08/14 追記・修正)

2019年7月にSIGGRAPH 2019にてOpenXR 1.0が公開されました.

www.khronos.org

OpenXR 0.90で仮策定されていた一部の仕様 (後述のApplication Interface) がOpenXR 1.0で整備されました.

残りの仕様 (後述のDevice Plugin Interface) は1.0以降で策定・整備されていくようです.

OpenXRによる恩恵

プラットフォームのアプリケーションとデバイスとの間の仕様が標準化されることでデバイス開発者,プラットフォーム開発者,アプリケーション開発者のそれぞれにメリットがあります.

  • デバイス開発者
    • プラットフォームごとのデバイスドライバの対応が容易になる
  • プラットフォーム開発者
    • デバイスドライバごとのランタイムシステムの対応が容易になる
  • アプリケーション開発者
    • 各プラットフォームや各デバイスへの移植が容易になる

f:id:do_i_know_it:20190618125145j:plain

(OpenXR Overview - The Khronos Group Incより引用)

 

現状では,アプリケーション開発者はデバイスやプラットフォームごとにそれぞれ対応が必要であり,デバイス開発者はプラットフォームのランタイムシステムごとにデバイスドライバを提供する必要があります.

そのため,以下のコストが高くなります.

  • デバイスの各プラットフォームへの対応
  • アプリケーションの各プラットフォームや各デバイスへの対応

これにより,アプリケーションの移植性が課題となっています.

 

例えば,UnityでSteamVR対応のPCVRコンテンツを開発するとしましょう.その場合,以下のような事態が考えられます.

  • SteamVR PluginによりOculus RiftやHTC VIVE,Windows MRに対応したコンテンツを開発
  • Oculus Storeへの移植,Oculus GoやOculus Questへ対応するためにはSteamVR PluginをOculus Integrationに置き換える必要

最近はスタンドアロンなHMDもいろいろ出てきましたよね.VIVE Wave SDKやDaydream用のGoogle VR SDKなど,スタンドアロンHMDはPCVRとは別のSDKを必要とする場合が多い印象です.これらに対応しようとするとまたまたSDKを使用した処理の置き換えが発生します.

今後さらに多様なプラットフォームが台頭してくると,コンテンツを各プラットフォームに対応する度にそれぞれのプラットフォーム用のSDKに処理を置き換えていくことになり,マルチプラットフォームに対応したコンテンツを気軽に開発しにくくなっていきます.

 

OpenXRによって仕様が標準化されることで,アプリケーションの移植性が向上し,多様なプラットフォーム,多様なデバイスに対応したコンテンツを提供できるようになります.

APIのアーキテクチャ

これらの恩恵を実現するためのアーキテクチャとして,OpenXRでは2層のAPIを提供することでデバイス,プラットフォーム,アプリケーションを分離します.

  • Application Interface
    • プラットフォームのランタイムが提供するAPI
    • アプリケーションはこのAPIを通じてランタイムへアクセス
  • Device Plugin Interface
    • デバイスドライバが提供するAPI
    • ランタイムシステムはこのAPIを通じてデバイスドライバへアクセス

f:id:do_i_know_it:20190618125632p:plain

 

Unity, Oculus,SteamVR,Oculus Rift,HTC VIVEがそれぞれOpenXRに対応した未来を考えてみましょう.その場合,以下のような恩恵が考えられます.

  • Oculus RiftやHTC VIVEがDevice Plugin Interfaceを公開するデバイスドライバに対応することで,デバイスの動作環境がOculusでもStreamVRでもよい
  • OculusやStreamVRのランタイムがApplication Interfaceを公開し,Device Plugin Interfaceに対応した実装になることで,ランタイムは制御しているデバイスがOculus RiftでもHTC VIVEでもよい
  • Unityの標準APIがApplication Interfaceに対応した実装になった場合,アプリケーションは実行環境がOculusでもSteamVRでもよい

 

また,OpenXRは公式APIレイヤの他に独自のレイヤを設けられるため拡張性の高い設計になっています.追加したレイヤによって独自の機能を追加してAPIを拡張したり,既存APIの挙動を変更することができます. 

f:id:do_i_know_it:20190618125550p:plain

対応するデバイス

OpenXR 0.90は下記の形態のデバイスをサポートします.

  • Hand
    • ハンドコントローラ
      • ex) Oculus Touch
    • トラッキングした手の姿勢
      • ex) Leap Motion
  • Head
    • ヘッドマウンテッドディスプレイ (HMD)
      • ex) HTC VIVE
    • トラッキングした頭の姿勢
      • ex) RealSense
  • Gamepad
    • 従来の両手持ちゲームパッド
  • Treadmill
    • 歩行による移動を計測する装置

提供する機能

OpenXR 0.90は下記の機能を提供します.

  • Spaces
    • アプリケーション内の空間の管理
  • View Configuration
    • アプリケーション画面構成の管理
  • Session
    • アプリケーションの実行ループの管理
  • Rendering
    • アプリケーションの描画処理の管理
  • Input and Haptics
    • ユーザのアクションとフィードバックの管理

Renderingはあくまで描画処理の実行タイミングなどの管理だけを行い,実際の描画命令がどのような実装かは問われません.そのため,描画の手段としてOpenGLを利用するかVulkanを利用するかなどはプラットフォームのランタイムの実装次第となります.

詳しくは公式の仕様を眺めてみてください.

www.khronos.org

メンバーシップ

Khronos Groupのメンバーシップに参加することで,OpenXRの仕様の普及や策定などに関わることができます.

www.khronos.org

メンバーシップは大まかに分けて以下の2種類に大別されます.

  • 仕様の策定に参加可能,普及活動に参加可能

f:id:do_i_know_it:20190618130518p:plain

  • 仕様の策定は参加不可,普及活動は参加可能

f:id:do_i_know_it:20190618130514p:plain

(https://www.khronos.org/members/より引用)

2019年7月現在,GoogleやMicrosoftの他,Unity,Epic Games,Sonyなどが参画しています.

OpenXRへの対応状況

APIへの対応状況は2019年7月現在下記の通りです.

  • 対応済み
  • 年内対応予定 
    • Oculus (Facebook)
    • Unreal Engine (Epic Games)

 

Unityの対応状況はというと,現時点では公表されていません.しかしメンバーシップには参加しているので,近く対応することを期待しています.

 

(2019/08/14 追記)

Oculus Rift,Oculus  QuestのOpenXR対応が発表されました.

 

www.khronos.org

 

その他の標準化プロジェクト

今回紹介フォーカスしているOpenXRの他にも,xRにおける仕様を策定しようとする活動がいくつかありました.

OpenVR

Valve Softwareが2015年から提供しているVRデバイス向けのAPIであり,特定のハードウェアベンダのSDKなどに依存せずにアプリケーションを開発できることを目的としています.

github.com

BSD 3-Clause Licenseで公開されています.

OpenXR同様,アプリケーション側とドライバ側の2層にAPIが分かれています.

www.youtube.com

2019年7月現在,主にSteamVR Pluginの公開APIのような立ち位置になっています.

またSteamVR PluginはInput System 2.0でOpenXRへの対応を見据えた機構に変わりました.

Open Source Virtual Reality (OSVR)

Razerなどが2015年1月から推進していたオープンソースなVRデバイスの仕様標準化プロジェクトです.

ハードウェア要求が低くOSに依存しないため,GNU/LinuxのPCでVRを体験できるのが特徴です.

osvr.github.io

Apache 2.0 Licenseで公開されています.

2019年7月現在,残念ながらコミュニティでの活動が見られません.

また,RazerはSensicsと提携して同名のPC向けHMDを開発・販売していましたが,現在は生産が終了しているようです.

General Specifications for Virtual Reality Head-Mounted Displays

中国電子標準化研究所が2017年4月から提唱,推進している仕様書です.

北京工科大学やHTCなど,中国国内の研究機関や企業が標準化に参加しています.

2017年7月から仕様書の英文版(原題:虚拟现实头戴式显示设备通用规范)が公開されています.

skarredghost.com

 

おまけ

公式HPにてTシャツが販売されています.OpenXRを広めたい,OpenXRに貢献している気分になりたい方におすすめです.

Powered by teespring

teespring.com

 

これまでに紹介した通り,OpenXRはデバイスドライバ,ランタイム,アプリケーションの間におけるAPIを標準化する取り組みです.

これに対して,デバイスとPCとの物理的な接続方法に関する標準規格がVirtualLinkです.USB Type-CのDisplayPort Alternate Modeを用いて,HMDの接続規格を標準化します.

sites.google.com

まとめ

本記事では,OpenXRとその周辺の概要を紹介しました.

  • OpenXRとはxR (VR/AR/MR) の仕様を標準化する取り組み
  • アプリケーション,プラットフォームのランタイム,デバイスドライバの間に標準APIを策定
    → プラットフォーム,デバイス別の対応が簡易化
    → アプリケーションの移植性が向上
  • OpenXRの他にも標準仕様を策定する取り組みが存在する
  • メンバーシップに参加するとOpenXRの普及や策定に関われる

今回紹介したOpenXRなどの標準仕様の策定が推進されている現状を見ると,弊社の目指すVRが当たり前の世界へ近づいている実感がありますね.

仕様が標準化されることでVRの普及が進むことを期待しているので,今後も動向を追っていきたいと思っています.