やっていくOpenXR入門

1-1. OpenXRとは

OpenXRは、VRゴーグルをはじめとするようなVR/AR/MR関連の機器の機能を統一的に扱うことのできるC言語製の低レイヤAPIです。

APIというのはプログラミングにおける、例えば「こういう名前の関数があってこんな風に呼び出せばこういう機能が使えるよ」といったような取り決めの集合です。このような取り決めがあれば、同じ関数を同じように呼び出すことで、違う環境上でプログラムを動かしても同じように機能にアクセスできます。

OpenXRに対応している機器であればどこの会社の製品であろうと同じプログラムが動くわけです。

OpenXR誕生前

OpenXRというものが誕生する以前、アプリケーション開発者がVR機器の機能にアクセスする際はどのようにしていたのでしょうか。

答えは、各会社の提供する専用のSDKを使うしかありませんでした。もしくは内部でそれをやってくれているUnityやUnreal Engineのようなゲームエンジンに全てを頼り切るかのどちらかです。

例えば、Vive社の提供するVRHMDでゲームを作るならVive社の提供するSDKを使う必要がありました。Oculus Questで動くゲームを作るならOculusのSDKを使う必要があります。これらのSDKには相互の互換性なんて当然ありません。そのためアプリを開発する際は特定の会社のHMDでしか動かないものと割り切って開発するか、もしくは労力をかけて各社のSDKに個別に対応するという形になります。

Unityのようなゲームエンジンを利用するのであればその心配は少ないかもしれませんが、一企業が商売として提供しているフレームワークに全てを任せることには不安が残ります。また機器を製造する側の視点に立ってみると、もしいろいろなゲームエンジンで使ってもらおうと思ったら各ゲームエンジン向けにそれぞれ対応する必要が出てきてしまいます。

この混沌とした状況を解決しつつあるのが統一規格であるOpenXRです。OpenXRは非営利団体であるKhronos Groupが定めるフリーかつオープンなAPI規格であり、アプリの開発側も、HMD等の機器を作る側も自由に利用することができます。アプリの開発側はOpenXRを使って開発すればどの機器でも関係なく動かすことができ、また機器の開発側もOpenXRに対応すれば様々なアプリ開発者に使ってもらえます。

OpenXRの領分

OpenXRは(現状)主に以下の機能があります。

  • HMDの画面との接続
  • HMDの位置・傾き情報の取得
  • コントローラ入力、コントローラの位置・傾きの取得
  • 拡張機能による種々の周辺デバイスとの通信

HMDから頭の位置を取り、それを反映して画面を表示するというVRの基本的な仕組みが実現できるようになっています。それに加えてコントローラによる入力の取得ができ、また各社独自の周辺デバイス(例としてViveのモーショントラッカーや表情トラッカーなど)にも拡張機能で対応できるようになっています。

「画面への描画」ではなく「画面との接続」と書いたのは、OpenXR自体が画面描画APIというわけではないからです。 OpenXRは環境次第でVulkan、OpenGL、DirectXなどの描画APIを提供し、様々なAPIで画面に描画できるようになっています。 それらのグラフィックスAPIとVRHMDの画面を結び付けてくれるのがOpenXRの機能です。

最後にもう一つ、OpenXRは現状サウンド関係のサポートがありません。厳密に言うと、一部の機器では拡張機能としてOpenXR経由でサウンド関係の機能にアクセスできるようですが、コア機能として各種機器のサウンド機能に統一的にアクセスできるようにはなっていません。ここについては現状別のサウンド系APIを利用する必要があります。