Mini-XR: 各社AR SDKの比較
... これは超難しいのでちょっと後まわしかな。。
ARの要件
ざっくり以下が最低要件と言える:
- 1つ以上のカメラフィードに対して、現実スケールの3D描画を適切なオクルージョン付きで合成できる (光源推定はオプショナル)
- UI用に手および顔の位置を矩形で取れる、メッシュやスケルトンが取れると尚良
(Azure) KinectやGoogle ARCoreはこの要件を満たしている。つまりCamera depthによって3Dオブジェクトをオクルージョンできるし、手や顔を検出できる。Kinectは据置型でARCoreはハンドヘルド型という違いはあるが。。
前者の要件はWebXR Device APIがカバーしている。後者は今のところWebXRに良い実装がない。ARCoreは手の検出を行えないが、そもそも手が写ること自体あんまり無いので大きな問題ではないだろう。例えば、ARスケッチアプリがあったとして、Kinectのような据置機材では画面に写ったUIを体で触って操作することになるが、Androidのような手持ちのARでは、UIは直接画面にタッチして操作するためAR的に処理する必要性は薄い。
Unityの AR Foundation はより豊富な機能を抽象化している。この機能性はApple ARKitを基準にしていて、例えばMeshingはAndroid ARCoreでは使えない。
Apple ARKitはdepthを(MLによる予測ではなく)測定的に出すのを基本にしている。つまり、通常の外側カメラの映像に対して3Dコンテンツをオクルージョンするためには、depthではなく セグメンテーション(Matte)を使用している 。実際、完全なdepthをRGBカメラで生成するよりはセグメンテーションの方がずっと安くて高品質なので、シーン認識を抽象化してしまった方が良いのかもしれない。
ToDo
- コンポジションをシステム任せにすることは可能か?というかたぶんWebXRがその方式のはずで、WebXRに自然にオクルージョンを足す方法を考えれば良さそう。
- Light estimation
- 設置型とハンドヘルドの区別
- ハンドジェスチャ(point and holdで諦める必要があるかもしれないけど)
Magic Leap
- 機能のOverview: https://developer.magicleap.com/en-us/learn/guides/magic-leap-features
- C API: https://developer.magicleap.com/learn/reference/public/v0.25.0/CAPI/index.html
- WebXR: https://developer.magicleap.com/en-us/learn/guides/webxr-overview
シースルー型のARプラットフォーム、 視線入力搭載 、 片手 リモコン 、 手認識 有り。
とにかくプラットフォームにしようという強い意思は感じる。。ランタイムはWindows/Macもサポートしていてシミュレータで実行できるが、WebXRに対応したブラウザ(Helio)は実機でしか使えない。OpenXRは支持を表明しているがまだSDKではサポートされていない。
Androidのアプリケーションフレームワークは使用しておらず、libc等の流用に留まっているように見える。APIレベルやマニフェスト等にはAndroidの影響は伺える。
Unityでカバーされていない機能性が非常に多い。Bluetoothやソーシャルグラフのインテグレーション、3Dオーディオエンジン等がC APIで開示されている。UnityでカバーされているMeshing等も非常に強力でコストが掛かっているのを感じる。
HoloLens
シースルー型のARプラットフォーム、 視線入力 、 リモコンなし 、手トラッキング 、 手ジェスチャ 。
基本的には OpenXR の機能リスト に非常にわかりやすくまとまっている。OpenXRでカバーされない機能性は通常のWindows UWPで、これに関しては Hyper-V上のエミュレータ が提供されている。
Varjo
- 日本語サイト: https://varjo.jp/
- デベロッパサイト: https://developer.varjo.com/
- OpenXR: https://developer.varjo.com/docs/openxr/openxr
- UltraleapのOpenXR: https://developer.leapmotion.com/openxr
VR+ARプラットフォーム、 視線入力 、リモコンなし、 手トラッキング 。
通常の人間には販売していない。ソフトウェアは買い切りとサブスクリプションを選択可能。OpenXRを積極的にサポートしていて、独自のSDKの他にその機能を基本的にOpenXRの拡張に載せている。特に視線と手トラッキングはHoloLensと共通の拡張となっている。
現在のバージョンはUltraleap(元LEAP Motion)のハンドトラッキングを採用しているが、ジェスチャ用のAPIは提供していないようだ。
VIVE Sense
- 本家: https://developer.vive.com/resources/vive-sense/
- SRWorks: https://developer.vive.com/resources/vive-sense/sdk/vive-srworks-sdk/
VR+ARプラットフォーム。視線入力なし、リモコンはVR同様(2本)、手トラッキング、Depth(推定)メッシュ。
VIVEのAR向けSDKはPC版VIVEをサポートしている。...何これ全部入りじゃん。。スタンドアロンヘッドセットのVIVE Focusはハンドトラッキングのみで、AR向けの機能が収録されているSRWorksはPC動作。SRWorksの機能はOpenXRでは公開されていない。
空間のメッシュ再構築とオブジェクトのセマンティック認識が可能。 ViveSR::RigidReconstruction::SceneUnderstandingObjectType
に定義されているのは、
FLOOR = 0
WALL = 1
CEILING = 2
CHAIR = 3
TABLE = 4
BED = 5
MONITOR = 6
WINDOW = 7
FURNITURE = 8
DOOR = 9
PICTURE = 10
PERSON = 11
LIGHT = 12
PLANT = 13
CURTAIN = 14
PILLOW = 15
の16種。
Oculus Quest
カメラスルーが急にアナウンスされた。といっても搭載カメラはトラッキング用のモノクロカメラなので用途はある程度制約される。