2019年6月22日土曜日

[Oculus Quest 開発] Oculus Integration に含まれるLaserPointerについて。

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

2019年6月のはじめくらいに
Oculus Quest を購入しました。
折角、購入したので、開発しないと勿体ないとおもったため
ゆるゆると開発を始めていました。

どうしても、さぼるだろうなと感じていたために
2019年6月1日(土)に開催された
【しなもく会特別版】Quest開発もくもく会 等にも参加してしていました。

【しなもく会特別版】Quest開発もくもく会 (2019/06/01 14:00〜)

VR開発に詳しいSynamonのUnityエンジニアと、一緒にQuest開発をもくもくできる会 「開発とか作業をしたいけど、自分の部屋だとやる気がでなくて...」 「Questが届いたのでさっそくみんなでワイワイやりながら開発したい!」 「AndroidベースのVR開発に関する新しい知見が欲しい...」 「VR転職に興味ある!けど知り合い全然いない...知り合い欲しい...」 ...
実は、以前に少しだけ、業務でOculus Goのアプリを開発したときに
UIを操作するときにLaserPointerを表示しているサンプルがあったなぁと
かすかな記憶に残っていました。

ググってみると。いくつかLaserPointerを表示する技術記事が見つかりました。
これらの技術記事の中では、LaserPointerのSriptを自作しています。
しかし、2019年6月のOculus Integrationの中 Assets > Oculus > SampleFramework > Core > Scriptsに LaserPointer.csというScriptが含まれていました。なので、わざわざ自作必要は無いのでは? というモヤモヤが自分の中に生まれてきました。

すでに、こちらのQiita記事 に記述されているんですが。

Oculus QuestでuGUIを操作する - Qiita

はじめに 基本的にはOculusGoなどと同じですが、少し情報が古くなっているので、2019.06時点での情報を記して置きます。 Oculus Go 開発メモ - uGUI編 - Qiita https://qiita.com...
Oculus Integration に含まれるLaserPointerは、
Assets > Oculus > SampleFramework > Core > Prefabsの中の
UIHelpersのPrafabにまとめられています。


UIHelpersのPrafabは
  • LaserPointer
  • Shpere
  • EventSyste
の3つのGameObjectで構成されています。
それぞれ、細かく内容を見てみましょう
LaserPointerのGameObjectは、LaserPointer.csのScriptと
Line Renderがアタッチされています。

ShpereのGameObjectは3DオブジェクトのShpereが
Scale x 0.01 y 0.01 z 0.01となっています

 EventSystemのGameObjectはUnityのEventSystemと
OVRInputModule.csのスクリプトがアタッチされており、
CursorのプロパティにLaserPointerがアタッチされています。

また、UIHelpersそのものには、HandedInputSelector.csのScriptがアタッチされています。

HandedInputSelector.csの中身は、OVRInput.GetActiveController()で
アクティブなコントローラーを取得し、OVRInputModuleのrayTransformを右か左のHandAnchorにセットしています。

実際にLaserPointerを利用しているサンプルは、
Assets > Oculus > SampleFramework > Usage > DebugUI.unityのSceneが参考になります。

DebugUIのHierarchy、CanvasWithDebugにDebuUIBuilder.csの
UI Helper To InstantiateのプロパティにUIHelpersのPrefabがアタッチされています。
また、Laser Beam BehaviorをONに変更することで
常にLaserPointerを表示し続けることが可能です。


本当は、VRChatのアプリのように両方のコントローラーから
LaserPointerを表示してUI操作をおこないたったのですが、
色々、自分で独自Scriptを記述したり試してはみたのですがうまくいきませんでした。orz..

まぁ、今後も、こんな感じでゆるりと Oculus Quest 開発は続けていきたい。

2018年12月9日日曜日

[HoloLens Advent Calendar 2018] 9日目 Mixed Realty Tookit Unity vNext2018を利用し、Air TapでCubeを落とすHoloLensアプリを作ってみた

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

Mixed Realty Tookit Unity vNext2018
日本語でも何人か記事をだされていますが、
2018/12/09現在では、ようやくAlphaを出てBataになったばかり
まだまだ、開発真っ最中といった印象です。

今回は、Mixed Reality Toolkit 2018.9.0 (vNext Beta) を利用し、
HoloLensアプリの最初の第一歩ともいえる、CubeをAir Tapで落とすアプリを作成していきます。

なお、Mixed Reality Toolkit 2018.9.0 (vNext Beta) を利用するには
Unity 2018.1以降、.NET 4.xが必須となります。

今回、僕はUnity 2018.2.10f1 (64-bit)を利用して作成しました。

まずは、GitHubのreleaseページより
MixedRealityToolkit-Unity-2018.9.0-Beta.unitypackageをダウンロードします。

Unityで新規でプロジェクトを作成し、
MixedRealityToolkit-Unity-2018.9.0-Beta.unitypackageをインポートします。
ちなみに.NET 4.xの設定は、unitypackageをインポートすると自動で設定されます。
インポートができたら、 UnityのメニューにMixedRealityToolkitのメニューが表示されます。

 MixedRealityToolkitのメニューからConfguerをクリックすると
Hieraichyに、MixedRealityToolkit、MixedRealityPlayspaceが自動追加されます。

MixedRealityPlayspaceを展開しMainCameraを選択すると、
InspectorにGaze ProviderのScriptが既にアタッチされています。
これは、Gazeつまり視線を扱うためのスクリプトです。

Main Camera、Gaze ProviderのCusor Prefabのプロパティに
MixedRealityToolkit-SDK > Features > UX > Prefabs > Cursorsの
DefaultCursorをアタッチメント

さらにGaze ProviderのGaze TransformプロパティにMainCameraをアタッチメント


HieraichyのCreate > 3D Object > Cubeを選択しCubeを作成

 Cubeを見えやすい位置に配置してください。(僕は、x : 0,  y : 0,  z : 3)に配置
 DefaultCursorの色が白だったので、白いCubeに白いGazeが当たっても認識しずらかったので
僕は、適当な色(R : 0, G : 201, B 255)のMaterialを作ってCubeにアタッチしましたが、
この作業は、必須ではありません。

CubeのInspectorからAdd ComponetでRigdbodyを追加します。

RigdbodyのIs KinematicのチェックをONにします。

CubeにMixedRealityToolkit-SDK > Features > Input > Handlersの
PointerClickHandlerのScriptをアタッチメントします

次にProject ViewのCreateからC# Scriptを選択し、新規のScriptを作成します。

名前は何でもよいですが、ここではAirTapEventとしました。

AirTapEventの内容は下記です。
AirTapEventをCubeのInspectorにアタッチメントします。

CubeのInspectorから、PointerClickHandlerスクリプトの
On Pointer Clicked Action Eventを展開し
Action InputをSelectにします。

さらに、+ボタンを押して、Unity Eventを表示ます。

Unity EvenにHieraichyのCubeをドラッグ&ドロップでアタッチメント

Unity EventのNo founctionのドロップダウンを開いて
AirTapEventのFallDown()メソッドを選択します。

操作は以上で、これでBuildしHoloLensにアプリをDeployすれば
今までのToolkit同様にAir TapでCube を落とすことができます。

残念ながら、いままでのToolkitで出来ていた
Unity Editor上でShiftボタンを押しながらクリックすると
Air Tapが確認できる機能は、現在のところvNextでは提供されておらず、
実機での確認が必須となっています。

実機で動かすとこんな感じになります。

現在見ている限りでは、Mixed Reality Toolkit Unity vNext 2018.8.0.0 Alpha 2の時点で存在していた
Spatial Mapping、Spatial UnderstandingやSpatial SoundのためのSpatialフォルダ、
そしてsharingのためのsharingフォルダが削除されたのが気にかかったのですが、
元々vNext 2018.8.0.0 Alpha 2でも、それらのフォルダにはREADMEしか存在しませんでした。
また、HoloLens用のExampleもほとんど存在せず、使い方を模索しなくてはなりません。
おそらく、これらの機能は、今後追加で提供されると思います。

一応、.unitypackageだけではなくsorce code版もダウンロードして確認しましたがやはり、ありませんでした。
vNext2018は、かなり以前のToolkitからの変更も大きく 対応は大変になるかと思います。
どうせやるなら早いうちにと思ったのですが、やっぱり早すぎたのかもしれません。

最後に、今後のHoloLens開発をやるうえで、かならず、
Toolkitのバージョン情報を確認して検索しないと、
情報が古くて役に立たなくなることが多くなるかとおもいます。
どうぞ、HololLens Developerの皆さんは、お気を付けください。


2018年7月23日月曜日

札幌HoloLensミートアップ vol.2 ~夏編~ に参加

お疲れ様です。ZuQ9->Nnです。
 2018/07/21(土)札幌HoloLensミートアップ vol.2 ~夏編~ に参加してきました。

札幌HoloLens ミートアップ vol.2 ~夏編~ (2018/07/21 14:00〜)

開催概要 ## HoloLens・VRアプリ開発秘話 自分がその場にいながらバーチャルな空間と融合した世界を体験できるMicrosoftのホログラフィックコンピューティング「HoloLens」のSapporo HoloLensミートアップ第2回目を実施することになりました!xR(VR,AR,MR)の開発を未経験でも、熱い興味がある方など誰でも参加いただけます。ビジ ...
確か4月に開催された Tokyo HoloLensミートアップ Vol.8の時に
札幌の主催者 @jojomonvr さんにお会いして、
お声がけいただいたのがきっかで今回の参加にいたりました。

折角、わざわざ札幌にまで行くので、単に参加するのではもったいない
なのでLTも。。とか、勝手に参加のハードルを高くしてしまった。(;^_^A

かなり、前から準備し、飛行機の予約も完了。あとは当日に行くだけ。
しかも当日は、きちんと6時起きなど、スムーズに進んでいました。

_人人人人人人人人人人人人_
> しかし事件は起こった <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

事前に家から成田まで1時間半と記憶しており、10時25分発の飛行機なら
8時に家を出れば間に合うはずと、吞気に家を出てしまったのが失敗の始まり。。

9時ごろに北千住に到着し、改めて時刻表を確認すると。。
なんと、到着予定が10時28分。。この時点で間に合わないことが決定!!

なんてこった。何が起きた?!!一瞬時空が歪んだのかとさえ錯覚してしまった。。
成田駅までの乗り換えアクセスが休日ではかなり悪いらしい。
途中駅で10分以上待たされる羽目に。。

なんとか11時前に搭乗予定のバニラエアのロビーに到着。
そこから一番早くつけそうな12時20発、14時10分到着の便を予約できた。
ここで一安心。。なんとか行けると思っていた。。

_人人人人人人人人人人人人_
> またも事件は起こった <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

なんと、空港の交通事情で大幅に出発が遅れてしまい。
13時20分発となった。なんとか東京をはなれ15時くらいに新千歳空港に到着。
よし。なんとかなるかも。。と思っていた日が僕にもありました。。

_人人人人人人人人人人_
> ここで痛恨のミス <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄


本来はJRを使えば40分ほどで札幌に到着予定が。
間違えてバスに乗ってしまい。結局、現地に到着したのが
17時ごろと、LTの時間ギリギリになってしまいました。
ここでもかなり時間が溶けましたね。ほんとに時空が歪みを感じましたw

そんなこんなで、なんとかLTだけを行う形になってしまいました。
LTの内容は前々から作ってみたかったHoloGiraffeのアプリを真似てみました。

発表に関しては。。あまりにも、5分間の時間を気にしすぎて
早口になりすぎ、しかも、まとめ部分の最初で時間終了となりました。
またもや、なにやってんだよ。。って感じでした。

参考のために動画を2本いれたのが焦りの原因なんでしょうかね。
ただ、言葉では伝えきれないと思ったので
欲張らずに自分のアプリの動画のみを最初に流せばと反省しきりです。

発表内容のスライドはこちらです。
作成したサンプルアプリはこんな感じです。

一番メイン内容は、最新のMixedRealityToolkit-Unityに入っている
MixedRealityToolkit/StandardシェーダーとClipPlane.csの使い方ですね。

HoloToolkit-Examples > StandardShader の中に
MaterialGallery.unity というサンプルのシーンも参考になりました。

やはり、こういった期限がないと形にしておわらさないですよねw。
なんとか見せれる形に終えられて本当に良かったです。

懇親会も、なんか一人でポツンとしていたシチュエーションも多かったかな。
なんとか、自分から話に行けた、福岡から参加の @KzoNag(ながみね)  さんに
じゃあ、今度は福岡の勉強会に参加しますねぇ。。なんて
かなりノリで宣言してしまいましたw、まぁ勢いって大事ですよねぇ。

なんだかXR業界の人のフットワークの軽さを見ていると
僕もじっとしているのってもったいないかなと
今回の件も含めて、決めてしまって進んだほうが断然に楽しかった。
その体感だけでも自分にはプラスにできるんじゃないかなぁとか。。
そんな感じで、次もチャレンジしていきたいです。。

北海道、札幌が堪能できたか?はイマイチな部分も残りましたが
次は、心からおもいきり楽しんで参加したいです。

最後に、札幌行に背中を押してくださった@jojomonvrさん
どうもありがとうございました。



2018年3月10日土曜日

第五回 HoloLens参考書 読書会で発表しました。

お疲れ様です。ZuQ9->Nnです。
2018/03/09(金) 第五回 HoloLens 参考書 読書会 で発表を担当させてもらいました。

第5回 HoloLens参考書読書会@アカツキ (2018/03/09 18:30〜)

HoloLensアプリってどうやって作ればいいの? HoloLensアプリケーションってどうやって作ればいいんだろう。Microsoftが提供するチュートリアル「Academy」を一通りやってみたけど、次はど うすればいいんだろう。 そんなお悩みを持っている方たちに向けて参考書の読み会を開催します! 現在出版されている参考書は洋書だけなので少しハードルが高いですが、みんなで挑めば怖くない! 本イベントで取り扱う書籍の内容は以下の通りです。 ch.1 OverView & 環境構築 ch.2 はじめてのHoloアプリ(豆腐みたいなもん) ch.3 Holoの入力(Gaz...
HoloLensに関連する何かに携わっていないと、絶対に触らずにダメになっていく
そんな不安や焦りの気持ちからこちらの読書会にスタッフとして参加させてもらっていました。

こちらの「HoloLens Beginner's Guide

の書籍に添いながら各Chapterごとにスタッフが発表を受け持っています
そして、いよいよ、僕の担当の番となったわけです
内容は、Chapter6 のSpatial Mappingについて、発表資料はこちらです。

こちらの資料の中のコードApplicationManagerについはて、こちらです。

完成したアプリを実機で動かしたときは、こんな感じになります。

発表は、自分でも、早口になっているなと思いながらも ついつい焦りからか、
止められない感じになってしまいました。

今まで5分くらいのLTはやっていたのですが、
1時間以上の枠をもらったのは、
今回初めてで時間配分、どっからどこまでをダラダラせず、
わかりやすくまとめるか、とても課題が残りました。

発表後は、参加者にお声もかけていただき。
具体的な質問等もいただき、まだまだ、きっちりと
理解していない部分がほとんどだと痛感しました。

Spatial Mappingの一番のポイントは、HoloLensがセンサーをつかって
周りの空間の情報をスキャンし貯めている部分です。

質問者さんから言われて、僕も勘違いしていた部分があります。
SpatialMappingObserver.csにStartObserving があるので
てっきり、アプリを起動したときに
周囲をスキャンを開始するのかと思っていたのですが
アプリを起動しなくてもHoloLensそのものを起動したときに
既に自動的にセンサーを使って周りの空間をスキャンし
空間情報を貯めて更新していますね。
アプリ内では、あらかじめスキャンした空間の情報も利用しているようです。

途中でヘルプいただいた @dy_karous はじめ、スタッフの皆さんありがとうございました。
発表そのものは終わりましたが、読書会自体はつづきますので
最後まで、できる範囲内でお手伝いさせてもらいます。

2017年10月14日土曜日

xRLT vol.1に参加

お疲れ様です。ZuQ9->Nnです。
201710/13(金) xRLT vol.1 に参加しました。
場所は渋谷のTECH PLAYさん

xRLT vol.01|IT勉強会・セミナーなどのイベント情報検索サービス - TECH PLAY[テックプレイ]

本年1月に日本発売されたHoloLens、そしてまもなく一般発売を迎えるWindows Mixed Reality Immersiveデバイス! まだかまだかと待ち構えるみなさんの熱気が今回のLT大会の源となりました! もちろんMRだけでなく、VR/ARも集めてどーんとLT21連発! 10/2 Update: U22割(先着10名無料)やります! 10/3 Update: ...
今回もLT発表枠で申し込みました。内容はTokyo HoloLens meetup vol.5 の
LTで発表した椅子の検知の続きのような形
どうしても歩かせてから椅子に座らせてみたかったのでチャレンジしてみました。

結果的には、残念ながらうまくいきませんでした。orz..

発表そのものも、またしても5分で終わらず、強制終了。。orz..
もう、緊張のためか発表中は足がガタガタ震えてきたのがわかったんですが
全然とめられなかったですね。内容も頭の中が真っ白に
パーンっていっちゃいましたね。自分でも何言っているのかわからない感じ
とにかく、ふわふわ浮いたように感じてました。
はじめっててわけじゃないのに意識しすぎたんだろうか??

前回のリベンジならずで、ものすごく自分的に
反省点ばかりが目立つ結果になってしまいました。

発表したおかげか、色々な人から声をかけてもらいとてもうれしかったです。
今後も積極的に発表前提で勉強会に臨みます。

ともあれ、時間が許す限り、力を尽くしたので
ある意味ではやり遂げた感も、いったんこちらの内容は一休みして
ずっと気になっていたMRDesignLabs_Unityで、
いろいろ脳内の妄想が実装できそうなのでチャレンジしてみます。

あぁ次こそはキッチリとかっこよく5分ぴったりでおわらせるぞ。。
課題も増えましたが、やりたいことも増えてなんだかとても楽しくなってきています。
これを続けられるように精進かな。。


2017年10月8日日曜日

はじめよう!Mixed Reality を開催しました。

お疲れ様です。ZuQ9->Nnです。
2017/10/07(金) はじめよう!Mixed Reality を開催しました。
場所は渋谷の21Cafeさん

はじめよう!Mixed Reality (2017/10/06 19:00〜)

理念・目的 最近MRやHoloLensといった分野が盛り上がっていて、ドキュメントなどの整理もされ始めているので、一度初心を思い出すとともにこれからMRを始めたい! という方が情報を仕入れられる機会を作りたいなと思い開催されます。 ## こんな方を対象にしたお話し会です * HoloLensやMR技術に興味がある * でも実機は高いし * unity? C#? ちょっとよくわからないな... * そもそもMRって何よ? VRとは違うの? ## 当日のスケジュール 18:30 開場 18:50 開始 ~19:00 geechs.inc による会場説明 ~19...
これまで、何度も勉強会に参加者としては行っていましたが、
今回は、なんと主催側??。。といっても発表資料を作り
発表しただけで、ほとんど、浅葱 (あさぎ)さんにお任せでした。

本当に色々、準備してくださってありがとうございました。
もう少し、自主的に動けるように、今後の反省点も多いです

当日は、ものすごい雨となりましたが、
ほとんど想定した人数の方が参加してくださったようなので
こちらも本当に、ありがとうございました。

僕の発表内容は、「HoloLensのはじめかた」という技術的な内容より
操作方法やHoloLensに関する説明がメインでした。


いざ まとめ始めると、こんなので大丈夫なのか?
また、発表した後も、こんなのでよかったの??という迷いばかり。。

めちゃくちゃ、つたない発表となりましたが、
無事、最低限の義務は果たせてよかったかなと思っています。

アウトプットはとても、重要だと感じてますが、
僕は、量も少ないうえ、スピード感も無く、
それがとてもコンプレックスな感覚はもっています。

ただ、そんな思いをするたびに、マイペースで良い
自分のできる範囲内で最大で良いのだと自分を言い聞かせています。

他の勉強会の主催者、発表者さんたちは、自分の業務も持ちながら
おしみなく、自分のノウハウを積極的に共有していて
改めて、そのすごさや重要さを再認識しました。

なにはともあれ、勉強会開催という参加者か
次のステップを歩むことができ、自分的には大進歩だと感じています。

今後も続けられるのか?。不安も多いですが
今まで同様に、できる範囲を最大限を尽くして行く感じで取り組みます。

今回は、本当に良い体験になったと感じています
最後に、ほかの登壇者の方も含めてお連れ様でした。

2017年9月18日月曜日

Tokyo HoloLens ミートアップ vol.5 に参加

お疲れ様です。ZuQ9->Nnです。
2017/09/18(日) Tokyo HoloLens Meetup vol.5 が開催されたので参加しました。
場所は、日本マイクロソフト株式会社セミナールーム

Tokyo HoloLens ミートアップ vol.5 (2017/09/17 13:00〜)

開催概要 ## HoloLensアプリ開発秘話 HoloLensアプリ開発で著名な方々に登壇いただき、HoloLensに向いたアプリ、VR/MRに向いたアプリの特長や、HoloLensアプリ開発の裏話をお 話しいただきます。 HoloLensを持っていない方も参加可能です!ご興味のある方は是非ともご参加頂き、HoloLensを含めたWindows ...
イベントの詳細内容は、おそらくほかの方が詳しく、
わかりやすくまとめてくれると期待して。
今回は自分のLTについてのみです。
前から気になっていた椅子の検知にチャレンジ です。


なんとかサンプルが実機でも動きました。

今回はプロジェクトもGitHubに公開しましたので、参考にしてください。
ZuQ9Nn/ChairDetection

ZuQ9Nn/ChairDetection

This is HoloLens Sample App ChairDetection minimum cod
LTは残念ながら5分をオーバーしてしまいました。。orz..
プレゼンや動画の操作に戸惑いましたね。。事前に準備はしてたつもりでしたが
まだまだ努力も必要だったようです。

LTではいきなりコードを出してしまい詳細な説明しきれなかった、
椅子の定義について。ポイントは下記の部分です。

SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceHeight_Between(0.25f, 0.6f),
...
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleLength_Between(0.1f, 0.5f),
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleWidth_Between(0.1f, 0.4f),
こんな感じで図解すると多少はわかりやすいでしょうか? ?(;^_^A アセアセ・・・


UnityでのScaleの1は、HoloLensで見て現実世界の1m
つまり幅が0.1m~0.4m、長さが0.1m~0.5m、床からの高さが0.25m~0.6mの
条件に当てはまった矩形を椅子として扱う感じです。

GitHubでのサンプルプロジェクトはUnityだけでも動くように作っています。
こんな感じで実行した後、ゲームシーンでマウスをぐりぐりと動かして
空間情報を読み込んでみてください。ある程度読み込むとユニティちゃんがでてきます。


結構時間がかかりますので、面倒な方は、
ChairDetection.csのpublicのプロパティ
Min Area For Complete、Min Horiz Area For Complete、Min Wall Area For Completeの値を
小さくしてみてください。実機ではある程度空間情報が必要ですが
Unity上ではそれぞれの値を半分くらいにしても大丈夫だと思います。
SpatialUnderstandingのサンプルは、全部の機能がてんこ盛りにされているため
逆に、やりたいことだけを抜き出すのにかなり苦労します。
今回、かなりコードが短くできたので
他の開発者さんの理解の助けになれば幸いです。