Weitere ähnliche Inhalte
Ähnlich wie 今改めて見る Plane finding (20)
Mehr von Takahiro Miyaura (13)
今改めて見る Plane finding
- 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つ
- 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開発の基本的な構成要素を提供
ラピッドプロトタイピングを実現
コア機能が交換可能な拡張性の高いフレームワーク
- 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
- 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
- 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);
}