2020年2月13日木曜日

EyeTrackingTargetを試してみた【MRTKv2.2 】

お疲れ様です。ZuQ9->Nnです。
これは、2020/02/08(土)から2020/02/09(日)に開催されたOsaka HoloLens "2" ハッカソン2020の準備のため

EyeTrackingネタをやろうと決めたときに調べた調査メモのようなものです。

EyeTrackingはずっと実機じゃないと使えないと思っていたのですが、
Unity上でもシミレーションできると知って試してみました。

今回の環境はUnity2019.
Microsoft Mixed Reality Toolkit v2.2.0 です。

Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackageのインポート
UnityのMixed Relaity ToolkitメニューからAdd to Scene and Configureを選択する等はいつも通り
わからない方は、以前の記事を参考にしてください。
EyeTrackingを利用するにはProfileの設定が必要です。

Hierarchyから、MixedRealityToolkitを選択し、Inpsectorを表示
InpsectorからCopy & Cutomizeをクリック

Cloning Profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック
Profile Nameは何でも良いのですが、今回はTextMixedRealityToolkitConfigurationProfileとしました。

InpsectorのProfileがTextMixedRealityToolkitConfigurationProfileに切り替わっていることを確認し
Profileの中からInputを選択 DefaultMixedRealityInputSystemProfileの横のCloneボタンをクリック

Cloning Profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック
Profile Nameは何でも良いのですが、今回はTestMixedRealityToolkitInputSystemProfileとしました。

InpsectorのProfileがTestMixedRealityToolkitInputSystemProfileに切り替わっていることを確認し
Input Data Providersの + Add Data Providerをクリック、New Data providerが追加されますので
▼マークをクリックして展開します。

New Data providerのTypeのドロップダウンから
Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input > WindowsMixedRealityEyeGazeDataProviderを選択

Input Data Providersから Input Simulation Serveiceの▼マークをクリックして展開 DefultMixeRealityInputSimulationProfileのCloneボタンをクリック

Cloning profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック
Profile Nameは何でも良いのですが、今回はTestMixedRealityToolkitInputSimulationProfileとしました。

InpsectorのProfileがTextMixedRealityToolkitInputSystemProfileに切り替わっていることを確認し
Simulate Eye PositionのチェックをOnにします。


最後に、Hierarchyから、MixedRealityPlayspaceの下のMain Cameraを選択
InpsectorからUse Eye TrackingのチェックをOnにします。

これで、EyeTrackingのためのProfileの設定は完了です。
今回はEyeTrackingを利用して、視界に入ったらCubeの色を変えるようなサンプルを作成します。

HierarchyからCreate > 3D Object > CubeでCubeを作成

Cubeの座標を適当にCameraに写る位置に移動させます。(このサンプルでは x:0 y:0 z:2)

Hierarchyから、Cubeを選択、InpsectorからAdd Component > New Scriptを選択して新しいScriptを追加します。

Script名は特に何でも良いのですが、今回はEyeTrackingTestとしました。

 EyeTrackingTestの中身はこんな感じです。 Hierarchyから、Cubeを選択、InpsectorからAdd Component > EyeTrackingTargetを選択してアタッチメント
InpsectorからEyeTrackingTargetのイベントを設定します。
EyeTrackingTargetのイベントと、そのイベントの後、どのような動きになるかを関連づけます。
Hierarchyから、Cubeを選択、InpsectorのEyeTrackingTarget、On Look At Startに Runtime OnlyにはCube、Functionには、EyeTrackingTestのAfterOnLookStartを設定

InpsectorのEyeTrackingTarget、On Look Awayに Runtime OnlyにはCube、Functionには、EyeTrackingTestのAfterOnLookAwayを設定

これでアプリは完成です。Unityで実行するとこんな感じです。
Unity上はHead Trackingと同じ扱いになります。
なので、実機に入れないと実際の動きは確認しきれません

EyeTrackingTarget.csについて
こちらは、MixedRealityToolkit-Unityで提供されているScriptです。

Class EyeTrackingTarget

A game object with the "EyeTrackingTarget" script attached reacts to being looked at independent of other available inputs. Assembly: cs.temp.dll.dll Syntax public class EyeTrackingTarget : InputSystemGlobalHandlerListener, IMixedRealityPointerHandler, IMixedRealitySpeechHandler, IMixedRealityBaseInputHandler, IEventSystemHandler EyeCursorSnapToTargetCenter If true, the eye cursor (if enabled) will snap to the center of this object.
文字どうり、EyeTrackingの対象となるオブジェクトにアタッチして利用します。
定義されているイベントに、そのイベントの後の処理を関連づけることで、制御を行っていきます。
イベントは下記

* OnDwell
Event is triggered when the target has been looked at for a given predefined duration (dwellTimeInSec).
ユーザーがdwellTimeInSecで指定された一定時間ターゲットを見ていた場合。
 InpsectorからdwellTimeInSecが指定できるので、その秒数で指定された時間内でターゲットを見ていた時のようですが、 ちょっとよくわかりませんでした。

 * OnLookAtStart
 Event is triggered when the user starts to look at the target.
 ユーザーがターゲットに視線が入った時

* WhileLookingAtTarget
 Event is triggered when the user continues to look at the target.
ユーザーがターゲットを見続けたとき

*OnLookAway Event to be triggered when the user is looking away from the target.
ユーザーがターゲットから目をそらしたとき

* OnSelected
Event is triggered when the looked at target is selected
ターゲットが選択されたとき
これは、EyeTrackingで見つめて、かつ ハンドトラッキングのタップ、またはVoice Commandで対象のオブジェクトが選択された場合です。

目からビームでは、OnLookAtStartのタイミングで当たり判定を行いました。
そのため、必ずしもビームが当たらなくても視界に敵のターゲットが入った時点で
敵がダメージをくらい、うまい人だと、かなり長く遊べてしまいます。

WhileLookingAtTargetで3秒以上見つめたら、みたいな制御は必要だったかもしれません。

このようにEyeTrackingTarget.csを利用することで、
対象のオブジェクトに対する処理を書くだけでいいのは楽ですね。

しかし、きっちりとした制御を行うのは、
なにかしらもっと複雑な処理が必要になるかと思いますが
今のところ、僕の知識ではわかっていません。

EyeTrackingにつては他のデバイス含めて、
機会あるごとに積極的に使っていこうかと思っています。
何故かはわかりませんが、ハンドトラッキングよりも可能性が広がる気がしています

2020年2月12日水曜日

Osaka HoloLens "2" ハッカソン2020に参加 【二日目2020/02/09(日)】

お疲れ様です。ZuQ9->Nnです。
2020/02/08(土)から2020/02/09(日)に開催された
 Osaka HoloLens "2" ハッカソン2020 の二日目2020/02/09(日)レポです。

2020/02/08(土)で、なんとか目からビームのアプリを
実機で動くことに目途をつけて大阪の実家に戻り休むことにしました。

夜通しの開発も提供されてたのですが、一人作業になってしまうこと
日曜のハッカソンを乗り越えても、次の月曜からの仕事を考えると
ここは、無理に作業をせず、いかに休んで体力と集中力を保つかを重視しました。

会場に入って、とりあえず、実機での確認を行いました。
また、最終的な動画を撮れないことも考えて
バグがあっても動いているところさえと思い
保険的に、提出用の動画撮影も行いました。

棒状のオブジェクトから、LineRenderをメインに利用したアセットに切り替えたため
当たり判定がうまく行っていなかったり、音とパーティクルの素材 Prefabでは
Play on awakeのチェックが入りぱなしになっていたりと凡ミスも多く
動いてはいるものの。。不具合も結構ありました。

一番の苦戦は、やはり当たり判定です。当初はビームと一緒に
Shpereの球も出して、その当たり判定で倒せる実装にしたのですが
逆に球が全然当たらず、敵が倒せないようになってしまっていました。

しかし、一人作業の疲れからか、集中力がかなり落ち始めて
ずっと座っているのも。辛くなってきました。
頻繁に離籍しては休みを入れ、休憩を繰り返しました。

その間は、もう自分の焦りの気持ちとの闘い、
これは、最悪、バグ入りの動画を見せればいいとの保険の
ための動画をとっていたので、そちらを何回も見直すことで、
気持ちを落ち着けたり、先にプレゼンの資料だけを書いておいたり
その場で出来ることの作業を、少しづつ進めていきました。

エナジードリンクの差し入れもいただき
ようやく不具合も落ち着いたところで、お昼休憩
お昼はお弁当が用意されました。
また、ここで、HoloLens 2の実機の利用制限が出されました。
HoloLens 2は、一日目の利用により、バッテリーがかなり少なくなっていました。
あらかじめ予約することで、30分間利用できるルールになったので
予約をおこない、そこまでは、ひたすらにUnityでの確認を繰り返しました。

ここまで、不具合の修正と、動く最低限を目指しての
消極的対応だったので、せめてFirst Person Shotter系でよくみる、
十字の照準(CROSSFIREと言うみたいですw)等をつけてみて
実機での確認を待つばかり。。

ようやく実機での確認可能になってインストールをしてみたものの
ここで、先ほどいれた十字の照準(CROSSFIRE)が実機では
シェーダーがこわれてピンク色になり、またもや戻す羽目に。.. orz..

不具合の修正をおこない最終動画の撮影と、実機確認を行いました。
やはり、アイトラッキングの制御がカクカクだったのと
当たり判定が簡単になりすぎて、うまい人だと、
今度は、逆にゲームが終わらない感じに仕上がってしまいましたが
残念ながら、これ以上、手を加えるより、このままで評価をしてもらおうと
またもや、消極的な対応に戻しました。

1日目に行っていた、じゃんけんと、くじ引きの結果、
トップで発表することが決まっていたので、プレゼン資料のしあげと
配布用のパッケージ作成に時間を費やすことにしました。

15時に開発終了、その後、スポンサーのセッションが行われ
いよいよ最終発表。。最終発表の資料はこんな感じでした。
もう、なるべくポジティブなメッセージ性を発信しようと内容を何度か書き換えました。


途中でPCの操作を間違えてしまって焦ったり、
もはや自分では何を言っているのか頭が真っ白な感じでした。
発表終了して、次の人が来たので、慌ててしまい
審査員の人の総評の途中で舞台から捌けようとしたりと
もはや、何やってんだよって感じのテンパり具合。

発表前に、公平を期すために、この2日間での進捗で。。
とか言われて。アレやべ。事前に、プロトタイプ作ってきちゃったよ
ってのがやたらと気になり、 他の人の発表に心ここに在らずみたいな状態に

一応、全員の審査が終わってから、スタッフの方には
ごめんなさい、事前にある程度つくりました。てへぺろ☆(・ω<)って
正直に打ち明けました。あんまり、これは審査員は気にしてなかったみたいです。

発表のあと、試遊時間に、一人作業なので、自分のアプリの
アテンドを行うことに、となりのチームと合同でHoloLens 2を利用したこともあり
イマイチ、アプローチをうまくできず、試遊時間を活かしきれませんでした。

 試遊での課題は、やはりキャリブレーションでした。
また、自分のアプリをピン止めして直ぐに使えるようにすべきでした
どこにあるかをまず見つけてもらうのに苦労しました。

審査員によっては、簡単すぎたり、逆にキャリブレーションがうまくいかず
遊べなかったりとアイトラッキング故の問題点が多かった印象です。
最後に、Unityの@takashijona(常名)さんには、かなり楽しんでもらえたのでなんだか、ホッとしました。

他の開発者の作品で、個人的に気になっていた、音の可視化のアプリのみ体感させてもらいました。
実は、自分のネタを捨てて他人のネタをやるなら、これだなぁと思っていたアプリだったので。。

試遊を終え、審査結果発表。優勝のMVPは、AEDの訓練アプリ
ですよね。。僕が審査員なら絶対に選ぶよ。。って結果に。

その他各賞の発表が。。そしてなんと、主催コミュニティの一つHoloMagiciansさんから
賞をいただける、結果に、事前のプロトタイプ作成が気にかかりましたが
場の雰囲気を壊したくなかったので、素直にいただくことに。。
なんでも、EyeTrackingは絶対に役に立たないと思っていたが
そこを何とかしようとアプローチしたこと。
アプリとして完成して一応、一通り遊べるようになっていたことが評価されたようです。

賞をとれるとは思ってもみなかったので、かなり意外だったし
申し訳ない、こんなネタで。。とか、
嬉しさやら恐縮の気持ち、その他諸々が入り混じりました。

最後に、参加者スタッフで記念撮影、会場の片づけを行いました。
片づけの時間、他のチームの開発者さんから、刺激になりましたと言われたのが、なんとも印象的でした。

開発者だとやはり、EyeTrackingは利用してみたい欲求は高いみたいでした。
しかし、それを何に活かすか?って提案は中々できない、
ましてや真面目なビジネスシーンでは。。

だからこそ、こんなネタが許されるハッカソンのイベントで
目からビームというネタ一本で積極的に使えるように割り切ったのは
あながち悪い結果ばかりでは無かったようです。。

東京で次の日、普通に仕事があったので、新幹線の時間が
間に合わないとつらいなと思い、早々に会場を出てしまいました。。

これほど、大規模で、かなり大きな企業がスポンサーになっているイベントを
開催してくれたスタッフさんには感謝しかありません。中には、夜通しのイベントにも付き合ってた人もいたような感じなので本当にご苦労様でした。

なんどか、ハッカソンのイベントには参加したことがありますが
賞がもらえたこともあり、過去最高のハッカソンだったと思います。

ただ、100%全力で楽しめたか?と言われると、
色々な反省点や課題も多く残りました。。

また、これを次に活かせるのかとか思うとちょっと尻込みもあります。
まぁ、そこは、そんなにも思い詰めず、緩くしていこうかなと。。

とりあえず、主に発作的な欲求で参加したハッカソン。
今年はこれくらいのフットワークの軽さが維持できて
他のイベントにも積極的になれればと考えています。

おまけ。。
ハッカソンの後、気になってアイトラッキング関連を調べなおしたら。。
こちらのMicrosoftの公式ドキュメント

"お客様の目からレーザービームを撮影してください。 RoboRaid For HoloLens 2で試してみてください。"

との記述が。。。
どうやらすでにMicrosoftの公式アプリが、同じネタを実装していたようです。。
プレゼンでは、ひょっとして世界初では。。とかいっちゃったけど。。

全然、世界初でもなんでもなかったw

2020年2月10日月曜日

Osaka HoloLens "2" ハッカソン2020に参加 【一日目2020/02/08(土)】

お疲れ様です。ZuQ9->Nnです。

 2020/02/08(土)から2020/02/09(日)
Osaka HoloLens "2" ハッカソン2020 が開催されたので参加してきました。

Osaka HoloLens "2" ハッカソン2020 (2020/02/08 10:00〜)

スタッフ確保等兼ね合いで、少しだけ一般枠を増枠しました。 抽選が終了していますが、繰り上がりの可能性、(スタッフ増員等による)枠の増加/変動の可能性がありますので、 参加を希望する方は引き続き参加表明をお願いいたします。 また、逆に今後繰り上がり等で参加になった際に、参加が難しくなったという方はキャンセルの手続きをお願いいたします。 一般枠の定員が募集開始4時間ほどで埋まりましたが、抽選制&スタッフ人数次第では増枠(または他の枠との人数調整)の可能性有りなので、気にせずご応募ください。 当日はHoloLensやHoloLens 2等の開発が可能なイベントです。 メンターの対応などを考慮し、イベントでは以下の環境で進める予定です。 事前環境構築済みで参加していただくとよりスムーズに開発に入っていただけます。 Mac端末で参加予定の方への注意事項BootCampなどでWindows 10 OS環境をセットアップ済みの開発機を持参してください。 Bootcampで構築したWindows OSはUnity,Visual Studioをインストールするため最低でも100GB近いサイズは必要になります。ハッカソン当日開発に使う場合は常用できるディスクサイズを確保したものを用意してください 2020/01/20 HoloLensの開発環境に必要なセットアップ作業と確認方法を記載した資料を公開 2/1の環境構築ハンズオンはこの手順に従ってセットアップを実施します。 Mixed Reality Toolkit V2開発環境構築(2020/01版) Windows 10 Fall Creators Update(以降) OSのエディションについてはHome以上であれば問題ありません。 Unity 2019.1.10f1 以下のコンポーネントをセットアップ UWP Build Support(IL2CPP) UWP Build Support(.NET) Microsoft Visual Studio 2019(Community Edition可) Visual Studioインストール時に「ユニバーサルWindowsプラットフォーム開発」「Unityによるゲーム開発」選択 以下のオプション系もインストール Windows 10 SDK 10.0.17763 ⇒
きっかけは、2020/01/17(金)にHoloLens 2 HackDay2020 in Tokyo に参加したことです。
ここでアプリを作成し、やはり、楽しかったし、また、課題も見えてきました。

次にチャンスがあったら、もう少し上手く作業できるのでは?
あるいは、もっと面白いアプリを作れるんじゃないのか?
また、一人だと限界が早くなるけど、ほかの人と連携すると限界を少し伸ばせるのでは?
と、さまざまな、思いがこみ上げ、勢いで参加を決めました。
大阪には実家があるので、泊りのイベントでも、まぁ何とかなるだろう。そんな気持ちもありました。

いつまでも、他人がやったピザのネタに乗っかるのが、なんとなく嫌だったので
今回は、両手でピザのアプリは完全に封印しました。

HoloLens 2 HackDay2020 in Tokyo では、EyeTrackingをきちんと試せなかったので
絶対にEyeTrackingのネタで行こう。。そして、EyeTrackingを使うなら、目からビームのネタで行こう。
そう思い、事前にEyeTrackingに関して調査を行っていました。

以前、北海道に行ったとき、当日の移動でやらかしてしまったので
前日の2020/02/09(金)に、仕事終わりの直後に、新幹線で大阪に移動、実家で過ごすことにしました。

ハッカソン一日目、当日、茶屋町にあるMBSの会場に入りました。
あまりの会場の大きさと、まさしくテレビで見るような、いかにも
発表する舞台のある会場で、思っていた以上に、ガチな印象を持ちました。
参加人数は、参加者、スタッフを含めて50人くらいだったかと思います。

最初、Slackに入れなかったりトラブルも多少あったものの、
自己紹介を終えて、アイデアのある人の1分間ピッチが行われました。
ここで、せっかくなので目からビームのネタを披露しました。

まぁ、誰か一人くらいは、乗っかってくれるのでは?
そんな淡い期待があったものの、結局、誰一人として共感は得られませんでした。 orz...
ちょっと迷ったのですが、どうしても自分のアイデアを捨てれられなかった事
また、ほかに一人でやる方もおられたので、ボッチソンの道を選択しました。

Wi-Fiも提供され、いざというときの調査ができるようになり
とりあえず、お昼ご飯をとることにしました。
メンバーがいないため、結局お昼ご飯もボッチですることになってしまいましたw

昼から、@Miyaura さんによる、開発講座を聞いていると
EyeTrackingを使うには、目のキャリブレーションが必須という衝撃の事実が。。

なるほど、どうりで以前の Hack Dayではうまく動かなかったのか。。
という思いと、同時に、これは試遊の時のハードルが上がってしまうと感じました。
しかし、今更、後に戻ることもできず、突き進むことに。。

開発を 17時の中間発表まで、もくもくと開発、僕は事前にちょっと
プロトタイプを作ってきてたので、とりあえず実機でのEyeTrackingが
どのような体感になるかを確認、同時に、中間発表の動画を撮影しました。

ここで、勘違いが発覚します。てっきり両目の情報を扱えると思い込んでいましたが
実際に利用しているAPIでは両目から何かオブジェクトを操作する用ではありませんでした。

軽くその場で調べてみたのですが、すぐには見つけられませんでした。
なので、両目からビームを出すのは早々にあきらめることにしました。

最初は、棒状のオブジェクトをアイトラッキングで操作する予定でしたが、
そもそも勘違いをベースにコーディングしていたので
制御がヘンテコで、アイトラッキングでは操作が、ほとんどできなくて
あまりにも爽快感が得られず、なんか思っていたのと違う。。って結果に。

中間発表のプレゼン資料の作成も必要となり、
ここで、ボッチ開発の作業量の多さと、辛さを痛感させられることに
中間発表のプレゼンを書くことで、問題点を洗い出し一度頭を整理することに集中しました。

提供されたお菓子も堪能しながら、

プレゼン資料作成に飽きたら、少し開発作業をしたりと
とりあえず、何かしら手を止めない状況にしました。
そして、出来上がった中間発表の資料はこちら。

そして中間発表。。この時、審査員から、何故、HoloLens、HoloLens 2を
使う必要があるのか。。ってことも考えて。。との指示が。。
その場の思い付きで、なんか、「手や言葉の不自由な人にも出来る」。。
とか、言ってしまい、最後の締まで言葉が思いつかず、
おもいっきりグダグダな感じになってしまいました。

中間発表を元に、アプリの改修を始めたのですが、
いったん、目からビームをTrail Rendererにして出してみても
かえって邪魔になってしまったり、ロックオンのようなUIの作成が
思った以上に難しく、容易には実装出来きず苦戦してしまいました。

そして、決定的なのは、NavMeshでの制御を基本に考えていたので
ステージそのものをstaticにしてしまったこと。。
これによって変更すると、すぐにNavMeshが破綻して
今まで動いていた内容がすべてダメになってしまう結果となってしまいました。

流石に、ここで、何も動かないのはマズイと思いgitからもとに戻して
アイトラッキングの制御周りのコードの見直しと
きれいなビームのアセットに置き換えて、見栄えをよくする等
なるべく壊さずに、最終審査で実機で動くことを最低限にして
消極的な対応を行うことに切り替えました。

当初は考えていなかったBGMや効果音、爆破のパーティクル等
急遽、無料のアセットから選出して、なんとか実機で動く目途をつけて
1日目を終了しました。


2020年1月20日月曜日

【第39回】東ゲ部もくもく会に参加

お疲れ様です。ZuQ9->Nnです。



 2020/01/19(日)に

【第39回】東ゲ部もくもく会が開催されたので参加しました。

【第39回】東ゲ部もくもく会

関東ゲーム制作部こと、東ゲ部 のもくもく会です。 毎月第2日曜日に開催(を予定)しています。 各々ゲーム関係のやりたいこと、作業を持ち込み、ひたすらもくもくする会となっております。 職種、ツール、ジャンルは問いません。 アナログ、デジタルも問いません。 書籍を持ち込んで学習するもよし、ゲーム作りの作業をするもよし、アセットの作成をするもよし。 ゲームに関する作業であれば、なんでもOKです。 ...
場所は、茅場町のコワーキングスペース茅場町 Co-Edo
特に僕は、ガチでゲーム開発をしているわけではないんですが、
実は、かなり前から、タイミングが合えば参加していました。

基本的には、ゲームそのものでなくても、ゲームに関連するツールや
またデジタルゲームではなく、アナログのボードゲーム等の開発関連?なら
特におとがめなしで参加できるようです。。
僕は本当に、いつも、あんまりゲーム関連の作業してなくてすんません。って感じです。

僕は、毎回、そん時に気になった作業をしてたので
実際、まったくゲームに関係なくても、きちんとモクモク作業をしていたり
よほど行動が怪しくない限りは参加可能なようです。。

今回は、HoloLens 2 Hack Dayのイベントで作成したピザアプリを
もう少し改良していました。ただ、HoloLens 2は現状、所有してなかったので
折角つくっても実機で動かせないとテンションがさがるので
Oculus Questのハンドトラッキングで動く、簡単なゲームのようなものを作成しました。

実機まで動く形になったのがこちら。

内容は、Fruit Ninja VR のように
飛んでくるオブジェクトを切る感じです。

結局、ゲームのクリアとゲームオーバーを決めきれず
悩んでいるうちに制限時間終了。。

実際に実機で動かして自分で遊んでみたのですが、
まず、掴んだピザがすぐに外れてしまい、
とても操作できたもんじゃないですね。。

ここらへん実機でないと確かめられないので大変だなと。

本当に、個人でゲーム系のアプリを普段から作成され
展示会なんかで発表される方々には尊敬しかできません。

最後に、各自の進捗発表があるのですが、そこで主催の@Usuiさんに
ピザアプリちょっとやってみたいかも。。
と言われたのがちょっと嬉しかったので、
なんとか遊べる形までにはしたいです。。
来週別のモクモク会があるので、そこで続きをやりたい。



2020年1月18日土曜日

HoloLens 2 HackDay2020 in Tokyo に参加

お疲れ様です。ZuQ9->Nnです。

 2020/01/17(金)HoloLens 2 HackDay2020 in Tokyo に参加してきました。

HoloLens 2 HackDay2020 in Tokyo (2020/01/17 13:00〜)

HoloLens 2アプリを開発したいけど実機が無い・・・ そんなお悩みを抱える方にむけた HoloLens 2実機を使える開発者向けハックイベント です HoloLens 2が手元に届くのを待てない技術者の方はぜひこの機会に実機を触ってガンガン進捗上げちゃいましょう!! HoloLens 2の開発に欠かせないMRTK v2については下記をご覧ください! MRTK v2 の概要 事前にこちらのチュートリアルも確認しておくと吉です! チュートリアルとサンプルアプリ HoloLens 2 のチュートリアル ・HoloLens 2は参加者全員分の台数を準備できません。参加者同士譲り合ってご使用ください。 ・開発用PCの貸し出しはありません。 ・事前に開発を進めておき、当日ビルド&デプロイと不備修正などを行うことをお勧めいたします。 ・開発者向けのイベントです。事前アンケートに過去の開発物がわかるページへのリンクをご記入頂ける方を優先致します。 ・イベント中に取材が入る可能性があります。またイベントスタッフによる写真やビデオ撮影等を予定しております。撮影されました内容は後日主催者や会場提供者によるイベントの開催レポート等に使わせていただくことがありますので予めご了承ください。 ・当日の成果を是非とも当日夜の「HoloLensミートアップ Tokyo Vol.19」で発表してください! イベント名:HoloLens 2 HackDay2019 in Tokyo 日程:1月17日(金) 時間:12:30 受付開始 13:00~18:00  会場:日本マイクロソフト株式会社(品川) 31F セミナールームBCD 費用:無料 協力: 日本マイクロソフト Youtubeチャンネル: TMCN 私たちのコミュニティは、性別、性的自認、外形的な性別、年齢、性的指向、障害、身体的特徴、身体のサイズ、 人種、民族、宗教(あるいは無宗教)、技術の選択、を理由としたハラスメントの無い状態を維持すべく行動します。 私たちは、コミュニティメンバーに対する、いかなる種類のハラスメントも容認しません。 性的な表現や画像は、トーク、ワークショップ、パーティ、Twitterその他のオンラインメディアを含め、いかなるコミュニティイベントでも、不適切なものとします。 これらの規則を破った参加者は、オーガナイザーの決定のもと、制裁を受けるか、当該イベントおよび将来のあらゆるイベントあるいはコミュニティから、 払い戻し(もしある場合でも)無しで参加を拒絶されることがあります。 詳細は下記をご確認ください。 HoloLensミートアップ行動規範 https://holomagicianspolicy2019.azurewebsites.net/ 私たちのコミュニティは、ScalaMatsuri 2016にて上映された本動画に賛同いたします。 https://youtu.be/lIfOQNTWdxI
このイベントは、HoloLens 2の実機を操作するだけでなく、
自分が開発したアプリを実機にインストールして試せる。
またとない機会だと思い。平日の昼からのイベントでしたが
参加登録を行いました。とてもラッキーなことに、抽選にあたりチャンスをものにできました。

折角ですし、次のチャンスがいつくるのかわからない。
更に、落選した人もいるので、せめて、準備を十分にして参加しようと思い。
Visual Studio 2019の出力まで終えて参加に臨みました。

しかしながら、前半、USBのドライバを入れ忘れていて
正しくは、Visual StudioのUSDデバイス接続の設定でした。 m(-_-)m スマヌ

認識してくれなかったです。幸いスタッフの@torikasyu(とりかしゅ)さんに助けられ
こちらは、即解決となりました。

しかし、その後もUnityのバージョンなのか?はたまたVisual Studioが原因なのか
デプロイまで出来るがアプリが起動直後に落ちる等、うまくいきませんでした。
実機が5人に一台と少なく、しかもビルド、デプロイに時間がかかるため
あまり一人で占有しきれないので、待ちの時間が多くできてしまいました。

詳しい原因はよくわからないんですが。
Visual Studioで実機にインストールするときARMではなく、
ARM64だと アプリが落ちることがなく利用できるようになりました。

そして、ようやくうまく動いたのがこちら。
たまに、界隈の懇親会で利用されているネタ。
実は、すでに、Oculus Questがハンドトラッキング が対応され
ホロラボの@tarukosu(たるこす)さんが、MRTKv2で利用できるようにしてくれたので
その時にノリで作ってました。

その後、少し心の余裕ができ、まだ時間があるので、 前からやってみたかった、指から光線の出るアプリにとりかかりました。 かなり実装は雑で、なんちゃって感パナイのですが。 あまりなりふり構まっておられなかったので、とりあえずデプロイし、動かしたのがこちら。
その後、ピザアプリをもうちょっと遊べるようにとアセット等を入れて
改良して、ビルド、デプロイを行ったのですが、
ここでも、やはり、実機で実行時に落ちるようになってしまったり。

兎に角、もったいない時間も多かったと自分なりに反省です。
イベント中に、いろいろ聞きまくってたのに嫌な顔をせず、
むしろ、とても分かりやすく返答をいただいた@arcsin16(だん)さんにも
とても感謝しています。

そして何よりこのイベントを開催し、運営してくれた
コミュニティやスタッフさんにもお礼を申し上げます。
本当にありがとうございました。そしてお疲れ様でした。

ゆくゆくはこのチャンスをもらえたお返しに 少しでも良いアプリを作ること
アプリのクォリティーを高めることが重要かなと感じています。


2019年12月21日土曜日

[HoloLens Advent Calendar 2019] 21日目 MRTKv2のClippingをやってみた

お疲れ様です。ZuQ9->Nnです。
この記事は、HoloLens Advent Calendar 2019、21日目
2019/12/21 の内容です。

当初、azure remote renderingを試そうと思ったのですが、日本からではまだ利用できないようでした。
(認識あってます??、間違ってたら指摘お願いいたします。日本以外でも未だなのかも。。)
折角、枠をとったので、何か投稿しようと思い。色々見ていました。
やはり、Clippingの表現がとても映えて面白いと思ったので試してみました。
Clippingを利用するとオブジェクトをくり抜いて、中身を見るといったMRならではの表現が簡単に可能になります。
既に、何人か記事も出していますので、そちらも参考にお願いします。

2019-11-05から1日間の記事一覧 - デコシノニッキ

ホロレンジャーの戦いの記録

MixedRealityToolKit v2 Examplesを触ってみる ClippingExamples - 夜風のMixedReality

MixedRealityToolKit(以下MRTK)にはExamplesというデモサンプル集が含まれています。  Examplesを理解すればMRTKの機能の使い方を学習することや ノンコーディングでの アプリ開発 が可能になります。  今回は UX/StandardShader/ClippingExamplesを見ていきます。 HoloLens ClippingExample ...
今回の環境は、Unity 2019.2.12f1
Microsoft Mixed Reality Toolkit v2.1.0(Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage) を利用しました。

プロジェクトの作成、 Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageのインポート
UnityのMixed Relaity ToolkitメニューからAdd to Scene and Configureを選択する等はいつも通り
わからない方は、以前の記事を参考にしてください。
MixedRealityToolkit > StandardShaderに
ClippingBox.cs、ClippingPlane.cs、ClippingSphere.csが存在します。
そちらがClippingの処理を行うスクリプトで、形状の違いはありますが、使い方は一緒です。
今回はCubeにClippingPlaneを行う手順を示します。
まずは、HierarchyのCreate > 3D Object > CubeでCubeを作成

次にClipping用のマテリアルを作成します。
Pro

ProjectのCreate > Materialを選択、Materialの名前は何でも大丈夫ですが
今回はClippingMaterialとしました。


ClippingMaterialを選択、InspectorのShaderのドロップダウン押し
Mixed Reality Toolkit

さらにStandardを選択

InspectorがMixedRealityToolkit/Standardに切り替わったら
Clipping BorderのチェックをONにします。

ProjectrのClippingMaterialをHierarchyのCreateにドラッグ&ドロップでアタッチ
CubeのInspectorでClippingMaterialがアッタッチされたことを確認してください。

Cubeを右クリック、メニューからCreate Empetyを選択、Cubeの子供にします。

Empetyのオブジェクトの名前を変更します。特に何でも良いのですが、今回はClippingPlaneとしました。

ClippingPlaneのがInspectorのAdd Componentで、Clipping Planeのスクリプトをアタッチ

InspectorのClipping PlaneスクリプトRenderersのsizeに1を入力

HierarchyのCubeをClipping PlaneスクリプトのInspector > Renderers
Element 0 にドラッグ&ドロップでアタッチメント

そうすると、この時点で、SceneとGameのCubeの下半分が消えて見えなくなっています。
SceneでClipping PlaneオブジェクトのY座標を変更すると、Cubeが消えたり、現れたりします。こんな感じになります。

Exampleでは、すでに専用のMaterialが作成されていたり、
Animationを利用して自動でClipping Planeオブジェクトの座標を変更して
カッコイイ表現を行っていますので、是非、そちらを見てください。

おまけ。。

まぁ、やっちゃいますよね。こんなこと。。
あんたも好きねぇ。。

2019年12月17日火曜日

[HoloLens Advent Calendar 2019] 17日目 HoloLen 2で床、壁、天井にPlaneのオブジェクトを作成する Scene understanding SDK のUnity Sampleを実行してみた。

お疲れ様です。ZuQ9->Nnです。
この記事は、HoloLens Advent Calendar 2019、17日目
2019/12/17 の内容です。

HoloToolkit-Unity時代、SurfaceMeshesToPlanes.csという
床、壁、天井にPlaneのオブジェクトを作成するScriptが存在しました。
SurfaceMeshesToPlanes.csについて詳しくは下記の記事が参考になるとおもいます。

壁とか天井とか床とか欲しいな 〜 空間認識 - ウラデブ

ども、ウラさんです。HoloLensなんだから壁や床を利用したいよね?って事で、空間認識ってか部屋認識をやってみましょ。 前回と同じでHoloToolkitを使って空間メッシュが表示されるまで作ります。んで、空のゲームオブジェクトを追加。 自前の スクリプトとして「MakePlanes.cs」を作成&アタッチ。 HoloToolkitから「SurfaceMeshesToPlanes.cs」「RemoveSurfaceVertices.cs」をアタッチ。 んで、MakePlanes.csを編集。 sing System.Collections; using System.Collections.Generic; using UnityEngine; using HoloToolkit.Unity.SpatialMapping; using HoloToolkit.Unity.InputModule; public class MakePlanes : MonoBehaviour, IInputClickHandler { void Start () { InputManager.Instance.PushFallbackInputHandler(gameObject); SurfaceMeshesToPlanes.Instance.MakePlanesComplete += SurfaceMeshesToPlanes_MakePlanesComplete; } void Update () { } public void OnInputClicked(InputClickedEventData eventData) { SpatialMappingManager.Instance.StopObserver(); SurfaceMeshesToPlanes.Instance.MakePlanes(); } private void SurfaceMeshesToPlanes_MakePlanesComplete(object source, System.EventArgs args) { RemoveSurfaceVertices.Instance.RemoveSurfaceVerticesWithinBounds(SurfaceMeshesToPlanes.Instance.

目指せ脱HoloLens初心者!その2(SpatialProcessing)

https://torikasyu.com/?p=927 の続きです。 さて、次は別のサンプルを使ってSpatialMappingを更に調べてみます。 HoloToolkit-UnityのHoloToolkit-Testにある、SpatialProcessingシーンを実行してみます。 (HoloToolkit-1.5.7で試していますので、バージョンが違うと多少違うかもしれません) ...
個人的には、あの機能が好きで、Mixed Realty Tookit Unity v2 ではどうやるんだろうと探していました。
MRTKv2には、SpatialAwarenessSurfaceTypes.csというScriptで
enumの定義で、Floor、Ceiling、Wall、Platformの定義が行われている他、

Enum SpatialAwarenessSurfaceTypes

null
SpatialAwarenessPlanarObject.csのCreateSpatialObjectメソッドというのが存在し、
なんだか出来そうな感じでした。

Class SpatialAwarenessPlanarObject

Inheritance Assembly: cs.temp.dll.dll Syntax public class SpatialAwarenessPlanarObject : BaseSpatialAwarenessObject, IMixedRealitySpatialAwarenessObject SpatialAwarenessPlanarObject() Declaration public SpatialAwarenessPlanarObject() Collider Declaration public BoxCollider Collider { get; set; } Property Value CreateSpatialObject(Vector3, Int32, String, Int32) Declaration public static SpatialAwarenessPlanarObject CreateSpatialObject(Vector3 size, int layer, string name, int planeId) Parameters Returns
残念ながらサンプルが見つけられず、どう使うのかはわからずじまい。
しかし、色々と検索しているうちに、Scene understanding SDKというものが別に存在していることを知りました。

MicrosoftDocs/mixed-reality

The goal of Scene understanding is to transform the un-structured environment sensor data that your Mixed Reality device captures and to convert it into a powerful but abstracted representation that is intuitive and easy to develop for. The SDK acts as the communication layer between your application and the Scene Understanding runtime.
というか、MicrosoftDocs/mixed-realityというリポジトリの存在そのものも、今回初めて知りました。。orz..。

Scene understanding SDKは、どうやら、HoloToolkit-Unity時代のSpatial Understandingと呼ばれた機能のHoloLens 2版のようです。

UnityでのSampleがまた、別のGithubのリポジトリに存在しましたので、
今回は、そちらを確認しました。

sceneunderstanding-microsoft/unitysample

A Unity-based sample application that showcases Scene Understanding on HoloLens 2. When this sample is deployed on a HoloLens, it will show the virtual representation of your real environment. When this sample is deployed on a PC, it will load a serialized scene (included under Resources\SerializedScenesForPCPath) and display it.
Githubに色々注意書きがあるのですが、Unity 2018.4.12以上が必要になる他
Windows SDK version 10.0.18362.0以上も必要です。
また、これは、Mixed Realty Tookit Unity v2 とは全く関係無く。
実機では、HoloLens 2のみで旧型のHoloLensでは動作しないようです。
UnityのSampleはPCでも確認できるようになっていたため、
今回はPCのUnity Editorで確認を行いました

GitHubからプロジェクトをCloneかダウンロードしてプロジェクトを開きます。
Unityで確認する場合は Asset > SceneのSceneUnderstandingSampleを開き
HierarchyからSceneUnderstandingManagerを選択
InspectorのSceneUnderstandingDataProvider > Run On Deviceのチェックを外して実行します。

Unityで実行ボタンを押すと、こんな感じで壁や天井、床といったオブジェクトがせいせいされた部屋のようなものが表示されます。

しつこいようですが、
Mixed Realty Tookit Unity v2 とは全く関係無いため、Mixed Realty Tookit Unity v2 のパッケージインポートをする必要すらありません。
独立した全く別の一つの機能としてとらえた方がよさそうです。

少し、中身を確認したところ
SceneUnderstandingDataProvider.cs、SceneUnderstandingDisplayManager.cs、
SceneUnderstandingUtils.csというScriptが利用されています。
こちらは、Microsoft.MixedReality.SceneUnderstanding.Samples.Unityという
namespace のため、SceneUnderstandingそのもののコードではなく
あくまで、サンプルのために作成されたScriptです。

SceneUnderstandingそのものは、UnityではAsset > Packages > Microsoft.MixedReality.SceneUnderstanding.0.5.2042-rc > Unityの中に
CPU毎のフォルダにMicrosoft.MixedReality.SceneUnderstanding.dllが入っています。
dllなのでコードの中身は見ることができませんでした。

SceneUnderstandingDataProvider.cs、Start()メソッドの中で
var access = await SceneUnderstanding.SceneObserver.RequestAccessAsync();
が呼び出されています。実機ではこちらで、実際の部屋を読み取り、
床、壁、天井にPlaneのオブジェクトを作成するようです。

PCだと、SceneUnderstandingDataProvider.csの SUSerializedScenePath プロパティに
指定されているbyteデータを読み込んで表示しています。

GitHubのサンプルでは、Asset > Resources > SerializedScenesForPCPath > SU_Kitchen.bytesが利用されています。

いかがだったでしょうか?

開発者は、Mixed Realty Tookit Unity v2のリポジトリだけではなく、MicrosoftDocs/mixed-realityのリポジトリのチェックも必要そうです。

あと、やはり、Microsoftの開発ドキュメントはよく読みましょう。。 僕は、今回、何度も、見落としておりましたので。。orz..