2017年2月21日火曜日

HoloLensの開発効率化 を世界一短いコードで検知した空間にPlaneを表示する処理を実装してみる

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

HoloLensの空間検知Spatial Mappingはとても面白いです。
しかし、このメッシュのままだと扱いにくい場合があり、
空間にPlaneのオブジェクトを表示したい時があります。

HoloToolkit-Unityを利用すると、検知した空間から
天井、壁、床を判断し、それにPlaneを作成するコードがすでにあります。
それが、SurfaceMeshesToPlanes.csです。

しかし、このコードをアタッチするだけでは、
Planのオブジェクトを表示してくれず、
開発者がコードを作成する必要があります。

HoloToolkit-Unity > SpatialMapping > Tests > ScriptsのSpatialProcessingTest.cs
Holograms-230-SpatialMapping > Completed > Planetarium > Assets > Scripts> PlaySpaceManager.cs 
が参考になりますが、それなり処理が長く解析や理解に時間がかかります。
そこで、今回は世界一短いコードで実装したいと思います。

コードを示す前に、まず、いつものようにステップバイステップで作成手順を見ていきましょう。
毎回ですが、HoloToolkit-Unityをインストール、プロジェクトの設定を行ってください。

HoloToolkit > SpatialMapping > Prefabs > SpatialMapping.prefabをHierachyにドラッグアンドドロップ

HierachyのSpatialMappingを選択ObjectSurfaceObserverのRoomModelのプロパティに
SRMeshを選択

HierachyのCreateからCreate EmptyでカラのGame Objectを生成

作成されたGame Objectを選択、SurfaceMeshesToPlanes.csをアタッチ

SurfaceMeshesToPlanesのSurfacePlanePrefabをクリックし、SurfacePlaneを選択し、アタッチ
ここで初めてコードを作成します。ProjectのCreateを選択

C#Scriptを選択、スクリプトの名前はPlaneCreatorとします。

PlaneCreatorをクリックしエディタを起動。PlaneCreatorの内容は下記です。

using UnityEngine;
using HoloToolkit.Unity.SpatialMapping;

public class PlaneCreator : MonoBehaviour {
    // Use this for initialization
    void Start () {
         SurfaceMeshesToPlanes.Instance.MakePlanes();
      }
}
HierachyのSurfaceMeshesToPlanesをアタッチした
Game Object を選択Add ComponentでPlaneCreatorをアタッチ

これでUnityを実行すると検知した空間の天井、床、壁にPlaneが表示されます。

開発者が実質記述するのは、なんと
SurfaceMeshesToPlanes.Instance.MakePlanes(); の一行だけです。

勘違いしないで欲しい点は、このコードが正しいのか?という点です。
 SurfaceMeshesToPlanes.Instance.MakePlanes(); は
サンプルのように30秒程度、Scanした後に実行すべきで
おそらくあまり実務では、Start直後に用いないほうが良いかと

今回は、あくまで、コードの理解を早める、
そしてUnity上でぱっと確かめるためという意図をこめ効率化としました。
これによって、壁や天井にオブジェクトを張るのが容易になり
今後の開発がスピードアップできればと考えています。

2017年2月13日月曜日

HoloLensの開発効率化 ノンコーディングで頭の移動に追随するオブジェクトを作成する方法

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

HoloToolkit-Unityを利用すれば 
またもノンコーディングで頭の動きに追随して 
移動するオブジェクトが作成できます。 

いつものように、HoloToolkit-Unityをインストール 
プロジェクトとSceneの設定を行います。 

Hierarchyのcreate > 3D Object > CubeでCubeを作成 
Cubeの座標をCameraに移るように移動(今回は x:0 y:0 y:7) 

Cubeを選択しAdd Componetをクリックし 
Tagalong.csを選択してアタッチ

これで完了です。Unityで実行して右クリックで 
頭の位置(Unityではカメラの位置)を移動させると 
Cube追随して動いてくれます。
video

実機でも動いたのですが何故か動画撮影中だと動かなくなりました。。 
なにか設定が必要なのでしょうか?? 
ちなみにSphereBasedTagalong.csをアタッチしても同じように動きます。 
これは名前から察するにSphere専用なのでしょうか? 
特にSphere以外にアタッチしても問題なく動きました。 
使い分けを勉強するとともにTagalong.csの中身も読み込んだほうがよさげですね。

2017年2月4日土曜日

Tokyo HoloLens Meetup vol.1 に参加

お疲れ様です。ZuQ9->Nnです。
2017/02/02(木) Tokyo HoloLens Meetup vol.1 が開催されたので参加しました。
場所は、イベント&コミュニティスペース dots.

すでに、各メディアにもその熱狂ぶりが伝えられ
もはや説明の必要もないくらいのお祭り騒ぎのイベントでした。

どうしても、ハンズオンが受けたくて参加したんですが、
これ平日の昼間のイベント、
さらには、持ち物にHoloLens実機 (みなさんのmy HoloLens)との条件があるなか
申込時でも約60人程度が集まる盛況ぶり。。

33万もする端末を、気軽に買う人がこんなにもいるのか??
皆さんお仕事大丈夫なの??といろいろツッコミどころはありますが。。。

開場時間の15:00ギリギリに入ったためか、すでにほぼ満席状態。
しかも、皆さんの、持ち物が多く、席に座れるのか??といった状態でした。

基本は、こちらのkaorun55さん資料に沿った形で進められました。



僕は、前準備もしていましたし、札束のアプリを作成したときにも
やっていた感じだったのですが、あの会場の異様な雰囲気からか
完成した時には、やたらと楽しくてしかたかりませんでした。

16:00くらいからいったん休憩、モクモクタイムを挟み。
17:00からは、いよいよSharing機能体験
個人的には、こちらがとても楽しみにしていました。
やはり、個人で33万もするHoloLens複数台所有するのは厳しいので
これを逃がすと、絶対に損だなと思っていました。

さすがに、この人数では、なかなか手間取っていた感じなのですが
僕は無事に成功。。複数台つないで、世界が広がる端末って本当に面白いですね。

18:30からはMeetup HoloLensが気になる人、全員集まれってことで
こちらは100名ほどの申し込みがありました。

実は、なんとか各発表者の内容をうまくまとめようと試みていたですが
Sharing以降は、てんやわんやの大騒ぎ。。
人数も増えて、ますますヒートアップ状態。
僕自身もその雰囲気に飲まれてしまい。もはや頭の中が真っ白な感じに。。
発表内容をきちんとメモることもできませんでした。。

ハロウィンやお正月に渋谷に集まって、お祭り騒ぎをテレビで見ますが
あれの、小規模な、一種の異様にテンションだけが高いカオスな雰囲気でした。

Meetsupで印象に残ったお話といえば、
HoloEyes 株式会社 杉本 真樹さんのお話、
医療現場ではすでに導入の状態にあるようです。
多分、ごく普通に使われるようになるんでしょうね。

また、HoloLensで録画した熟練の医師の動画が
医療教育のコンテンツになるという話をされていて。
すべての人をCreatorsと言っているMicrosoftの戦略的にも
一役買いそうな興味深い内容でした。

Myハチ公を作成し話題となった、坪倉 輝明さんの
「HoloLensは夢のあるデバイスではあるが、万能ではない!」の言葉には
僕もとても同意しています。体感するとわかるのですが
あの視野の狭さは、かなり残念ですし、大勢の人には伝わらないません。

僕自身も、実は、HoloLensの第一印象は、最悪で、
なーんだ、これだけ。。意外に、つまらない??
PV詐欺もいいところ。。だったんですが、
それが33万も自腹で払って実機を買ってしまったり
開発を始めて技術情報をブログにだしたりと。

kaorun55さんの 「HoloLensで人生が変わった人の話」ほどではないにしろ
確実に行動を変えられ来ています。それほどに、人を引き付け魅了する何かが
この端末には確実にあります。それが証拠に、僕のような人間が
こんなにも多く、平日の昼から集まるのですから。。

帰えるときには、参加するだけで、何もしていないにもかかわらず
かなり疲れた状態になっていましたので、主催者やメンター
スタッフの皆さんの、ご苦労は相当なものであったろうと思います。
ご苦労様でした。そして何より、ありがとうございました。


2017年1月30日月曜日

HoloLensの開発効率化 Unityから直接アプリをインストールする方法

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

UnityでHoloLensの開発してアプリを実機にインストールする場合
いちいちUnityからUWPにbuildしてVisual Studioを開き 
Visual Studio側でCPUの設定をX86に変更する等 
とかく面倒な手順が発生します。 
これもHoloToolkit-Unityを使えば、手間を省くことができます。
 
まずは、HoloToolkit-Unityをインストール 
プロジェクト、Sceneの設定を行います。 
きちんとSceneをセーブし、UnityのBuild Settingsで 
インストール対象のSceneを選択してください。


HoloToolkit-Unityをインストール しているとUnityにHoloToolkitが表示されます。
UnityのメニューのHoloToolkit > Build Windowを選択 


Build Windowのメニュー Deployの username passwordを設定
(username passwordは現在利用しているWindows PCの username password)

HoloLensの実機をUSBでWindowsにつないで、
SLNの Build SLN, Build APPX, then Installボタンを押せば
HoloLensの実機にアプリをインストールすることができます。 

ただし、アプリがインストールされるだけで、自動で起動したりしないので 
アプリを起動したい場合は Build Windowのメニュー Utilitiesの 
Launch Applicationボタンを押してください。

また、Unityでアプリの内容を変更した場合は  
再度Build SLN, Build APPX, then Installボタン、Launch Applicationボタンを押し
再Build、再Install、アプリの起動のし直しが必要になります。
今までの手順よりだいぶお手軽ですが 、これなら
Holographic Remoting Playerのほうが便利そうですね。

2017年1月26日木曜日

HoloLensの開発効率化 ノンコーディングでHoldできるオブジェクトを作成する方法

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

HoloToolkit-Unityを利用すれば
なんとノンコーディングでオブジェクトのHold
つまりHolo内で掴んで移動させられる
オブジェクトを作れるようになります。

まずは、 HoloToolkit-Unityをインストール
プロジェクトとScenesの設定をきちんと行います。

HoloToolkit-Unityの
Input > Prefabs > InputManger.prefabをHierarchyに追加

Hierarchyのcreate > 3D Object > CubeでCubeを作成
Cubeの座標をCameraに移るように移動(今回は x:0 y:0 y:7)
Cubeを選択しAdd Componetをクリックし
HandDraggable.csを選択してアタッチ
これで完了です。Unityで実行し、
Shiftを押すと青い指マークがでますので
Cubeを選択し、マウスをクリックするとHoldで移動させられます。

video


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

例によって、HoloToolkit-Unityは、いつ変更されるかわからないのですが
とりあえず、現在のところは、これで問題ないかと思います。


2017年1月24日火曜日

HoloLensの開発効率化 Unity上でSpatial Mappingのメッシュを表示する方法

お疲れ様です。ZuQ9->Nnです。
HoloLensの開発をするうえで、もう一つ不便な点。
それは、空間検知をおこなう。Spatial MappingのAssetをHierarchyに
おいて実行してもUnityではメッシュが表示されない点です。

こちらもHoloToolkit-Unityをつかっていきます。
まずは、Spatial MappingのAssetをHierarchyにおきます。
これで実行しても、画面にはなにも表示されません。

そこでSpatialMappingのAssetにアタッチされている
ObjectSurfaceObserver.csのroomModelというプロパティをクリックし
選択画面でSRMeshを指定します。
これで再び実行するとUnity上でもSpatialMappingのメッシュが表示されるようになります。
確認したところ、この指定をしたまま、実機で動かしても
SRMeshの中にある部屋が表示されたりはしませんでした。
コード上からもUnity Editorでしか読み込まれて表示されないように制御されています。

こちらは、Holographic AcademyのサイトのHolograms 230: Spatial mapping でも
同じようにしていたので、大丈夫かなと思いますが、
SRMeshはHoloToolkit > SpatialMapping > Tests > Meshesの中に存在し
如何にもMicrosoftがテスト用に用意したAseetであると考えられます。
今後削除される可能性も高く、手放しでこれを利用するよりかは
自前で部屋のAssetは容易したほうが無難かもしれませんね。

2017年1月23日月曜日

Holographic AcademyのプロジェクトでAssembly-CSharp-firstpass.dll が見つかりませんでしたのエラーが出力された時の解決方法

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

HoloLensの開発でHolographic Academyにある
Holograms 101 等のプロジェクトをUnityからUWPに出力し
HoloLens EmulatorやDeviceで実行しようとすると
「Assembly-CSharp-firstpass.dll' が見つかりませんでした」
とういエラーが表示されてしまいました。

てっきり、実機につないでないから、起きるのだろうと放置していたのですが、
実際に実機をつないでいても出力されるので調査しました。

Windows Holographic Developer Forumに
Assembly-CSharp-firstpass.dll missing from Origamiという
同じ内容の質問が投稿されており それによると
「The path my project was in appeared to be too long
When I put the Unity project in the root of the drive, everything worked like a charm!」

つまりプロジェクトのパスが長すぎる??
プロジェクトをCドライブ直下に置くと解決した????

若干、モンニョりとする解決方法だったのですが
試してみたところ、この方法でうまくいきました。。
なんか、もう少し、エレガントな解決策あるのかもしれませんが
今のところ、これ以外の解答が見つけれらませんでした。。orz..
本当は、根本的な原因を調査すべきかなぁと思ったりするけど。。まぁええかな。。