MRが楽しい

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

MRTK 2.5を使ってHoloLens2上でObjects3Dフォルダのglbファイルを動的に読み込む

本日は MRTK の調査枠です。
MRTK 2.5を使ってHoloLens2上でObjects3Dフォルダのglbファイルを読み込む手順を記事にします。
f:id:bluebirdofoz:20201210232222j:plain

MRTKのglTF読み込み

MRTK を使って glTF 形式の3Dデータを読み込む場合は以下の名前空間のクラスを利用します。
microsoft.github.io
microsoft.github.io

GltfUtility クラスが gltf または glb 拡張子のモデル読み込み機能を提供します。
microsoft.github.io

HoloLens2のObject3Dフォルダ

HoloLens2 内の Objects3D フォルダは KnownFolders クラスを使って、スクリプトからアクセス可能です。
docs.microsoft.com

詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

読み込みサンプル

MRTK 2.5をインポートして基本設定を行ったサンプルプロジェクトを作成しました。
f:id:bluebirdofoz:20201210232314j:plain

MRTK を使ったプロジェクトの基本設定の手順は以下の記事を参考にしてください。
bluebirdofoz.hatenablog.com

Objects3Dフォルダ直下にある指定ファイル名の glb ファイルを動的読み込みする以下のスクリプトを作成しました。
・GLBLoadTest.cs

f:id:bluebirdofoz:20201210232334j:plain

以下の部分が glb ファイルの読み込み処理になります。

// 読み込みファイルのバイト配列を取得する
byte[] modelByteData = GetFileAsByteArray(filepath);

// バイト配列を指定して読み込み
GltfObject gltfObject = GltfUtility.GetGltfObjectFromGlb(modelByteData);

try
{
    // 非同期の読み込み処理を完了まで待機する
    await gltfObject.ConstructAsync();
}
catch (Exception e)
{
    Debug.LogError($"GlbLoad failed - {e.Message}\n{e.StackTrace}");
    return;
}

作成したサンプルスクリプトを任意のオブジェクトにアタッチし、フィールドに読み込み対象のファイル名を指定します。
f:id:bluebirdofoz:20201210232346j:plain

HoloLens2 上でObjects3Dフォルダにアクセスするには Capability の設定を行う必要があります。
メニューから Edit -> Project Settings.. を開き、[Capabilities]の[Objects3D]のチェックを有効にしておきます。
f:id:bluebirdofoz:20201210232357j:plain

シーンを再生して動作を確認します。
サンプルスクリプトは UnityEditor での実行時には Assets/StreamingAssets フォルダ直下を読み込むように設定しています。
f:id:bluebirdofoz:20201210232408j:plain

HoloLens2へのアプリインストール

作成したプロジェクトをビルドして HoloLens2 へインストールします。
f:id:bluebirdofoz:20201210232420j:plain

アプリケーションのビルドとインストール手順は以下の記事を参考にしてください。
bluebirdofoz.hatenablog.com

HoloLens2への3Dモデルのアップロード

Type-C のUSB接続で HoloLens2 を PC に接続すると、HoloLens2 上のストレージを確認できます。
ここから 3DObjects フォルダに直接ファイルをアップロードします。
f:id:bluebirdofoz:20201210232437j:plain

HoloLens2での動作確認

アプリを起動した後、読み込みを待って目の前に3Dモデルが表示されれば成功です。
f:id:bluebirdofoz:20201210232521j:plain