Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第6回 HoloLens 参考書読書会 アンカー編
Search
Kenta Iwasaki
March 29, 2018
Programming
0
160
第6回 HoloLens 参考書読書会 アンカー編
この資料は第6回 HoloLens 参考書読書会で使用したスライドの一部です。
Kenta Iwasaki
March 29, 2018
Tweet
Share
More Decks by Kenta Iwasaki
See All by Kenta Iwasaki
Iwaken Lab. 説明スライド 2024.04.01
iwaken71
0
2.2k
3か月前の自分に伝えたいUEFN / Verseの知見5選
iwaken71
0
1k
Coding Stoicだった 自分を思い出す
iwaken71
0
150
HoloLensと謎解きの融合: 「TARGET」開発物語 - 企画から一般公開に向けての道のり
iwaken71
0
110
Iwaken Lab.紹介スライド2023.05.14
iwaken71
0
3.7k
Babylon.js書籍出版の裏側。ツイートから始まった奇跡の1年を振り返る
iwaken71
0
390
XR好き学生支援コミュニティIwaken Lab.が今熱い
iwaken71
0
150
オンライン時代の 技術仲間の増やし方 ~3つのコミュニティ事例を添えて~
iwaken71
0
800
やりたいことを仕事にして会社を楽しもう「会社員+コミュニティ型個人」 な生き方の勧め
iwaken71
1
260
Other Decks in Programming
See All in Programming
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
890
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
280
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
CSC509 Lecture 12
javiergs
PRO
0
160
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
Arm移行タイムアタック
qnighy
0
310
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Building Applications with DynamoDB
mza
90
6.1k
Music & Morning Musume
bryan
46
6.2k
Six Lessons from altMBA
skipperchong
27
3.5k
A Tale of Four Properties
chriscoyier
156
23k
Faster Mobile Websites
deanohume
305
30k
Being A Developer After 40
akosma
86
590k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Adopting Sorbet at Scale
ufuk
73
9.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
第6回 HoloLens参考書 読書会 World Anchorについて 3月28日 イワケン
2/58 自己紹介 •岩崎謙汰 (イワケン) 1993年生まれ •東京工業大学 大学院卒業 4月から社会人 •研究分野: グラフサンプリング
•趣味: Unity、AR×〇〇を考える、Vtuber •HoloLens実績 • めざせスカウター! HoloLensによる 特定個人の 顔認識アプリ制作と その課題 (ABCSpring 2017) • XR HACKATHON、決勝進出 • 学生ハッカソン、企業賞
3/58 今日扱う内容 •書籍 第7章 “The Tools of the Trade” •
Persistence (永続性) • World Anchors • ゲーム内のデバッグWindow
4/58 今回のゴール •World AnchorとPersistence (永続性) の意味を 理解する •World AnchorのUnity上の使い方を学ぶ •書籍の流れを確認する
アンカーとは「いかり」のこと。 イメージで覚えておこう! な が れ
5/58 今回の環境 Unity 2017.1.0f3 Visual Studio 2017 13.0.1 HoloToolkit-Unity v1.2017.1.0
Parallels Desktop13 for Mac Pro Edition 13.2.0
6/58 Persistence (永続性) とは何か理解しよう
7/58 Persistence (永続性) のモチベーション •ホログラム (オブジェクト) をリアル空間に関連付けて 配置したい (その場にあるかのような) •アプリケーションを落としても、その場に残るようにし
たい。(ゲームでの位置のセーブ機能) •ん? どゆこと?
8/58 ダメな例1 バーチャル洗濯機を 時計の下に置いたが…
9/58 ダメな例1 バーチャル洗濯機を 時計の下に置いたが… ARメガネを動かすと 移動してしまう!
10/58 良き例 ARカメラが移動&回転しても、 リアルの時計の下にいて欲しい! World Anchorで 固定されてるイメージ
11/58 ダメな例2 バーチャル洗濯機を 時計の下に置いて、 アプリを落としたら…
12/58 ダメな例2 次の日アプリを起動した ら隣の家にあった
13/58 良き例 アプリを落としても、 起動したら時計の下にあれ! これがPersistence (永続性)
14/58 World Anchorを使うと こういうことが出来るようになる!
15/58 クイズ •先程はアプリケーションを落とした場合、永続性が保 たれてる例であった。 では、アプリケーションを落とした後に さらにHoloLensの電源を落とした場合、 永続性が保たれるか。 1. 永続性は保たれる 2.
永続性は保たれない
16/58 なぜHoloLensは このようなことができるの?
17/58 Spatial Coordinate Systems (空間座標系) のおかげさ
18/58 リアル世界の座標系 vs HoloLens座標系 •Unity上の 1 Unit = 現実世界の1m •
ここまでは良かった •リアルの現在地 (緯度経度) を HoloLens世界に知らせる方法がない。 • GPSあるけど精度悪すぎて非現実的 •HoloLensはもっと小さな世界を繊細に表現したい
19/58 World Anchor •絶対座標は厳しい… (だってGPSの精度悪すぎるんだもん) •よし、相対座標を採用しよう •Spatial Mappingで部屋の形状 (Mesh) わかるから、
その相対位置で配置しよう。 これがWorld Anchor の実装アイデア。 ?
20/58 仕組みはなんとなくわかった でもWorld Anchorの実装って 難しいんでしょう?
21/58 World Anchorは 比較的かんたんです! (書籍引用)
22/58 World Anchorはこれだけ覚えよう •World Anchor Managerから基本操作する。 • 固定するオブジェクトの名前を考える。 • 固定したい時はWorld
AnchorをAttachする。 • 固定したくない時はWorld AnchorをRemoveする。 World Anchor Manager World Anchor Store オブジェクト AttachAnchor関数を実行したイメージ図 登録 名前: 冷蔵庫 名前: 冷蔵庫 GameObject World Anchor
23/58 World Anchor Managerのコード •最初は気にしなくてもよし •World Anchor Storeを管理する •AnchorをAttachする (Store状況を見ながら)
•AnchorをRemoveする (Storeから削除する) •World Anchor Storeには、 Anchorが付けられたオブジェクトの 情報がストックされている。 World Anchor Store 名前: 冷蔵庫 GameObject 名前: 時計 GameObject ・ ・ ・ World Anchor Manager
24/58 では、書籍にのっとって 手を動かしていきます!
25/58 書籍のソースコードのダウンロード • https://github.com/PacktPublishing/HoloLens-Beginners- Guide をcloneまたはDownload Zipします。
26/58 プロジェクトを新規作成
27/58 書籍のGithubからChapter7をインポート •Unityのメニューから [Assets] > [Import Package] > [Custom Package]を選択
•書籍のGithubのフォルダChapter7から Chapter7before.unitypackageをインポート
28/58 Mixed Reality Toolkit Unityのダウンロード •https://github.com/Microsoft/MixedRealityToolkit- Unity/releases をクリック •自分のバージョンのunitypackageをダウンロード
29/58 Mixed Reality Toolkit Unityのインポート •Unityのメニューから [Assets] > [Import Package]
> [Custom Package]を選択 •HoloToolkit-Unity-v1.2017.1.0.unitypackageを選択 して全てをインポート
30/58 Chapter7を選択 •Unityのプロジェクタービューから[Scene] > [Chapter7]を選択。エラーが出なければOK
31/58 オブジェクト準備 •ヒエラルキービューの非アクティブの Sphereオブジェクトを削除する。 •skeeオブジェクトの子供に TapToPlaceColliderオブジェクトが あれば削除する。
32/58 BoxColliderのアタッチ •skeeオブジェクトを選択しBoxColliderをアタッチする。 •CenterとSizeの値を以下のように設定 • Center: X: -152 , Y:
39, Z: -335 • Size: X: 304 , Y: 463 , Z: 1189
33/58 PlaceSkeeBallMachine.csをアタッチ •skeeオブジェクトを選択しPlaceSkeeBallMachine.cs をアタッチする。
34/58 World Anchorの実装 •PlaceSkeeBallMachine.csを開く。 •11,12行目を確認する。
35/58 •40行目でSingletonのWorldAnchorManagerを代入 •48~55行目でWorldAnchorManagerに skeeオブジェクトをアタッチ World Anchorの実装
36/58 Unityでよく出るgameObject •コード中のgameObjectについて gameObject Scriptをアタッチしている実際の GameObject this.gameObject ↑ gameObjectと同じ this
このScript。MonoBehaviourを継承
37/58 Update関数内のRaycast •Update関数内のコード (Update関数はフレームごと に呼ばれるUnity特有の関数)
38/58 OnInputClicked関数 •AttachAnchor,RemoveAnchorの使用例
39/58 WorldAnchorの実装のおさらい •おさらい • GameObjectにアンカーをアタッチしたい時 WorldAnchorManager.Instance.AttachAnchor (ゲームオ ブジェクト, 名前); を呼ぶ
• GameObjectからアンカーを外したい時 WorldAnchorManager.Instance.RemoveAnchor (ゲーム オブジェクト); を呼ぶ • Anchorがアタッチされたオブジェクトは基本静止状態
40/58 ApplicationManager.csの書き換え (1/2) •プロジェクトビューの[Scripts]>[ApplicationMangaer] を開く。
41/58 ApplicationManager.csの書き換え (2/2) •Update関数の中身を書き換える。
42/58 skeeの位置を変える
43/58 AppManagerオブジェクトの編集
44/58 World Anchor Managerを新しく作る
45/58 実行するとエラーが出るみたい… •書籍の金言 •Do not hesitate to search for an
answer. 答えを検索することをためらうな •今回の場合、WorldAnchorStoreがUnityEditor上で 動作しないことが原因らしい。 •つまり、HoloLensにBuildすればOK♪
46/58 アプリデバッグの実装 •詳しくは最終章でやるよ! •この章では、シンプルなテキストボックスを実装する。 Debug Message が見える。
47/58 デバッグ用のテキストを設定する •プロジェクトビューから [HoloToolkit] > [UI] > [Prefabs] > [3DTextPrefab]をヒエラルキービューの
HoloLensCameraにドラッグ &ドロップする
48/58 デバッグ用のテキストを設定する •Prefab化することで、元のPrefabと分離して新しい Prefabを作る。
49/58 ApplicationManager.csを書き換える •Textmeshを書き換えられるようにする。
50/58 ドラッグ&ドロップ •DebugInfoオヴジェクトをApplicationManagerと •結びつける。
51/58 Startボタンの設置 追加: SizeのZを0.01な ど0より大きくする
52/58 名前の変更 •先程の3DTextPrefabをCrtl + Dで複製する。 •それぞれの名前を ”StartBtn”,“OptionBtn”にする
53/58 ボタンの配置
54/58 StartButton.csを加える
55/58 StartButton.csを書き加える •OnInputClicked関数 (AirTapされたら呼ばれる関数) に以下のコードを加える。 •ApplicationMangaer.Instance.debugTextMesh.text += “¥n Start Button
Clicked”;
56/58 やってみよう •OptionButtonも同様に行おう! •ApplicationMangaer.Instance.debugTextMesh.text += “¥n Option Button Clicked”; と書き加える。
57/58 おわり〜 •ビルドしよう!
58/58 World Anchorまとめ •HoloLensでは、ホログラムの位置が大事。アプリ ケーションを落としても変わらない永続性が必要。 •World Anchorは空間マッピングの相対座標によって 達成される。 •World Anchor
ManagerによってWorld Anchorを 管理する