CrossRoad

AR、MR、VR、Babylon.jsを中心とした技術ブログ。 If you're non-Japanese native guys, check "English" category.

アプリ開発者目線から、OpenXRの発表内容とOpenXR API、Runtimeについて調べてみました

GDC2019で、KhronosからOpenXRに関する新しい発表がありました。

Khronos Releases OpenXR 0.90 Provisional Specification for High-performance Access to AR and VR Platforms and Devices - The Khronos Group Inc

しかし、ちょっと読んだだけだと、OpenXRが今どこまでできていて、今後どうなるのかが読みづらかったので、アプリ開発者目線で整理してみました。


2019/8/5追記
ver1.0については、こちらもご参考ください。

www.crossroad-tech.com

www.crossroad-tech.com


1. Khronosについて

日本語での公式HPがあったので、こちらの記述を引用します。

The Khronos Groupは、さまざまなプラットフォームやデバイス上で並列コンピューティング、グラフィックス、ビジョン、センサー・プロセッシング、ダイナミック・メディアのオーサリング及び高速化を可能とする、オープンな業界標準の仕様策定を行うコンソーシアムです。

クロノスが仕様策定する業界標準にはVulkan®、OpenGL®、OpenGL®ES、OpenGL®SC、WebGL™、SPIR-V™、OpenCL™、SYCL™、OpenVX™、NNEF™、COLLADA™、OpenXR™、glTF™などがあります。

クロノスの会員は各仕様の策定作業に参画し、一般公開前のさまざまな過程で仕様策定に関する投票を行うことができるほか、仕様のドラフトへのアーリーアクセスならびにコンフォーマンス・テストを通して、自身のプラットフォームやアプリケーション開発の期間短縮や機能強化に役立てることができます。

引用元:クロノス・グループ、AR/VRプラットフォーム並びに各種デバイスへの高性能アクセスを実現する「OpenXR 0.90」暫定仕様を発表 - Press Release - Khronos Group

Khronosに参加している企業はこちらで確認できます。

Khronos Members - The Khronos Group Inc

よく知っている企業としては、Google、Amazon、Facebook、Apple、Microsoftなどの5大企業だけでなく、任天堂、パナソニック、ソニーなどの日本企業もいます。

ほかにも Intel、ARM、QUALCOMMなどのチップメーカー、Epic(Unreal Engine)、Unityなど、かなりの企業が参画しています。

2. OpenXRについて

2.1 OpenXRとは?

OpenXRはKhronosの活動の1つです。公式HPはこちらです。

OpenXR Overview - The Khronos Group Inc

簡単にいうと、OpenXRとは異なるHMD、プラットフォーム向け開発を楽にするための仕組みです。Khronosで公開している概念図です。

Concept image of OpenXR

引用元:OpenXR Overview - The Khronos Group Inc

これはアプリ開発者とハードウェアベンダーの両方が得する仕組みとのことです。

  • 現状
    アプリ開発者はHMD別、あるいは開発環境別の個別対応が必要。ハードウェアベンダーは、開発環境別にドライバ提供が必要

  • OpenXR導入後
    アプリ開発者は、OpenXR APIを使って開発すればよい。ハードウェアベンダーは、OpenXR Device Plugin Interfaceに沿ってドライバを提供すれば良い

OpenXRの導入が当たり前になると、Unityを開いてVR向けSDKをインポートしたら、同じUnity Projectの中でOculus Rift S/Quest、HTC VIVE、Windows Mixed Realityのアプリ開発ができる、ということになりますね。これは期待です!

注:今回の0.9はまだ暫定仕様ですし、1.0が2019年内予定とあるので、本当にそういう開発ができるようになるにはまだ時間がかかると思います。

2.2 OpenXRの構成

System structure of OpenXR

引用元:https://www.khronos.org/assets/uploads/apis/OpenXR-Update-GDC_v20190316c_Mar19.pdf

先ほどの概念図をアプリ開発者寄りに書いた図です。アプリ開発者はOpenXR APIで策定された仕様に沿った書き方をすると、

OpenXR API <-> XR Vender Runtime System <-> OpenXR Device Plugin Interface <-> Vender Supplied Device Drivers <-> Cross-platform XR Devices

という流れにより、アプリを作ることができます。少し意訳になりますが、それぞれのイメージです。

Open XR API
アプリ開発向けの決まったソースコードの書き方

XR Vender Runtime System
Oculus Rutimeのように、VRヘッドセットをPCにつなぐ前にインストールするもの

OpenXR Device Plugin Interface
VRヘッドセットベンダー向けの決まった書き方

Vender Supplied Device Drivers
VRヘッドセットベンダーが個別に作るドライバ

Cross-platform XR Devices
OpenXRの規格に準拠したAR/VR/MRのデバイス

2.3 参考:OpenXRに関する解説記事の紹介

OpenXRの概要、今後の展望などはインタビュー付きのこの記事がとてもわかりやすいのでおすすめです。

[GDC 2019]VRとAR,MRをソフトとハードの両面からクロスプラットフォーム化するAPI「OpenXR」がいよいよ試用版に - 4Gamer.net

3. GDC2019発表で公開されたもの

3.1 OpenXR API


2019/7/30 更新

Githubリポジトリは下記に変わったとあったので、新しいリポジトリURLを記載します。

GitHub - KhronosGroup/OpenXR-SDK-Source: Sources for OpenXR loader, basic API layers, and example code.


異なるデバイスの違いを吸収するための、アプリ開発者向けのAPIです。Githubで公開されています。

GitHub - KhronosGroup/OpenXR-SDK: Generated headers and sources for OpenXR loader.

ただし、現時点では、Camera設定、コントローラのキー割り当て、制御はこういうメソッドを使いますのような形式では公開されていません。 (最初、すでにAPIが揃っているものと誤解してました)

公開されているのは、ver0.9時点のOpenXR APIの実体を作るためのソースコードです。このソースコードをビルドし、出来上がったライブラリをUnityなどのプロジェクト(例:Pluginsフォルダ)に入れることで、OpenXR APIが利用可能になると思われます。

それはGithubのReadme.mdにも書かれており、中に入っているのはc++形式のファイル、cmakeでビルドするためのCMakeLists.txtなどです。

[NOTE: This repository contains components that may eventually be assembled into an SDK, but are currently not being packaged into a distributable SDK.]
This repository contains source code and build scripts for implementations of the OpenXR loader, validation layers, and code samples.

ビルドを試しましたが、色々つまづいてうまくいっていません。cmakeに関する勉強不足が原因の1つでもあるので、機会あれば別途手順をまとめたいと思います。

なお、ビルドが成功しても現状のAPIでは一部のことしかできないので、XRアプリ開発者としては、まだ試さなくても良いかもしれません。

3.2 XR Vender Runtime System (Microsoft)

こちらで公開されています。

OpenXR - Mixed Reality | Microsoft Docs

今回のOpenXR API(ver0.9)をWindows Mixed Realityヘッドセットで試す場合、このruntimeを使う必要があります。必要なのは、Windows 10 October 2018 (Build 1809)以降がインストールされたVR Ready PC、Windows Mixed Realityヘッドセットです。

掲載されている手順を日本語にして追加説明を入れました。ただし、この通りではうまくいきませんでした。

1. Microsoft Storeから対応するアプリをインストール

対応するアプリ:Mixed Reality OpenXR Developer Preview app

2. Mixed Reality OpenXR Developer Preview Compatibility Packを取得する

ここから、zipファイルを取得します。

3. dllをレジストリに登録する

zipを解凍し、MixedRealityRuntime.jsonがあるパスを指定して、コマンドプロンプトから以下を実行します。

例:ファイルパスが "C:¥Users¥Document¥OpenXR¥MRR¥MixedRealityRuntime.json"の場合

reg add "HKLM\Software\Khronos\OpenXR\0" /v ActiveRuntime /t REG_SZ /d "C:¥Users¥Document¥OpenXR¥MRR¥MixedRealityRuntime.json" /reg:64

このとき、コマンドプロンプトのアイコンを右クリックし、「管理者として実行」で実行しておきます。

4.Mixed Reality OpenXR Developer Preview appを開く

本来ならば、表示されたウインドウに"The Mixed Reality OpenXR Runtime is installed"と表示されるはずなのですが、私の環境ではこのように表示されてしまいました。

Failed setting result of Mixed Reality OpenXR Developer Preview app

We detected that your version of Windows requires a Compatibility Pack to use Windows Mixed Reality OpenXR Developer Preview.

おそらくreg addが正しく設定されてないのだと思います。後日見直して、動いたら更新します。

3.3 XR Vender Runtime System (Collabora)

3.3.1 Collaboraとは?

Collaboraはイギリスのケンブリッジにある会社です。OSSのセミナーから、ソフト開発、コンサル、標準化活動まで幅広く対応しているようです。

Collabora | Open Source Consulting

Collabora (@Collabora) | Twitter

今回、GDC2019に合わせてCollabora社が発表したのが、Monadoです。

3.3.2 Monadoとは?

Linux向けの OpenXR Runtimeです。

Introducing: Monado

OpenXRとしてのXR Vender Runtime Systemはヘッドセットベンダーの数だけ必要になりそうですが、Monadoの記事を見る限り、MonadoはLinuxにおいてruntimeの視点から複数のヘッドセットをサポートする意向があります。

  • Supports multiple devices
  • One native driver for the HDK series of devices
  • Supports more hardware via OpenHMD

引用元:Monado - Developer Site

現時点のOpenXR対応のデモ動画が公開されていたので掲載します。OpenXRの構想に沿って、Linux上で動かしたということだと思います。

youtu.be

3.4 OpenXR Device Pluginは未公開のまま

GDC2019の発表スライドOptional device plugin interface will be supported post V1.0とあるように、ver0.9時点では公開されていません。

3.5 Unityだけでなく、Babylon.jsも構想の中に入っている

Relation native app and Webapp in OpenXR

引用元:https://www.khronos.org/assets/uploads/apis/OpenXR-Update-GDC_v20190316c_Mar19.pdf

GDC2019の発表資料にある通り、Babylon.jsも関わってくるようです。

4. おわりに

Oculus Rift DK1が発表された2013年からそろそろ6年が経ちますが、依然として新しいデバイス、開発方法、適用事例は増え続けています。OpenXRは完全に使えるようになるまでにまだもう少しかかりそうですが、増え続けるXR関係の開発を効率化する手段としてはとても期待が持てます。

次のver1.0.0は2019年内のようです。次はアプリ開発者として使えるAPIが出てくるはずなので、発表されたら使い方や制約などを整理しようと思います。