yotiky Tech Blog

とあるエンジニアの備忘録

MRTK v2 - Build Window

※ 6/17現在、調子が悪いようなので使わないほうが良さそう。 具体的には、インストールしても古いコンテンツが表示される(ビルドしてバージョンインクリメントされてるが中身が古い?)、ローカルPCにインストールされる、など。

目次

TL;DR

Microsoft.MixedReality.Toolkit.Unity.Tools を導入すると使えるようになる「Build Window」について。

なお、Mixed Reality Toolkit Documentation には「Build Window」の項目はない。
MRTK Utilities Build Window is not documented · Issue #5121 やそこからリンクを辿ったりするとビルドに関して明確に記述しない方針のように見える。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

f:id:yotiky:20200602143652p:plain

Microsoft.MixedReality.Toolkit.Unity.Toolsをインポートすると、「Build Window」を使えるようになる。
[Mixed Reality Toolkit > Utilities > Build Window] からウィンドウを開く。

f:id:yotiky:20200602143458p:plain

上段では、Unityでビルドする際の出力先ディレクトリの設定や、直接ビルド&インストール、Player Settingsを開いたりできる。

[Unity Build Options]タブ

f:id:yotiky:20200602142815p:plain

ビルドに含まれるシーンの一覧や、Unityビルド、ビルド結果をVisual Studioで開くなどができる。

[Appx Build Options]タブ

f:id:yotiky:20200602142819p:plain

appxへのビルドやその設定が行える。Unity上では設定できない「視線入力」を有効にすることも可能。

f:id:yotiky:20200602145431p:plain

ビルド結果のうち配布に必要なのは、該当するアーキテクチャの appxbundle と Dependencies フォルダ配下の該当するアーキテクチャのパッケージ。

[Deploy Options]タブ

f:id:yotiky:20200602142823p:plain

Device Portalと同じUsername/Passwordを入力すればOK。デバイスポータルもここから開ける。
ローカル接続すると[Discover HoloLens WIFI IP]は消えるのかな?

バージョン毎のアプリのインストール/アンインストール、アプリの起動/終了、ログなども確認できる。
なお、Visual Studio からインストールしたアプリがあると上書きできないので予め消してから行うこと。

MRTK v2 - Spatial Awareness (空間認識)

目次

TL;DR

Mixed Reality Toolkit Documentation の以下の Spatial Awareness の章から要点を抜き出したページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

空間認識を使用するには

詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultHololens2ConfigurationProfile
    • DefaultMixedRealitySpatialAwarenessSystemProfile
  • 設定

    • DefaultHololens2ConfigurationProfile をクローン
    • MixedRealityToolkit スクリプト > Spatial Awareness セクション で [Enable Spatial Awareness] を ON
    • DefaultMixedRealitySpatialAwarenessSystemProfile をクローン

Spatial Awarenessの見た目を変えるには

見た目を変える以外に、起動時の動作や更新間隔などスキャンやメッシュなどの設定が行える。
詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultMixedRealitySpatialAwarenessMeshObserverProfile
  • 設定

    • [WindowsMixedRealitySpatialMeshObserver] タイプのオブザーバーを展開
    • DefaultMixedRealitySpatialAwarenessMeshObserverProfile をクローン
    • [Display Settings] で表示/非表示、見た目(Material)の変更が可能

    f:id:yotiky:20200601213824p:plain:w400

    • Display Option
      • Visible - Visible Material を使用してメッシュを表示する
      • Occlusion - Occlusion Material を使用してシーン内のアイテムをオクルードする
      • None - メッシュをレンダリングしない

      https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Images/SpatialAwareness/MRTK_SpatialAwareness_DisplayOptions.jpg

Editor 上で扱うには

詳細はこちら。

microsoft.github.io

  • Clone する Profile ファミリー

    • DefaultObjectMeshObserverProfile
  • 設定

    • MixedRealityToolkit スクリプト > Spatial Awareness セクション で新たに [SpatialObjectMeshObserver] タイプのオブザーバーを追加
    • DefaultObjectMeshObserverProfile をクローン
    • デフォルトでサンプルの空間データが含まれている(ExampleSpatialMesh)

f:id:yotiky:20200601180110p:plain:w400 f:id:yotiky:20200601180123p:plain:w400

オリジナルの空間データを扱うには

  • HoloLens をPCに接続し、DevicePortalを開く
  • Views > 3D View の画面で、Spatial mapping の [Update] を実行すると現在認識している空間のメッシュが読み込まれる
  • 続いて [Save] を実行すると obj形式のデータをダウンロードできる
  • objファイルをUnityにImportし、先の [Spatial Object Mesh Observer] 内で、[Spatial Mesh Object] に設定する

f:id:yotiky:20200601181541p:plain:w400 f:id:yotiky:20200601181252p:plain:w400

コードから操作するには

すべてのスキャンを開始/停止したり、オブザーバー毎に開始/停止したり、Meshの取得やメッシュの表示/非表示などができる。
詳細はこちら。

microsoft.github.io

ドキュメントのサンプルコードでオブザーバーを取得しようとした所、既に2.4のコードになっている。

var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

2.3では以下のように取得可能。

var provider = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
var observer = provider.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

カスタムオブザーバーを作成するには

microsoft.github.io

HoloLens2 リファレンス(公式)

主なページ

Hololens 2(製品)

Docs

HoloLens

概要

管理

商用環境

操作方法

環境

Mixed Reality

概要(古め)

設計

開発

Unity 開発
はじめに
コア要素開発
プラットフォーム機能とAPI
Unreal 開発

配布

MRTK

HoloLens2 の 立体オーディオのチュートリアル

公式ページ。 docs.microsoft.com

目次

チュートリアル

立体音響の設計に関する推奨事項などは以下を参照。

混合現実アプリケーションでの空間サウンドの使用 - Mixed Reality | Microsoft Docs

概要と目標

明記されてないけど内容から推測する前提条件とか。(2020/5現在)

Unity プロジェクトへの空間オーディオの追加

MRTK コアパッケージは、Microsoft.MixedReality.Toolkit.Foundationのこと。

手元だとボリュームアイコンからの設定は、こうなってた。

f:id:yotiky:20200525113933p:plain

Windows Sonic For ヘッドホンについては以下のサイトあたりで。

penpen-dev.com

要約すると、2chヘッドホンで立体音響を聴くための機能で、音源自体がステレオだと効果はない。

Spatializing ボタンの相互作用サウンド

MRTKのUnity Projectの設定や、TextMesh ProのImportなどは適宜実施する。

ボリューム曲線の調整は、[Custom Rolloff]を選んで、ボリューム曲線のエンドポイントを編集からVolumeを1に設定すると楽。

f:id:yotiky:20200525132509p:plainf:id:yotiky:20200525132548p:plain

Visual Studio で「MSB3073」のビルドエラーが出る場合は、プロジェクトを個別にビルドしていくと解消された(要は順番の問題)。

ビデオからオーディオを Spatializing

ストアアプリの設定はこっちのタブ。 f:id:yotiky:20200525132937p:plain

機械翻訳が雑だけど頑張れば大丈夫。

実行時の spatialization の有効化と無効化

PressableButtonHoloLens2のOnClick() に設定するのは、QuadのSpatializeOnOff.SwapSpatialization。(機械翻訳が雑)

バーブを使用して空間オーディオに距離を追加する

特になし。

HoloLens2 の マルチユーザー機能のチュートリアル

公式ページ。 docs.microsoft.com

目次

チュートリアル

作業を終えたらAzureとPhotonのリソースは削除すること。

概要と目標

前提条件とか。(2020/5現在)

Photon Unity Networking の設定

Asset Storeが激重で[Download]ボタンがアクティブにならない場合は、ストア自体が死んでる可能性高いので諦めよう。

[PUN Wizard]を開くメニューが表示されてない場合は以下でいけるらしい。

複数のユーザーの接続

AppId設定していないと、HoloLensではエラーログが出る。 Editor上では実行する際にメッセージウィンドウが出る。

複数のユーザーとオブジェクトの移動を共有する

プレハブのところは多分間違ってる。

f:id:yotiky:20200525095345p:plain

HoloLensのアプリ起動する際は、起動方向を考慮しないとEditorと同時に見たり操作したりできないので注意。

Azure Spatial Anchors の共有エクスペリエンスへの統合

最低でも2台のHoloLensが必要なので未実施。

ShareAzureAnchor(), GetAzureAnchor() が存在しないので調査必要そう。

HoloLens2 の Azure 音声認識サービス チュートリアル

公式ページ。 docs.microsoft.com

目次

チュートリアル

基本的に用意されたものを組み上げて動作を確認する内容になってる。

作業を終えたらAzureのリソースは削除すること。

概要と目標

前提条件とか。(2020/5現在)

音声認識と文字起こしの統合と使用

  • Speech SDK を使用するため、競合しないようにMRTKの音声コマンドは[Manual Start]に変更する
    • Clone する Profile
      • DefaultHoloLens2InputSystemProfile
      • DefaultMixedRealitySpeechCommandsProfile
  • Azureのリージョンは、東日本ならjapaneast、西日本ならjapanwest
  • 認識するのは英語のみ

音声認識を使用したコマンドの実行

発音だけなんとかなれば。

Azure Cognitive Services の Speech Translation コンポーネントの追加

残念ながら日本語は選択肢にない。

意図と自然言語の理解の設定

LUISのAPIがv3.0でGAしており、チュートリアルで使うライブラリ(v2.0向け)と互換性が取れないため、 残念ながら最後まで行けず。

LUISの設定でEntity type に[Simple]はなかったので、[Machine learned]あたりかな?

docs.microsoft.com

HoloLens2 の Azure Spatial Anchors チュートリアル

公式ページ。 docs.microsoft.com

目次

チュートリアル

基本的に用意されたものを組み上げて動作を確認する内容になってる。

コードなどの解説は一切ないので、仕組みが気になる場合は別途コードを追うか、こちらをやってみるのが良いかと。

作業を終えたらAzureのリソースは削除すること。

概要と目標

前提条件とか。(2020/5現在)

Azure Spatial Anchors をお使いになる前に

実機で謎エラーが出ちゃう場合は一時ファイルなど削除してUnity再起動してやり直すとうまく行った。 (Assets、Packages、ProjectSettings以外のフォルダは全部消してOK)

Unityでビルド時に、Reference Rewriter ~ のエラーが出てもslnファイルが出力できてれば無視して良いらしい。 Unityで実行すると、当たり前だが DllNotFoundException: AzureSpatialAnchors のエラーが出る。

アプリの操作手順。

  1. Move the cube to a differenct location.
  2. Start Azure session.
  3. Create Azure Anchor (creates anchor at the location of the cube).
  4. Stop Azure Session.
  5. Remove Local Anchor (allows the user to move the cube).
  6. Move the cube somewhere else.
  7. Start Azure Session.
  8. Find Auzre Anchor (positions the cube at the location from step3).
  9. Delete Azure Anchor.
  10. Stop Azure Session.

和訳

  1. キューブを別の場所に移動します。
  2. Azure セッションを開始します。
  3. Azure アンカーを作成します (キューブの場所にアンカーを作成します)。
  4. Azure セッションを停止します。
  5. ローカル・アンカーの削除 (ユーザがキューブを移動できるようにする)。
  6. キューブを別の場所に移動します。
  7. Azure セッションを開始します。
  8. Auzre アンカーを検索します (ステップ 3 からの場所にキューブを配置します)。
  9. Azure アンカーを削除します。
  10. Azure セッションを停止します。

Azure Spatial Anchors の保存、取得、および共有

Anchor が作成されるとMove、Rotateはできない。Scaleは可能。

Azure Spatial Anchors のフィードバックの表示

特になし。