484 Views
October 21, 21
スライド概要
XRミーティング 2021/10/20【AR/CR/MR/SR/VR】(https://osaka-driven-dev.connpass.com/event/226481/)
登壇資料。
Mixed Reality Toolkit のPlaneFindingの使い方の説明。PlaneFindingは空間の床面や壁面に沿った平面を計算で推定する部品です。空間認識はセンサーで分析しますが、表面はポリゴンで均一な平面にはなりません。PlaneFindingを使うと平面として配置できる空間情報(位置、回転、サイズ等)を取得できます。
ICT業界でソフトウェアエンジニア/アプリケーションアーキテクトを担当。 社内ではXR関連技術に関する啓もう活動や技術支援に従事。 業務の傍ら、XR(特にMixed Reality領域)についての開発技術の調査、開発などを行っています。 また、「大阪駆動開発」コミュニティ所属しており、日々の調査で得た知見はコミュニティを通して情報発信を行っています。
今改めてみる PlaneFinding 2021/10/20 XR ミーティング takabrz1 大阪駆動開発 Takahiro Miyaura
Microsoft MVP for Windows Development 2018-2022 某会社でSE(アプリケーション領域のアーキテクト的なお仕事なはず)= XRは趣味です(貢献領域:Mixed Reality) 宮浦 恭弘 (Miyaura Takahiro) ◼ 大阪駆動開発(とHolomagicians)コミュニティに生息 ◼ HoloLens日本販売してからxR系技術に取組む ◼ 普段はよくMixed Reality Toolkitに関する調査している ✓ リリース機能調べたり・・・ ✓ 面白い機能使ってみたり・・・ ✓ 新しい実験してフィードバックしたり・・・ 最近はこちらに Come Back気味 と思ったらDigital Twins ◼ 新しい技術や、MRに使えそうな技術を調べる 技術Tips : https://qiita.com/miyaura @takabrz1 ※よかったらこれを機にお知り合いになってください
お題:PlaneFindingを調べてみた 空間マッピングの平面だしの機能です 2021/10/21 Copyright © 2021 Takahiro Miyaura
小話 その① まだこれ移植してますw 元はHoloLens 1向けの Mixed Reality のサンプルの1つ ✓MRTK V2.7.2で動かす ✓OpenXRで稼働させる ✓HoloLens 1 向けのUXをHoloLens 2に替えていってる 2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingはMixed Reality Toolkitの部品 2021/10/21 Copyright © 2021 Takahiro Miyaura
MicrosoftのMixed Reality向けライブラリ群 用途/プラットフォームで提供 ◼Unity向け ◼クロスプラットフォーム ◼最新バージョンはV2.7.2 ✓UX部品 ✓イベント制御系 etc… 2021/10/21 ◼Unreal向け ◼サブセットがいくつかある ◼第一弾はUXTools for Unreal ◼ 最新はV0.12.1 ◼ Unity向けのライブラリと同等を目指す Copyright © 2021 Takahiro Miyaura ◼Unity向け ◼UXデザインのサンプル ◼Periodic Table ◼Lunar Module ◼Surface
Mixed Reality Toolkit V2 for Unity 概要 Unity向けOSSライブラリ ◼ Cross Platformでの開発可能 ✓ XRデバイスにおけるUnity開発の基本的な構成要素を提供 ✓ ラピッドプロトタイピングを実現 ✓ コア機能が交換可能な拡張性の高いフレームワーク HoloLens HoloLens 2 OpenVR HMD (HTC Vive / Oculus Rift) 2021/10/21 iOS/Android (ARFoundation) Windows Mixed Reality HMD Copyright © 2021 Takahiro Miyaura Oculus Quest 2
Mixed Reality Toolkit V2 概要 XRデバイスの固有機能を含め様々な補助機能を提供 2021/10/21 Copyright © 2021 Takahiro Miyaura
Mixed Reality Toolkit V2 概要 UX building blocks : 組込み済みのUX部品群 2021/10/21 Copyright © 2021 Takahiro Miyaura
Mixed Reality Toolkit 概要 Unity と Unreal用共通で利用する為のベース https://github.com/microsoft/MixedRealityToolkit ◼ Mixed Reality Toolkit ◼ C++ベースのライブラリ等で構成 ◼ GpuStats ◼ Sharing ◼ SpatialInput ◼ PlaneFinding → ここの部品 ◼ SpatialUnderding ◼ SpecterViewPlugin 2021/10/21 Copyright © 2021 Takahiro Miyaura
Plane Findingとは 2021/10/21 Copyright © 2021 Takahiro Miyaura
Plane Findingとは 概要 空間の平面だしをする部品です ◼ 大量のMesh情報から水平面、垂直面を作る 2021/10/21 Copyright © 2021 Takahiro Miyaura
Lets‘s Try |ω・)b 2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try 環境 今回の環境 ◼ 開発環境. ✓ ✓ ✓ Unity 2020.3.8f1 Visual Studio 2019 Windows SDK 10.0.19041.0 ◼ ライブラリ ✓ ✓ ✓ ✓ 2021/10/21 Mixed Reality Toolkit Foundation V2.7.2 Mixed Reality Toolkit Plane Finding V1.0.0 Mixed Reality Toolkit Standard Assets V2.7.2 Mixed Reality OpenXR Plugin V1.1.1 Copyright © 2021 Takahiro Miyaura
ちなみに最近知ったのですが。。。 2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try 最近知ったこと Mixed Reality開発の手順がMicrososft Learnに変わってる ◼ そして英語化(近いうちに日本語化予定) ◼ OpenXR環境でMRTKをセットアップするラーニングパスは以下 ◼ https://docs.microsoft.com/ja-jp/learn/modules/learn-mrtk-tutorials/1-2-configure-unity-for-windows-mixed-reality 英語じゃ・・・ という方のためにセットアップ紹介 2021/10/21 Copyright © 2021 Takahiro Miyaura
OpenXRなMRTK環境を作る手順 2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 少しだけややこしいですよ 1. まずはUnityで空プロジェクトを作成(PlaneFindingSamples等) 2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用) ✓ ✓ 3. 4. 5. 6. 7. 2021/10/21 OpenXR Pluginもセット ついでに今回使うPlaneFindingもセット Unityで再度プロジェクトを開く プラットフォームをUniversal Windows Platformに OpenXRの設定を行う MRTKの初期設定を行う パッケージ名を直す Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用) 1. サイトからMixed Reality Feature Toolをダウンロードする ◼ https://docs.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool 2. ツールを起動する 3. 先ほど作った空プロジェクトを開く 4. 必要なコンポーネントをインポートする ✓ ✓ ✓ ✓ 2021/10/21 Mixed Reality Toolkit Foundation V2.7.2 Mixed Reality Toolkit Plane Finding V1.0.0 Mixed Reality Toolkit Standard Assets V2.7.2 Mixed Reality OpenXR Plugin V1.1.1 Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 1. 2. 3. 4. 5. 2021/10/21 起動すると左記のメニューが出る Unity OpenXR pluginを押す Show XR Plug-in management Settingsを開く Project Settingsが拓く OpenXRの設定を行う。 Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 1. 2. 3. 4. 5. 2021/10/21 XR Plug-in Managementを選択 UWPのタブでOpenXRをチェック Microsoft HoloLens feature groupをチェック MRTKのメニューが以下の様に変化する Apply Settingsを押す Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 1. OpenXR関連の設定が自動で行われる 2. Depthの設定を16bitに変更 3. Interaction Profilesを確認 Microsoft Hand Interaction Profileがある 4. OKならNextを押す 2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 6. MRTKの初期設定を行う 1. OpenXR関連の設定が自動で行われる 2. Depthの設定を16bitに変更 3. Interaction Profilesを確認 Microsoft Hand Interaction Profileがある 4. OKならNextを押す 2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try OpenXRなMRTK環境を作る手順 7.パッケージ名を直す 1. パッケージ名を適当な形に変更 ※これしないと上書きされる問題 2. 新しいシーンにMRTKの初期設定を行う 3. 空のOpenXRなMRTK環境が完成 2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う 2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う 実装内容は以下のフロー 1. 空間マッピングからメッシュ情報を取得 2. 取得した情報をPlane Findingに送る 3. 処理結果を可視化する 2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う
1. 空間マッピングからメッシュ情報を取得
IMixedRealitySpatialAwarenessMeshObserverから取得可能
MRTKの空間マッピングの機能を取得
var spatialAwarenessService = CoreServices.SpatialAwarenessSystem;
var dataProviderAccess = spatialAwarenessService as IMixedRealityDataProviderAccess;
observer = dataProviderAccess.GetDataProvider<IMixedRealitySpatialAwarenessMeshObserver>("OpenXR Spatial Mesh Observer");
List<PlaneFinding.MeshData> meshData = new List<PlaneFinding.MeshData>();
List<MeshFilter> filters = observer.Meshes.Select(x => x.Value.Filter).ToList();
text = $"MeshCount -> {filters.Count}";
for (int index = 0; index < filters.Count; index++)
{
MeshFilter filter = filters[index];
if (filter != null && filter.sharedMesh != null)
{
// fix surface mesh normals so we can get correct plane orientation.
filter.mesh.RecalculateNormals();
meshData.Add(new PlaneFinding.MeshData(filter));
}
}
2021/10/21
Copyright © 2021 Takahiro Miyaura
スキャンした空間のメッシュ情報を取得
Plane Findingへの渡すための前処理
PlaneFindingを使う
2. 取得した情報をPlane Findingに送る
先ほどのメッシュ情報を引数で渡す
Task<BoundedPlane[]> planeTask = Task.Run(() =>
PlaneFinding.FindPlanes(meshData, snapToGravityThreshold, MinArea));
結果はBoundedPlaneで返ってくる
BoundedPlane[] planes = planeTask.Result;
public struct BoundedPlane
{
public Plane Plane;
public OrientedBoundingBox Bounds;
public float Area;
}
2021/10/21
Plane Findingで計算
BoundedPlaneはこういうStruct型
平面に関する情報はOrientedBoundingBoxに入っている
Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う 3. 処理結果を可視化する BoundedPlaneの情報を使って面を可視化する foreach (var boundedPlane in planes) { GameObject primitiveType = GameObject.CreatePrimitive(PrimitiveType.Cube); BoundedPlane.Boundsの情報でオブジェクトの位置、向き、サイズを調整 primitiveType.layer = observer.MeshPhysicsLayer; primitiveType.transform.parent = gameObject.transform; primitiveType.transform.position = boundedPlane.Bounds.Center; primitiveType.transform.rotation = boundedPlane.Bounds.Rotation; Vector3 extents = boundedPlane.Bounds.Extents * 2; primitiveType.transform.localScale = new Vector3(extents.x, extents.y, 0.01f); } 2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う 結果 以下の様に平面出しが可能に 2021/10/21 Copyright © 2021 Takahiro Miyaura
まとめ 2021/10/21 Copyright © 2021 Takahiro Miyaura
まとめ(今回わかったこと) ◼ (今更ですが)PlaneFindingを調べてみた ✓ Mesh情報から計算で平面になる領域を計算し返してくれる ✓ Mesh情報があればいいので実は空間マッピング関係なく利用できる ✓ 現実空間に沿った平面情報を扱いたい時には気軽に使える ✓ テーブル上に何か出すコンテンツ等 ✓ MRTKにはSceneUnderStandingという空間シーンの形状分類の機能もある ✓ 空間全体の推定という意味ではそちらの方が効果がある場合も ちょっと平面だししたい時にはPlane Findingもあることを思い出して 2021/10/21 Copyright © 2021 Takahiro Miyaura
大阪駆動開発 関西を中心に、IT系のおもしろそうなことを楽しんでやるコミュニティ