Unityを独学で勉強しているTomと申します。
今回は、Meta(旧Facebook)が開発する VR/MR ヘッドセット「Meta Quest 3」「Meta Quest 3S」向けの「Passthrough Camera API」が2025年4月30(米国時間)に Meta Horizon Store で公開アプリに正式対応した、という発表が気になり調べてみたので記事にしてみました。
なぜ気になったのか
私は Unity を勉強していますが、スマートグラス系の xRエンジニアになりたくて Unity を勉強しています。今は Unity の技術を習得するため、2D/3D関係なくアプリの開発をしています。その中で、今年4月に Meta が「Passthrough Camera API」の使用を開発者に公開しました。まだまだ勉強不足の私ですが、xRエンジニアを目指している私としてはタイムリーでこの仕様をキャッチアップしていかないといけない、と思い今回「Passthrough Camera API」を調べてみることにしました(タイムリーと言いつつ既に9月...)。それで思い切ってMeta Quest 3 も購入しました。
そもそも「Passthrough Camera API」とは何か
「Passthrough Camera API」とは、開発者が Meta Quest デバイスのカメラデータへアクセスできるようにする技術です。この API を使用することで、以下のことが可能になります。
- カメラデータへのアクセス:Unity の標準的な WebCamTexture や Android Camera2 API を介して、Meta Quest のカメラフィードを取得できる
- 複合現実(MR)体験の構築:現実世界を VR 空間に取り込み、バーチャルコンテンツと現実の環境をシームレスに融合させることができる
- 2Dと3Dの座標変換:検出された2D画像座標を、3D空間上の正確な位置に変換するためのメソッドを提供し、現実の物体上にバーチャルなオブジェクトを正確に配置できる
- カメラ情報の取得:カメラのポーズ(姿勢)や内部パラメータ(焦点距離など)といったメタデータにアクセスできる
で、結局何ができるの?
この API の開放により開発者が Quest 3 のカメラ映像に直接アクセスし開発することが可能になります。具体的には、現実空間の物体認識や独自の映像解析、QR コードの読み取り、クラウドを利用した高度な画像解析や視覚 AI との連携、インタラクティブなガイドアプリなど、これまでにない様々な新しい体験が可能となるアプリ開発が可能になります。どんなアプリが登場するかは今後我々アプリ開発者の腕の見せどころとなるでしょう。
API で具体的に何が出来るのかを調べるために、GitHub 上に公開されている「Passthrough Camera API」の サンプルプロジェクト をローカルに落としてきて実際に触ってみることします。その前に簡単にですがそのサンプルプロジェクトについての情報を下記に記載します。下記の記載内容はサンプルプロジェクトのページにある内容です。
必要な開発環境
- ソフトウェア:Unity 2022.3.58f1または6000.0.38f1でテスト済み 。Meta MRUK(v74.0.0以上)とUnity Sentis(v2.1.1)パッケージが必要
- ハードウェア:Quest 3 / Quest 3Sデバイスで、Horizon OS v74以上が動作している必要あり
- 権限:android.permission.CAMERA と horizonos.permission.HEADSET_CAMERA の Android 権限が必要
- パススルー機能の有効化:「Passthrough Camera API」を利用するには、Quest デバイスのパススルー機能が有効になっていることが必須条件
既知の制限と問題点
- 単一カメラへのアクセス:一度にアクセスできるのは、左右いずれか一方のパススルーカメラのみ
- WebCamTextureの制約:画像のタイムスタンプがサポートされていないため、キャプチャされたフィードと現実世界にわずかなズレ(40-60ms)が生じる 。また、最大解像度は1280x960に制限される
- パーミッション処理:現在のAPIは一度に1つの権限リクエストしか処理できないため、他のパーミッション管理システムと併用すると競合する可能性がある
- モデルの制限:組み込まれている物体検出モデルは Quest 3 向けに最適化されているため、100%の精度は保証されない 。特定の物体が誤認識されることがある
プロジェクトの内容
プロジェクトには、カメラデータにアクセスするための5つのサンプルシーンが含まれています 。
- CameraViewer:カメラデータを2Dキャンバスに表示する方法を示す
- CameraToWorld:RGBカメラの画像とパススルーのポーズを合わせたり、2D画像座標を3D空間の光線に変換したりする方法を示す
- BrightnessEstimation:明るさの推定を行い、ユーザーの環境に合わせて体験を適応させる方法を示す
- MultiObjectDetection:Unity Sentisにカメラデータをフィードして、現実世界の物体を認識する方法を示す
- ShaderSample:カメラテクスチャにカスタムエフェクトを適用する方法を示す
以下のGIFはサンプルプロジェクトのページにあるGIFです。プロジェクトの内容が多少なりともイメージし易くなるかと思い下記に埋め込んでおきます。
CameraToWorld | BrightnessEstimation |
---|---|
![]() |
![]() |
MultiObjectDectection | ShaderSample |
![]() |
![]() |
下記動画も参考に載せておきます。Metaソフトウェアエンジニアである Roberto Coviello 氏による機能紹介の動画です。
Unity SentisによるオンデバイスML/CVモデル
このプロジェクトでは、Unity Sentis を使用して、Quest 3 デバイス上でリアルタイムの物体検出を行うための YOLO モデルの活用方法も示しています 。
Sentis を使用する際の推奨事項
- モデルのアーキテクチャ:複雑なモデルや大規模なモデルは Quest デバイスでのパフォーマンスが低いため、よりシンプルなモデルを使用することが推奨される
- パフォーマンス最適化:カメラデータの処理と権限リクエストは非同期で行うことで、メインスレッドのブロックを避けることができる 。また、モデルの推論をフレーム間で分割するレイヤーごとの推論手法を実装することも有効
今回はここまでとします。次回は各プロジェクトを実際に動かしてみます。最後まで読んでいただきありがとうございました。