SlideShare ist ein Scribd-Unternehmen logo
1 von 33
takabrz1 大阪駆動開発 Takahiro Miyaura
今改めてみる
PlaneFinding
2021/10/20
XR ミーティング
宮浦 恭弘 (Miyaura Takahiro)
 大阪駆動開発(とHolomagicians)コミュニティに生息
 HoloLens日本販売してからxR系技術に取組む
 普段はよくMixed Reality Toolkitに関する調査している
 新しい技術や、MRに使えそうな技術を調べる
技術Tips : https://qiita.com/miyaura
@takabrz1 ※よかったらこれを機にお知り合いになってください
 リリース機能調べたり・・・
 面白い機能使ってみたり・・・
 新しい実験してフィードバックしたり・・・
最近はこちらに
Come Back気味
(貢献領域:Mixed Reality)
Microsoft MVP for Windows Development 2018-202 2
某会社でSE(アプリケーション領域のアーキテクト的なお仕事なはず)= XRは趣味です
と思ったらDigital Twins
お題:PlaneFindingを調べてみた
空間マッピングの平面だしの機能です
2021/10/21 Copyright © 2021 Takahiro Miyaura
小話 その①
2021/10/21 Copyright © 2021 Takahiro Miyaura
まだこれ移植してますw
MRTK V2.7.2で動かす
OpenXRで稼働させる
HoloLens 1 向けのUXをHoloLens 2に替えていってる
元はHoloLens 1向けの
Mixed Reality のサンプルの1つ
PlaneFindingはMixed Reality Toolkitの部品
2021/10/21 Copyright © 2021 Takahiro Miyaura
MicrosoftのMixed Reality向けライブラリ群
2021/10/21 Copyright © 2021 Takahiro Miyaura
用途/プラットフォームで提供
Unity向け
クロスプラットフォーム
最新バージョンはV2.7.2
UX部品
イベント制御系 etc…
Unity向け
UXデザインのサンプル
Periodic Table
Lunar Module
Surface
Unreal向け
サブセットがいくつかある
第一弾はUXTools for Unreal
 最新はV0.12.1
 Unity向けのライブラリと同等を目指す
Mixed Reality Toolkit V2 for Unity
概要
2021/10/21 Copyright © 2021 Takahiro Miyaura
Unity向けOSSライブラリ
OpenVR HMD
(HTC Vive / Oculus Rift)
iOS/Android
(ARFoundation)
HoloLens HoloLens 2
Windows Mixed Reality HMD
Oculus Quest 2
 Cross Platformでの開発可能
 XRデバイスにおけるUnity開発の基本的な構成要素を提供
 ラピッドプロトタイピングを実現
 コア機能が交換可能な拡張性の高いフレームワーク
Mixed Reality Toolkit V2
概要
2021/10/21 Copyright © 2021 Takahiro Miyaura
XRデバイスの固有機能を含め様々な補助機能を提供
Mixed Reality Toolkit V2
概要
2021/10/21 Copyright © 2021 Takahiro Miyaura
UX building blocks : 組込み済みのUX部品群
Mixed Reality Toolkit
概要
2021/10/21 Copyright © 2021 Takahiro Miyaura
Unity と Unreal用共通で利用する為のベース
https://github.com/microsoft/MixedRealityToolkit
 Mixed Reality Toolkit
 C++ベースのライブラリ等で構成
 GpuStats
 Sharing
 SpatialInput
 PlaneFinding → ここの部品
 SpatialUnderding
 SpecterViewPlugin
Plane Findingとは
2021/10/21 Copyright © 2021 Takahiro Miyaura
Plane Findingとは
概要
2021/10/21 Copyright © 2021 Takahiro Miyaura
空間の平面だしをする部品です
 大量のMesh情報から水平面、垂直面を作る
Lets‘s Try
|ω・)b
2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try
環境
2021/10/21 Copyright © 2021 Takahiro Miyaura
今回の環境
 開発環境.
 Unity 2020.3.8f1
 Visual Studio 2019
 Windows SDK 10.0.19041.0
 ライブラリ
 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
ちなみに最近知ったのですが。。。
2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try
最近知ったこと
Mixed Reality開発の手順がMicrososft Learnに変わってる
2021/10/21 Copyright © 2021 Takahiro Miyaura
 そして英語化(近いうちに日本語化予定)
 OpenXR環境でMRTKをセットアップするラーニングパスは以下
 https://docs.microsoft.com/ja-jp/learn/modules/learn-mrtk-tutorials/1-2-configure-unity-for-windows-mixed-reality
英語じゃ・・・
という方のためにセットアップ紹介
OpenXRなMRTK環境を作る手順
2021/10/21 Copyright © 2021 Takahiro Miyaura
Let’s Try
OpenXRなMRTK環境を作る手順
少しだけややこしいですよ
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. まずはUnityで空プロジェクトを作成(PlaneFindingSamples等)
2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用)
 OpenXR Pluginもセット
 ついでに今回使うPlaneFindingもセット
3. Unityで再度プロジェクトを開く
4. プラットフォームをUniversal Windows Platformに
5. OpenXRの設定を行う
6. MRTKの初期設定を行う
7. パッケージ名を直す
Let’s Try
OpenXRなMRTK環境を作る手順
2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用)
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. サイトからMixed Reality Feature Toolをダウンロードする
 https://docs.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool
2. ツールを起動する
3. 先ほど作った空プロジェクトを開く
4. 必要なコンポーネントをインポートする
 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
Let’s Try
OpenXRなMRTK環境を作る手順
5. OpenXRの設定を行う
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. 起動すると左記のメニューが出る
2. Unity OpenXR pluginを押す
3. Show XR Plug-in management Settingsを開く
4. Project Settingsが拓く
5. OpenXRの設定を行う。
Let’s Try
OpenXRなMRTK環境を作る手順
5. OpenXRの設定を行う
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. XR Plug-in Managementを選択
2. UWPのタブでOpenXRをチェック
3. Microsoft HoloLens feature groupをチェック
4. MRTKのメニューが以下の様に変化する
5. Apply Settingsを押す
Let’s Try
OpenXRなMRTK環境を作る手順
5. OpenXRの設定を行う
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. OpenXR関連の設定が自動で行われる
2. Depthの設定を16bitに変更
3. Interaction Profilesを確認
Microsoft Hand Interaction Profileがある
4. OKならNextを押す
Let’s Try
OpenXRなMRTK環境を作る手順
6. MRTKの初期設定を行う
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. OpenXR関連の設定が自動で行われる
2. Depthの設定を16bitに変更
3. Interaction Profilesを確認
Microsoft Hand Interaction Profileがある
4. OKならNextを押す
Let’s Try
OpenXRなMRTK環境を作る手順
7.パッケージ名を直す
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. パッケージ名を適当な形に変更
※これしないと上書きされる問題
2. 新しいシーンにMRTKの初期設定を行う
3. 空のOpenXRなMRTK環境が完成
PlaneFindingを使う
2021/10/21 Copyright © 2021 Takahiro Miyaura
PlaneFindingを使う
実装内容は以下のフロー
2021/10/21 Copyright © 2021 Takahiro Miyaura
1. 空間マッピングからメッシュ情報を取得
2. 取得した情報をPlane Findingに送る
3. 処理結果を可視化する
PlaneFindingを使う
1. 空間マッピングからメッシュ情報を取得
2021/10/21 Copyright © 2021 Takahiro Miyaura
IMixedRealitySpatialAwarenessMeshObserverから取得可能
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));
}
}
MRTKの空間マッピングの機能を取得
スキャンした空間のメッシュ情報を取得
Plane Findingへの渡すための前処理
PlaneFindingを使う
2. 取得した情報をPlane Findingに送る
2021/10/21 Copyright © 2021 Takahiro Miyaura
先ほどのメッシュ情報を引数で渡す
Task<BoundedPlane[]> planeTask = Task.Run(() =>
PlaneFinding.FindPlanes(meshData, snapToGravityThreshold, MinArea));
BoundedPlane[] planes = planeTask.Result;
Plane Findingで計算
結果はBoundedPlaneで返ってくる
public struct BoundedPlane
{
public Plane Plane;
public OrientedBoundingBox Bounds;
public float Area;
}
BoundedPlaneはこういうStruct型
平面に関する情報はOrientedBoundingBoxに入っている
PlaneFindingを使う
3. 処理結果を可視化する
2021/10/21 Copyright © 2021 Takahiro Miyaura
BoundedPlaneの情報を使って面を可視化する
BoundedPlane.Boundsの情報でオブジェクトの位置、向き、サイズを調整
foreach (var boundedPlane in planes)
{
GameObject primitiveType = GameObject.CreatePrimitive(PrimitiveType.Cube);
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);
}
PlaneFindingを使う
結果
2021/10/21 Copyright © 2021 Takahiro Miyaura
以下の様に平面出しが可能に
まとめ
2021/10/21 Copyright © 2021 Takahiro Miyaura
まとめ(今回わかったこと)
 (今更ですが)PlaneFindingを調べてみた
 Mesh情報から計算で平面になる領域を計算し返してくれる
 Mesh情報があればいいので実は空間マッピング関係なく利用できる
 現実空間に沿った平面情報を扱いたい時には気軽に使える
 テーブル上に何か出すコンテンツ等
 MRTKにはSceneUnderStandingという空間シーンの形状分類の機能もある
 空間全体の推定という意味ではそちらの方が効果がある場合も
2021/10/21 Copyright © 2021 Takahiro Miyaura
ちょっと平面だししたい時にはPlane Findingもあることを思い出して
大阪駆動開発
関西を中心に、IT系のおもしろそうなことを楽しんでやるコミュニティ

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Photon Fusionのはじめの一歩
Photon Fusionのはじめの一歩Photon Fusionのはじめの一歩
Photon Fusionのはじめの一歩
 
DeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using UnityDeNA TechCon2019 How to implement live streaming client using Unity
DeNA TechCon2019 How to implement live streaming client using Unity
 
はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingはじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTracking
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 
Azure Spatial Anchors V2概要 ~空間情報の共有~
Azure Spatial Anchors V2概要 ~空間情報の共有~Azure Spatial Anchors V2概要 ~空間情報の共有~
Azure Spatial Anchors V2概要 ~空間情報の共有~
 
FMETP Streamの使い方メモ
FMETP Streamの使い方メモFMETP Streamの使い方メモ
FMETP Streamの使い方メモ
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
OpenXR + XR Interaction Toolkit使ったHoloLensコンテンツ開発検証 ~ (私が)完全に理解できたらちゃんと作れて、いろ...
OpenXR + XR Interaction Toolkit使ったHoloLensコンテンツ開発検証 ~ (私が)完全に理解できたらちゃんと作れて、いろ...OpenXR + XR Interaction Toolkit使ったHoloLensコンテンツ開発検証 ~ (私が)完全に理解できたらちゃんと作れて、いろ...
OpenXR + XR Interaction Toolkit使ったHoloLensコンテンツ開発検証 ~ (私が)完全に理解できたらちゃんと作れて、いろ...
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみた
 
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」の紹介
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」の紹介Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」の紹介
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」の紹介
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
HoloLens2とPCで、WebRTCで映像をやりとり
HoloLens2とPCで、WebRTCで映像をやりとりHoloLens2とPCで、WebRTCで映像をやりとり
HoloLens2とPCで、WebRTCで映像をやりとり
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
CEDEC2016 「コントラスト」で考えるゲームデザイン・レベルデザイン
CEDEC2016 「コントラスト」で考えるゲームデザイン・レベルデザインCEDEC2016 「コントラスト」で考えるゲームデザイン・レベルデザイン
CEDEC2016 「コントラスト」で考えるゲームデザイン・レベルデザイン
 

Ähnlich wie 今改めて見る Plane finding

Ähnlich wie 今改めて見る Plane finding (20)

World Locking Tools V1.0.0について~ 機能と導入 ~
World Locking Tools V1.0.0について~ 機能と導入 ~ World Locking Tools V1.0.0について~ 機能と導入 ~
World Locking Tools V1.0.0について~ 機能と導入 ~
 
Mixed Reality関連のSDKの状況を調べてみた
Mixed Reality関連のSDKの状況を調べてみたMixed Reality関連のSDKの状況を調べてみた
Mixed Reality関連のSDKの状況を調べてみた
 
Mixed Reality Feature ToolとMixed Reality Toolkit V2.6.1
Mixed Reality Feature ToolとMixed Reality Toolkit V2.6.1Mixed Reality Feature ToolとMixed Reality Toolkit V2.6.1
Mixed Reality Feature ToolとMixed Reality Toolkit V2.6.1
 
Unreal Engine でアプリ開発~ MRTK UXTools for Unreal V0.9.0 ~
Unreal Engine でアプリ開発~ MRTK UXTools for Unreal V0.9.0 ~Unreal Engine でアプリ開発~ MRTK UXTools for Unreal V0.9.0 ~
Unreal Engine でアプリ開発~ MRTK UXTools for Unreal V0.9.0 ~
 
Mixed Reality Toolkit で OpenXRのEye Trackingを使う
Mixed Reality Toolkit で OpenXRのEye Trackingを使うMixed Reality Toolkit で OpenXRのEye Trackingを使う
Mixed Reality Toolkit で OpenXRのEye Trackingを使う
 
HoloLens 1のアプリをHoloLens 2に移行する
HoloLens 1のアプリをHoloLens 2に移行するHoloLens 1のアプリをHoloLens 2に移行する
HoloLens 1のアプリをHoloLens 2に移行する
 
Oculus Quest 2 on Mixed Reality Toolkit V2.5.0~ ハンドトラッキングする方法 ~
Oculus Quest 2 on Mixed Reality Toolkit V2.5.0~ ハンドトラッキングする方法 ~Oculus Quest 2 on Mixed Reality Toolkit V2.5.0~ ハンドトラッキングする方法 ~
Oculus Quest 2 on Mixed Reality Toolkit V2.5.0~ ハンドトラッキングする方法 ~
 
Azure Spatial Anchorsのユースケース「Way-Finding」を実現するためのテクニック
Azure Spatial Anchorsのユースケース「Way-Finding」を実現するためのテクニックAzure Spatial Anchorsのユースケース「Way-Finding」を実現するためのテクニック
Azure Spatial Anchorsのユースケース「Way-Finding」を実現するためのテクニック
 
HoloLens1アプリをHoloLens2アプリに変換できるかチャレンジ
HoloLens1アプリをHoloLens2アプリに変換できるかチャレンジHoloLens1アプリをHoloLens2アプリに変換できるかチャレンジ
HoloLens1アプリをHoloLens2アプリに変換できるかチャレンジ
 
UIデザイン設計から開発をつなぐ「MRTK Figma Bridge for Unity」を使ってみよう
UIデザイン設計から開発をつなぐ「MRTK Figma Bridge for Unity」を使ってみようUIデザイン設計から開発をつなぐ「MRTK Figma Bridge for Unity」を使ってみよう
UIデザイン設計から開発をつなぐ「MRTK Figma Bridge for Unity」を使ってみよう
 
IoT関連のAzureを使い倒して お部屋の空気観測装置を作った話
IoT関連のAzureを使い倒して お部屋の空気観測装置を作った話IoT関連のAzureを使い倒して お部屋の空気観測装置を作った話
IoT関連のAzureを使い倒して お部屋の空気観測装置を作った話
 
久しぶりにMicrosoft Meshを使ってみた - 色々変わってたよ編 -
久しぶりにMicrosoft Meshを使ってみた - 色々変わってたよ編 -久しぶりにMicrosoft Meshを使ってみた - 色々変わってたよ編 -
久しぶりにMicrosoft Meshを使ってみた - 色々変わってたよ編 -
 
「あれ」がスマホで動くのか試してみた
「あれ」がスマホで動くのか試してみた「あれ」がスマホで動くのか試してみた
「あれ」がスマホで動くのか試してみた
 
【続】OpenXRでHoloLensアプリを作る
【続】OpenXRでHoloLensアプリを作る【続】OpenXRでHoloLensアプリを作る
【続】OpenXRでHoloLensアプリを作る
 
Unityは知ってる開発者が UE4 で HoloLens 2 アプリ開発セションを聞くために知っておくといいかもTips
Unityは知ってる開発者が UE4 で HoloLens 2 アプリ開発セションを聞くために知っておくといいかもTipsUnityは知ってる開発者が UE4 で HoloLens 2 アプリ開発セションを聞くために知っておくといいかもTips
Unityは知ってる開発者が UE4 で HoloLens 2 アプリ開発セションを聞くために知っておくといいかもTips
 
Mixed Reality Toolkit V3について
Mixed Reality Toolkit V3についてMixed Reality Toolkit V3について
Mixed Reality Toolkit V3について
 
クロスプラットフォーム開発としての「Mixed Reality Toolkit V2」が持つ可能性
クロスプラットフォーム開発としての「Mixed Reality Toolkit V2」が持つ可能性クロスプラットフォーム開発としての「Mixed Reality Toolkit V2」が持つ可能性
クロスプラットフォーム開発としての「Mixed Reality Toolkit V2」が持つ可能性
 
だんグラで「Mixed Reality Toolkit V2」のサンプルを動かしてみた
だんグラで「Mixed Reality Toolkit V2」のサンプルを動かしてみただんグラで「Mixed Reality Toolkit V2」のサンプルを動かしてみた
だんグラで「Mixed Reality Toolkit V2」のサンプルを動かしてみた
 
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」のUXをみる
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」のUXをみるMixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」のUXをみる
Mixed Reality Toolkit 3 のチュートリアル「Zappy’s Playground」のUXをみる
 
XRマルチデバイス開発を可能にするOSSライブラリ「MRTK-vNEXT」について
XRマルチデバイス開発を可能にするOSSライブラリ「MRTK-vNEXT」についてXRマルチデバイス開発を可能にするOSSライブラリ「MRTK-vNEXT」について
XRマルチデバイス開発を可能にするOSSライブラリ「MRTK-vNEXT」について
 

Mehr von Takahiro Miyaura

Mehr von Takahiro Miyaura (13)

Microsoft Ignite 2022の情報 & Microsoft Learnの整理をしてみた
Microsoft Ignite 2022の情報 & Microsoft Learnの整理をしてみたMicrosoft Ignite 2022の情報 & Microsoft Learnの整理をしてみた
Microsoft Ignite 2022の情報 & Microsoft Learnの整理をしてみた
 
Mixed Reality Toolkit 3 の更新状況 - 6月からもちょいちょいアップデートされてるよ
Mixed Reality Toolkit 3 の更新状況 - 6月からもちょいちょいアップデートされてるよMixed Reality Toolkit 3 の更新状況 - 6月からもちょいちょいアップデートされてるよ
Mixed Reality Toolkit 3 の更新状況 - 6月からもちょいちょいアップデートされてるよ
 
Mixed Reality Toolkit 3 - 「MRTK XR Rig」と「Bounds Control」
Mixed Reality Toolkit 3 - 「MRTK XR Rig」と「Bounds Control」Mixed Reality Toolkit 3 - 「MRTK XR Rig」と「Bounds Control」
Mixed Reality Toolkit 3 - 「MRTK XR Rig」と「Bounds Control」
 
Mixed RealityとAzure Digital Twinsを組合わせてデジタルツインを可視化するためのTips
Mixed RealityとAzure Digital Twinsを組合わせてデジタルツインを可視化するためのTipsMixed RealityとAzure Digital Twinsを組合わせてデジタルツインを可視化するためのTips
Mixed RealityとAzure Digital Twinsを組合わせてデジタルツインを可視化するためのTips
 
5周年ふりかえり!HoloLens 1とHoloLens 2のUI操作と実装の違いを改めて見てみよう
5周年ふりかえり!HoloLens 1とHoloLens 2のUI操作と実装の違いを改めて見てみよう5周年ふりかえり!HoloLens 1とHoloLens 2のUI操作と実装の違いを改めて見てみよう
5周年ふりかえり!HoloLens 1とHoloLens 2のUI操作と実装の違いを改めて見てみよう
 
World Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになったWorld Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになった
 
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 
Azure Object Anchors のQuick Startで理解を深めたい
Azure Object Anchors のQuick Startで理解を深めたいAzure Object Anchors のQuick Startで理解を深めたい
Azure Object Anchors のQuick Startで理解を深めたい
 
Build 2021のDigital Twinsセションを読み解く ~Azure関連サービス概要とラーニングパスの詳説~
Build 2021のDigital Twinsセションを読み解く ~Azure関連サービス概要とラーニングパスの詳説~Build 2021のDigital Twinsセションを読み解く ~Azure関連サービス概要とラーニングパスの詳説~
Build 2021のDigital Twinsセションを読み解く ~Azure関連サービス概要とラーニングパスの詳説~
 
ラーニングパス「Azure Digital Twins と Unity を使用して Mixed Reality デジタル ツインを構築する」にAzure ...
ラーニングパス「Azure Digital Twins と Unity を使用して Mixed Reality デジタル ツインを構築する」にAzure ...ラーニングパス「Azure Digital Twins と Unity を使用して Mixed Reality デジタル ツインを構築する」にAzure ...
ラーニングパス「Azure Digital Twins と Unity を使用して Mixed Reality デジタル ツインを構築する」にAzure ...
 
Azure Object Anchors Recap(Kobe版)
Azure Object Anchors Recap(Kobe版)Azure Object Anchors Recap(Kobe版)
Azure Object Anchors Recap(Kobe版)
 
Azure Object Anchors Recap
Azure Object Anchors RecapAzure Object Anchors Recap
Azure Object Anchors Recap
 
HoloLensでコンテンツを操作する方法 - Gaze And Dwell -
HoloLensでコンテンツを操作する方法 - Gaze And Dwell -HoloLensでコンテンツを操作する方法 - Gaze And Dwell -
HoloLensでコンテンツを操作する方法 - Gaze And Dwell -
 

今改めて見る Plane finding

  • 1. takabrz1 大阪駆動開発 Takahiro Miyaura 今改めてみる PlaneFinding 2021/10/20 XR ミーティング
  • 2. 宮浦 恭弘 (Miyaura Takahiro)  大阪駆動開発(とHolomagicians)コミュニティに生息  HoloLens日本販売してからxR系技術に取組む  普段はよくMixed Reality Toolkitに関する調査している  新しい技術や、MRに使えそうな技術を調べる 技術Tips : https://qiita.com/miyaura @takabrz1 ※よかったらこれを機にお知り合いになってください  リリース機能調べたり・・・  面白い機能使ってみたり・・・  新しい実験してフィードバックしたり・・・ 最近はこちらに Come Back気味 (貢献領域:Mixed Reality) Microsoft MVP for Windows Development 2018-202 2 某会社でSE(アプリケーション領域のアーキテクト的なお仕事なはず)= XRは趣味です と思ったらDigital Twins
  • 4. 小話 その① 2021/10/21 Copyright © 2021 Takahiro Miyaura まだこれ移植してますw MRTK V2.7.2で動かす OpenXRで稼働させる HoloLens 1 向けのUXをHoloLens 2に替えていってる 元はHoloLens 1向けの Mixed Reality のサンプルの1つ
  • 5. PlaneFindingはMixed Reality Toolkitの部品 2021/10/21 Copyright © 2021 Takahiro Miyaura
  • 6. MicrosoftのMixed Reality向けライブラリ群 2021/10/21 Copyright © 2021 Takahiro Miyaura 用途/プラットフォームで提供 Unity向け クロスプラットフォーム 最新バージョンはV2.7.2 UX部品 イベント制御系 etc… Unity向け UXデザインのサンプル Periodic Table Lunar Module Surface Unreal向け サブセットがいくつかある 第一弾はUXTools for Unreal  最新はV0.12.1  Unity向けのライブラリと同等を目指す
  • 7. Mixed Reality Toolkit V2 for Unity 概要 2021/10/21 Copyright © 2021 Takahiro Miyaura Unity向けOSSライブラリ OpenVR HMD (HTC Vive / Oculus Rift) iOS/Android (ARFoundation) HoloLens HoloLens 2 Windows Mixed Reality HMD Oculus Quest 2  Cross Platformでの開発可能  XRデバイスにおけるUnity開発の基本的な構成要素を提供  ラピッドプロトタイピングを実現  コア機能が交換可能な拡張性の高いフレームワーク
  • 8. Mixed Reality Toolkit V2 概要 2021/10/21 Copyright © 2021 Takahiro Miyaura XRデバイスの固有機能を含め様々な補助機能を提供
  • 9. Mixed Reality Toolkit V2 概要 2021/10/21 Copyright © 2021 Takahiro Miyaura UX building blocks : 組込み済みのUX部品群
  • 10. Mixed Reality Toolkit 概要 2021/10/21 Copyright © 2021 Takahiro Miyaura Unity と Unreal用共通で利用する為のベース https://github.com/microsoft/MixedRealityToolkit  Mixed Reality Toolkit  C++ベースのライブラリ等で構成  GpuStats  Sharing  SpatialInput  PlaneFinding → ここの部品  SpatialUnderding  SpecterViewPlugin
  • 11. Plane Findingとは 2021/10/21 Copyright © 2021 Takahiro Miyaura
  • 12. Plane Findingとは 概要 2021/10/21 Copyright © 2021 Takahiro Miyaura 空間の平面だしをする部品です  大量のMesh情報から水平面、垂直面を作る
  • 14. Let’s Try 環境 2021/10/21 Copyright © 2021 Takahiro Miyaura 今回の環境  開発環境.  Unity 2020.3.8f1  Visual Studio 2019  Windows SDK 10.0.19041.0  ライブラリ  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
  • 16. Let’s Try 最近知ったこと Mixed Reality開発の手順がMicrososft Learnに変わってる 2021/10/21 Copyright © 2021 Takahiro Miyaura  そして英語化(近いうちに日本語化予定)  OpenXR環境でMRTKをセットアップするラーニングパスは以下  https://docs.microsoft.com/ja-jp/learn/modules/learn-mrtk-tutorials/1-2-configure-unity-for-windows-mixed-reality 英語じゃ・・・ という方のためにセットアップ紹介
  • 18. Let’s Try OpenXRなMRTK環境を作る手順 少しだけややこしいですよ 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. まずはUnityで空プロジェクトを作成(PlaneFindingSamples等) 2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用)  OpenXR Pluginもセット  ついでに今回使うPlaneFindingもセット 3. Unityで再度プロジェクトを開く 4. プラットフォームをUniversal Windows Platformに 5. OpenXRの設定を行う 6. MRTKの初期設定を行う 7. パッケージ名を直す
  • 19. Let’s Try OpenXRなMRTK環境を作る手順 2. Mixed Reality Toolkitの導入(Mixed Reality Feature Toolを利用) 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. サイトからMixed Reality Feature Toolをダウンロードする  https://docs.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool 2. ツールを起動する 3. 先ほど作った空プロジェクトを開く 4. 必要なコンポーネントをインポートする  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
  • 20. Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. 起動すると左記のメニューが出る 2. Unity OpenXR pluginを押す 3. Show XR Plug-in management Settingsを開く 4. Project Settingsが拓く 5. OpenXRの設定を行う。
  • 21. Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. XR Plug-in Managementを選択 2. UWPのタブでOpenXRをチェック 3. Microsoft HoloLens feature groupをチェック 4. MRTKのメニューが以下の様に変化する 5. Apply Settingsを押す
  • 22. Let’s Try OpenXRなMRTK環境を作る手順 5. OpenXRの設定を行う 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. OpenXR関連の設定が自動で行われる 2. Depthの設定を16bitに変更 3. Interaction Profilesを確認 Microsoft Hand Interaction Profileがある 4. OKならNextを押す
  • 23. Let’s Try OpenXRなMRTK環境を作る手順 6. MRTKの初期設定を行う 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. OpenXR関連の設定が自動で行われる 2. Depthの設定を16bitに変更 3. Interaction Profilesを確認 Microsoft Hand Interaction Profileがある 4. OKならNextを押す
  • 24. Let’s Try OpenXRなMRTK環境を作る手順 7.パッケージ名を直す 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. パッケージ名を適当な形に変更 ※これしないと上書きされる問題 2. 新しいシーンにMRTKの初期設定を行う 3. 空のOpenXRなMRTK環境が完成
  • 26. PlaneFindingを使う 実装内容は以下のフロー 2021/10/21 Copyright © 2021 Takahiro Miyaura 1. 空間マッピングからメッシュ情報を取得 2. 取得した情報をPlane Findingに送る 3. 処理結果を可視化する
  • 27. PlaneFindingを使う 1. 空間マッピングからメッシュ情報を取得 2021/10/21 Copyright © 2021 Takahiro Miyaura IMixedRealitySpatialAwarenessMeshObserverから取得可能 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)); } } MRTKの空間マッピングの機能を取得 スキャンした空間のメッシュ情報を取得 Plane Findingへの渡すための前処理
  • 28. PlaneFindingを使う 2. 取得した情報をPlane Findingに送る 2021/10/21 Copyright © 2021 Takahiro Miyaura 先ほどのメッシュ情報を引数で渡す Task<BoundedPlane[]> planeTask = Task.Run(() => PlaneFinding.FindPlanes(meshData, snapToGravityThreshold, MinArea)); BoundedPlane[] planes = planeTask.Result; Plane Findingで計算 結果はBoundedPlaneで返ってくる public struct BoundedPlane { public Plane Plane; public OrientedBoundingBox Bounds; public float Area; } BoundedPlaneはこういうStruct型 平面に関する情報はOrientedBoundingBoxに入っている
  • 29. PlaneFindingを使う 3. 処理結果を可視化する 2021/10/21 Copyright © 2021 Takahiro Miyaura BoundedPlaneの情報を使って面を可視化する BoundedPlane.Boundsの情報でオブジェクトの位置、向き、サイズを調整 foreach (var boundedPlane in planes) { GameObject primitiveType = GameObject.CreatePrimitive(PrimitiveType.Cube); 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); }
  • 30. PlaneFindingを使う 結果 2021/10/21 Copyright © 2021 Takahiro Miyaura 以下の様に平面出しが可能に
  • 31. まとめ 2021/10/21 Copyright © 2021 Takahiro Miyaura
  • 32. まとめ(今回わかったこと)  (今更ですが)PlaneFindingを調べてみた  Mesh情報から計算で平面になる領域を計算し返してくれる  Mesh情報があればいいので実は空間マッピング関係なく利用できる  現実空間に沿った平面情報を扱いたい時には気軽に使える  テーブル上に何か出すコンテンツ等  MRTKにはSceneUnderStandingという空間シーンの形状分類の機能もある  空間全体の推定という意味ではそちらの方が効果がある場合も 2021/10/21 Copyright © 2021 Takahiro Miyaura ちょっと平面だししたい時にはPlane Findingもあることを思い出して