📃

【 HoloLens 2 開発 】OpenXR に関する基礎知識

2022/05/26に公開

はじめに

MRTK (Mixed Reality Toolkit) が次のメジャーバージョンアップデート (MTRK v3.0.0) に伴い、OpenXR と Unity の XR Interaction Toolkit (XRI) 上に構築されるということで、まずは OpenXR について調査したので、情報を整理しておきたいと思います。

OpenXR 概要

Khronos グループが策定を行っているロイヤリティフリーかつオープンな API Standard (API標準) です。OpenXR は Mixed Reality (AR/VR) スペクトラムの幅広いデバイスへのネイティブアクセスを提供します。HoloLens 2、Windows Mixed Reality イマーシブVRヘッドセット、デスクトップで OpenXR を使った開発が可能です。ヘッドセットを持っていない場合は、代わりに HoloLens 2 エミュレーター、もしくは Windows Mixed Reality シミュレーターを使用できます。

"OpenXR seeks to simplify AR/VR software development, enabling applications to reach a wider array of hardware platforms without having to port or re-write their code and subsequently allowing platform vendors supporting OpenXR access to more applications. With the release of the OpenXr 1.0 specification, AR/VR developers can now create true cross-platform XR experience." (原文)
OpenXR
OpenXR 公式サイト

OpenXR は AR/VR ソフトウェア開発をよりシンプルにすることを追い求め、ポーティングやコードの書き換えを必要とせず、幅広いハードウェアプラットフォームへのリーチを可能にします。そして、プラットフォームベンダーがより多くのアプリケーションにアクセスする OpenXR をサポートすることを許可します。既にリリースされている OpenXR 1.0 仕様によって、AR/VR 開発者は真のクロスプラットフォーム XR 体験を作成することができます。(抄訳)

なぜ OpenXR を使うのか?

OpenXR を使用すると、HoloLens 2 のようなホログラフィックデバイスや、PC向けの Windows Mixed Reality ヘッドセットのような Immersive VR デバイスの両方をターゲットとしたエンジンの構築が可能になります。1度コードを書くと、広範囲のハードウェアプラットフォームの間でコードを持ち運ぶ (再利用) することができます。

OpenXR API はアプリケーションからヘッドセットのネイティブプラットフォームに直接アクセスするためにローダー (loader) を使います。これにより、エンドユーザーは Windows Mixed Reality、もしくはそれ以外のヘッドセットを使用しているかに関わらず、最大限のパフォーマンスと低遅延を手に入れることができます。

XR フラグメンテーション を解決する
OpenXR を使用すると、XR フラグメンテーション (プラットフォームごとの対応) を解消することができます。ここでは OpenXR の使用有無とその際の開発について少しご紹介したいと思います。

Solving XR fragmentation

(OpenXR 公式サイト より引用)

OpenXR (クロスプラットフォーム標準) を使用しない場合、VR/AR アプリケーション または 開発エンジンは、プラットフォーム独自仕様の API (インターフェース) を利用してデバイスからの入力をハンドリングする必要がありました。そのため、新しい入力デバイスをアプリケーションでサポートする場合は、プラットフォームごとの入力インターフェースを統合する必要がありました。MRTK v2 では、MRTK Runtime > Input Serivce > Device Manager を拡張することでクロスプラットフォームに対応していました。

一方、OpenXR を使用した場合、異なるプラットフォームの多種多様な XR デバイスランタイムに OpenXR (クロスプラットフォーム標準) の API を使用することで直接アクセスすることができます。つまり、OpenXR を使用すれば共通のインターフェースを通じて、異なるデバイス・ランタイムごとの入力値へアクセスすることが可能になり、プラットフォームごとにソースコードを用意することが不要になります。ただし、OpenXR API Core だけでデバイス全ての機能へのアクセスはできないので、プラットフォームごとに OpenXR API を拡張する Plugin などが用意されています。HoloLens 2 の全ての機能へ OpenXR を通じてアクセスする場合は、Mixed Reality OpenXR Plugin が用意されています。

※ フラグメンテーションとは?
破片や断片化する、などの意味を持つ英単語。データや記憶領域などが意図せず、小さな塊 (断片) に分断されている状態を示します。

OpenXR とは?

OpenXR API は ホログラフィックデバイス (Holographic) とイマーシブデバイス (Immersive) の両方をターゲットとするエンジンを構築するために必要となる ポーズ予測 (pose prediction)、フレームタイミング (frame timing)、そして 空間入力 (Spatial input) 機能を提供します。

  • pose prediction
  • frame timing
  • spatial input

OpenXR についてもっと詳しく知りたい方は、以下サイトを参照してください。

HoloLens 2 のすべての機能 (Feature) をターゲットにするためには、cross-vender とともに、vender-specific OpenXR Extentios ( Mixed Reality OpenXR Plugin ) を使用します。これによりOpenXR 1.0 core の範囲を超えて ハンドトラッキング (Articulated hand tracking) や アイトラッキング (Eye Tracking)、空間マッピング (Spatial mapping)、空間アンカー (Spatial Anchor) のような追加機能を有効化します。

OpenXR は Mixed Reality エンジンではありません。その代わりに、OpenXR は Unity や Unreal のようなエンジンで再利用性の高いコードを書くことを可能にします。1度コードを書くと、ホログラフィックデバイスもしくはイマーシブデバイスのネイティブプラットフォーム機能へアクセスすることができます。

ロードマップ

OpenXR specification は拡張メカニズム (extention mechanism) を定義し、ランタイム開発者に OpenXR 1.0 specification に基づいて定義されたコア機能の範囲を超えた追加機能の公開を実現します。

OpenXR 拡張は3種類に分類されます。

  • Vendor extentions (ex.MSFT)
  • Cross-vendor extentions (EXT)
  • Official extentions (KHR)

Windows Mixed Reality OpenXR Rutime では、MSFT と EXT の拡張セットをサポートしており、HoloLens 2 のすべての機能を OpenXR アプリケーションで使うことができます。

Unity での OpenXR の使用

Microsoft が現在推奨している HoloLens 2 及び Windows Mixed Reality 開発
における Unity の構成は 最新の Mixed Reality OpenXR Plugin と Unity 2020.3 LTS です。Mixed Reality OpenXR Plugin は HoloLens 2 及び Windows Mixed Reality ヘッドセットのすべての機能を有効にするための OpenXR 拡張へのサポートが含まれています。(ハンドトラッキング/アイトラッキング、空間アンカー、HP Reverb G2 コントローラー) MRTK-Unity は MRTK v2.7 の一部として OpenXR がサポートされています。Unity と OpenXR バージョンの組み合わせについて、詳しい情報を知りたい場合は「Choosing a Unity Version and XR plugin」をご覧ください。

OpenXR サンプル

https://docs.microsoft.com/en-us/samples/microsoft/openxr-unity-mixedreality-samples/openxr--unity--mixed-reality-samples/

https://github.com/microsoft/OpenXR-Unity-MixedReality-Samples

参考文献

Discussion