MRが楽しい

MRやVRについて学習したことを書き残す

Unity-PassthroughCameraAPISamplesを使ってQuest3でカメラアクセスを試す

本日はQuest3の小ネタ枠です。
Unity-PassthroughCameraAPISamplesを使ってQuest3でカメラアクセスを試してみたので記事に残します。

Unity-PassthroughCameraAPISamples

Unity-PassthroughCameraApiSamplesはUnity開発者がMeta QuestのカメラデータにアクセスするためのMeta公式のサンプルプロジェクトです。
​このプロジェクトは標準的なWebCamTextureクラスとAndroidのCamera2 APIを使用してカメラデータを取得する方法を提供しています。
github.com

今回はこちらのプロジェクトを利用してQuest3でカメラアクセスを試してみました。

前提条件

本プロジェクトは以下のハードウェア環境で動作します。
・Meta Questデバイス: Quest 3またはQuest 3S​
・OSバージョン: Horizon OS v74以上

プロジェクトのデプロイ

上記のGitHubプロジェクトをクローンして取得するか、Zipファイルでプロジェクトをダウンロードします。
今回は[Download ZIP]からzipファイルをダウンロードしました。

ダウンロードしたQuestDisplayAccessDemo-master.zipを任意のフォルダに展開します。

UnityHubを起動してプロジェクトを開きます。
プロジェクトはUnityバージョン2022.3.58f1または6000.0.38f1で動作確認されています。
今回は2022.3.58f1を利用しました。Unity 6で利用する場合はマニフェストファイルの更新が必要なようです。

初回読み込み時にプラグイン読み込みのための再起動が求められます。
[Restert Editor]を実行します。

メニューから[File -> Build Settings]を開き、プラットフォームを[Android]に[Switch Pratform]で切り替えます。

参照シーンの設定は行われているのでこのまま[Build]を実行してapkファイルを作成できます。

動作確認

以下の記事を参考に作成したapkファイルをQuest3にデプロイして実行してください。
bluebirdofoz.hatenablog.com

アプリを起動するとサンプルシーンの選択メニューが表示されます。
以下の5つのサンプルが選択できます。
・CameraViewer
・CameraToWorld
・BrightnessEstimation
・MultiObjectDetection
・ShaderSample

CameraViewer

2Dキャンバス上にカメラ映像を表示するサンプルシーンです。

CameraToWorld

本サンプルシーンではRGBカメラ画像をパススルーと整列させて表示します。

コントローラをトリガーするとその時点2D画像の座標をワールド空間の3Dレイに変換します。
またカメラのワールドスペース上の座標も保存します。

BrightnessEstimation

カメラデータを用いて環境の明るさを推定するサンプルシーンです。
部屋を暗くするとサンプルシーン内のテキスト文字が発光します。

MultiObjectDetection

Unity Sentisを使用してカメラデータからリアルタイムでオブジェクトを検出するサンプルシーンです。

以下のようにオブジェクトを検知するとその場所に認識したオブジェクト名とマークが表示されます。

ShaderSample

カメラ画像に対してシェーダーを使用してエフェクトを適用するサンプルシーンです。