読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

HoloLensの環境マッピング(Spatial Mapping)の使い方

HoloLens

HoloLensは「Spatial Mapping」とよばれる周辺の凹凸を判別する機能を持っています。これによって現実空間にあたり判定をつけ、落下してくる仮想のオブジェクトを現実空間に配置できます。Unityで開発する場合、この凹凸情報はMeshデータとして保持しています。

この情報は奥行きを持っているので、下図のようなCubeが机の奥にある場合、底面が見えなくなります。

f:id:kaorun55:20160519003207p:plain

ここではワイヤーフレームでメッシュを描画していますが、これだといまいち現実感がないので、描画をしないで奥行き感をだしてみましょう。

落ちたCubeが机の奥にある感じがわかります(そんな感じで想像してみてくださいw)

f:id:kaorun55:20160519003500p:plain

先に書いた通り、Unity上ではあたり判定付きのメッシュとして持っているので、落下させるほうは普通にRigibody(重力)をつけてあげればOKです。

なお、このサンプルプロジェクトはこちらにおいてあります。

内部で使用しているHologramsのアセットはHolograms 101Eから取得したものです。

 

全体の動画は次のようになっています。


Mixed Reality Demo Vol.2

Spatial Mapping

Spatial Mappingを使う

Spatial Mappingを使うにはHologramsにあるSpatial Mappingプレハブを配置するだけです。

メッシュを描画する場合には「Draw Material」に描画用のマテリアルを設定し、「Draw Virtual Meshes」にチェックをいれます。

f:id:kaorun55:20160519004030p:plain

マテリアルはいくつかありますが、メッシュを書く場合には「Wireframe」を、メッシュを書かない場合には「Occlusion」を指定します。先ほどの画像はWireframe」と「Occlusion」をジェスチャーで入れ替えています。

f:id:kaorun55:20160519004207p:plain

Spatial MappingにはUWPの機能許可が必要なので、Build SettingsのCapabilitiesから「SpatialPerception」にチェックをいれます。

f:id:kaorun55:20160519004425p:plain

これでメッシュが描画されます。

落下物の設定

落下物はここではCubeを使っています。落ちるようにRigibody(重力)をつけています。スクリプトを一つつけていますが、これはYがある一定以下になったら自分を削除するものです。メッシュが生成されるまでに数秒かかるので、それまでCubeは延々と落ちてしまうので。

f:id:kaorun55:20160519004740p:plain

一つ気を付けることとして、ユニティちゃんのような3Dモデルを配置した場合、そのままだと着地して転んでしまいますRigibodyのConsraintsのFreeze Rotationにチェックをいれることで、転ばなくなります。

f:id:kaorun55:20160519004819p:plain

以上でCubeがメッシュ上に落ちるようになります。

 

メッシュ生成状態の取得

メッシュが作れるようになると、メッシュ認識前の数秒をどうするかという悩みが出てきます。メッシュの生成が判別できれば。。。ということでスクリプトを修正します。

SpatialMapping.csにメッシュ生成のコードが入っており、覗いてみるとDictionary<int, GameObject> surfaces;という変数にメッシュが格納されることがわかります。

Unityのメッシュは64k頂点までという制約があるので、頂点数が増えた場合には複数のメッシュを組み立てます。

ということで、surfacesにメッシュが入るので、surfacesの数が0であればメッシュ未生成状態、それ以外は生成された状態となります。

gist8d2a46e0c7713d9b74aff37550b939dd

これをUIに表示すると次のようになります。この表示はメッシュが生成されると消えるようになっています。

f:id:kaorun55:20160519005319p:plain

表示方法を切り替える

最後にWireframeとOcclusionの切り替えをしてみます。マテリアルはSpatialMappingプレハブのDrawMaterialに設定すればよいですが、これはメッシュが新規に作成された時に設定するものです。生成中のメッシュの描画方法を変える場合にはsurfacesのメッシュすべてに対してマテリアルを再設定します。

gistcd04c870cce5a35dca3a5d3ab7404f57

呼び出し側は次のようになっています。

gist3868ac5ecc4dd3069c071d1d04a19785

こんな感じで設定します。

f:id:kaorun55:20160519011719p:plain

Cubeの作成

Cubeは顔の正面1.5m先の1m上から、1秒ごとに落としています。

gist7f729b3b79ef53f0ab4871eedd600a96

HoloLens行脚で体験会した所感

HoloLens

5月2日にHoloLensが到着して、2週間ほどで10か所を訪問しました。
体験対象はVRクラスタの方が多数です。
代わりに交換でOculus RiftやHTC Vive、meta1など体験させてもらいました。

そこでの所感をまとめておきます。

体験手順

 

  1. ゆたんぽ状態のまま、開封の儀を執り行ってもらう(高スペックVR系デバイスのような事前準備は不要)
  2. 電源を入れて、スタート画面を表示した状態でまずはメインの人にかぶってもらう
  3. おー!となる
  4. 一度返してもらって、USB接続からのストリーミングで操作方法をレクチャー
  5. Air Tap、Bloom、ウィンドウの表示、MR体験を見せる
  6. あとは被って好きにしてもらう
  7. 途中で3Dモデルを再構築して見せる

 

 

所感

雑多

  • わかっている人(いままでAR/VRをやってきた人)ほど驚くので良いフィードバックが返ってくる
  • 体験会は一度に4,5人程度がよい(1-2時間ほど)
  • バッテリーは目いっぱい使っても3,4時間持つ
  • Bloomが認識しづらい(ゆっくりやってもらう)
  • 箱が落ちるMRデモは、思った通りわかりやすそう
  • SDユニティちゃんのデモが思いのほか好評(ブラッシュアップする)
  • HoloLensの直接の比較対象はGear VR(モバイル性能、無線)
  • 重めの3Dモデルを表示させると処理落ちする
  • ただし背景は現実のため酔いにくい
  • やはり空間内のオブジェクトに触りたくなる(Kinect,Leap,Oculus Touchあたりとつなげたい)
  • ARを活用している/できる分野には間違いなく強い
  • VRだと電源断で真っ暗になるので、透過ディスプレイのほうが良い
  • 視野角が気になる場合はVRを選択する
  • エンターテインメント分野はVRを選択する
  • HoloLensは通常60FPS、ストリーミングすると30FPSに落ちる(プレビューやネットに上がってる動画より実機のほうが性能が良い) 
  • 空間認識は赤外線距離データのほかにRGBも使っているようで、暗い場所だとロストする
  • 自己位置推定も同様
  • 工学系はLCoSでプロジェクションしているらしい

 

懸念事項

 

  • 知り合いまたは知り合いの紹介以外の人にかぶせるのは怖い
  • 破損リスクが非常に怖い(昨日の夜、電源入らなくなってビビったw)

 

HoloLensでできないこと、足りないこと

  • 屋内利用想定のためGPSがない(Ingressのようなのはできない)
  • 空間は認識できるが、人や物体の認識はできない
  • 自分の認識はできない
  • 指は認識できるが、座標はとれない

 

公開体験会

公開体験会はこちらで開催しています。 主に silkyfeel社が主催しています。

hololens.connpass.com

ぼくのほうは公開体験会は現状で「開催メリット<開催デメリット」なので、行う予定はありません。

HoloLensが日本で発売されれば、さまざまなところで需要が出てくると思います。そのなかで発売当初から使っているというのは大きなアドバンテージになると考えています。

Kinect v2がWindows 10 UWP対応予定の話

Kinect for Windows v2

Kinect v2がWindows 10 UWP対応予定みたいです。Preview Build 14332のWindows.Media.Capture.Framesからとれるようです(Color.Depth.IR)。

ただし、ドライバアップデートが晩春のようで、いますぐ使えるかどうかは不明です。続報まちます。という意味で備忘録。

スケルトンは別途SDKを提供するようで2016年後半とのこと。

blogs.msdn.microsoft.com

 

channel9.msdn.com

 詳細はUnaさんのここから始める連続ツイートが詳しいです。

 

Windows.Media.Capture.Framesはデバイスによらない共通APIっぽので、

  • RealSenseなども対応してくれるのかな。
  • Xbox Oneも対応するのかな。
  • HoloLensのRawデータも取れたらいいな。
  • 仮にドライバ(ミドルウェア?)を作れば独自のデバイス対応もできればいいな。

妄想広がります。

 

HoloLensまとめ

HoloLens

概要

マイクロソフト社が進めているHMD(ヘッド・マウント・ディスプレイ)。

Oculus RiftやHTC ViveのようなVR(Virtual Reality:仮想現実)ではなく、部類としてはMR(Mixed Reality:複合現実感)になります。VR的な要素やAR(Argumented Reality:拡張現実感)的な要素も含んでいます。

次の動画は1年ほど前のビデオですが、イメージは理解できるかと思います。


Microsoft HoloLens - Transform your world with holograms

 

ARが現実に仮想オブジェクトを上乗せする、VRが仮想オブジェクトの世界を構築するのに対して、MRは仮想オブジェクトが現実の影響を受けるということが違いでしょうか。

MRをイメージした簡単なサンプルアプリケーションを作ってみました。


HoloLensでMixed Reality

 

HoloLens

2016年3月に開発者版の出荷が開始されました。価格は$3000。円換算、諸費用込みで40万円弱(1USD-110JPY)になりました。

www.microsoft.com

サイトですく購入というわけではなく、オーダーするとなんらかの選別をされ、購入時期が決まります。なお、現在の発送先は米国またはカナダに限定されています。

f:id:kaorun55:20160502143613j:plain

ハードウェア

CPUやOSが入ったデバイスで単体動作します。VR系のデバイスだとGear VRが近いでしょうか。詳細はこちら。

Hardware details

 

ソフトウェア

HoloLens用のWindows 10がインストールされており、UWP(Universal Windows Platform)形式で開発したアプリケーションが動作します。

HoloLens内にWindowsアプリのストアがあり、PowerPointやOneDriveといった既存のアプリケーションがインストール、実行できます。

アプリケーションを開発するときはPCでコンパイルしたアプリをUSB経由で転送し、HoloLens内で実行します。UWPアプリの開発環境(フレームワークおよび言語)は以下の3種類です。HoloLensで動作するアプリケーションはPCのようなウィンドウモードと全画面(全天、360度)のアプリの3種類があります。DirectXのプロジェクトテンプレートはHoloLens Emuratorのインストーラーに同梱されています。

  • ユニバーサル Windows アプリ(C#/ウィンドウモード)
  • DirectX(C++、C#/全画面モード)
  • Unity(C#/ウィンドウモード、全画面モード)

詳細はこちら

Windows Holographic

キーとなるフィーチャーはこちら

  • Camera:カメラ(HoloLens自体)
  • Gaze:視線(顔の向き)
  • Gestures:ジェスチャー
  • Voice input:音声コマンド
  • World anchor:アンカー(目印)
  • Spatial sound:3次元音響
  • Spatial mapping:空間センシング

ユニバーサル Windows アプリが作れればとりあえずHoloLensでの実行はできます。HoloLens独自の機能を試したい場合には、チュートリアルが充実しているUnityを使うとよいでしょう。

Windows Holographic - Academy

 

エミュレーター

実機が使えない場合にはエミュレーターの使用ができます。エミュレーターはHyper-Vで動作するため、動作要件を確認してください(Windows 10 Proが必要など)。

Install the tools

f:id:kaorun55:20160428120247p:plain

実機と比べると異なる部分が多いですが、最初の一歩としてはよいかと思います(デバイスがある場合にはほとんど使いません)。

ドキュメント

開発の際のドキュメントはこちらです。

Windows Holographic - Documentation

 

得手、不得手

まだ視野角が狭い(全体を映像で覆うわけではない)ので、全天画像的なものはVRのほうがよいでしょう(そもそも現実を覆うのでHoloLensにする必要があるのか?という話も)。

小さめのものや、視線を誘導するものが合っていると思います。これなら視野角もあまり気になりません。

その他、到着して2週間ほど(2016年5月)で行った体験会を通して感じたことをまとめました。

www.naturalsoftware.jp

作ったもの

基本的なジェスチャー。これだけできればおおよその操作はできます。


HoloLensの基本ジェスチャー

UWPアプリの操作風景


HoloLensでUWPアプリを動かす

MRをイメージできるようなアプリ


HoloLensの中を走り回るSDユニティちゃん

MRゲーム的なもの。現実と仮想空間を駆使しながらゲームを進めるイメージ。


UnityちゃんとHoloLensでMRゲームっぽいの

www.naturalsoftware.jp

 

アプリケーション開発

Unity

www.naturalsoftware.jp

コミュニティ

HoloMagiciansというコミュニティが発足しており、日本各地で体験イベントを開催しています。

HoloMagicians | HoloLens Creator Group Japan

hololens.connpass.com

合わせて読みたい

各種リンク

 

Visual Studio Team ServicesとUnity Cloud Buildをつなぐ

TFS Unity

Visual Studio Team Services(VSTS)でのGitリポジトリでSSHが使えるようになりました。

kkamegawa.hatenablog.jp

現状では個別に有効にしてもらう必要があります。

「 この宛先」

文面(英文としてどうかは知りませんが、有効にしてもらえました)

Please my VSTS account SSH Enable.
https://<アカウント名>.visualstudio.com/

これでSSHでつなぐサービスが使えます。

ちょうどUnity Cloud BuildがSSHのみということでやってみました(上記の亀川さんと同じです)。

 

Unity Cloud Build自体の詳しい説明はこちらのスライドを参照してください。

speakerdeck.com

 

Visual Studio Team Services(VSTS)を使うメリット

GitHubやBitbucketではなくVSTSを使うメリットはリポジトリのファイル容量制限です。

1年前ですが、VSTS(当時はVSO:Visual Studio Online)、GitHub、Bitbucketの1ファイルあたりの容量制限を調べる機会がありました。

www.naturalsoftware.jp

結果

ということで、画像や動画といったファイルサイズの大きいものを扱うUnityとVSTSは相性が非常によいです。

ほかにも次のような機能があります。これらをメリットと感じるなら使ってみると良いかと思います。

  • 5ユーザーまでは無料
  • プライベートリポジトリ(パブリックはありませんが、GitHubのリモートを追加すれば問題ないでしょう)
  • 1プロジェクトに複数のGitリポジトリを持てる
  • タスク管理やテスト管理もできる

「1プロジェクトに複数のGitリポジトリを持てる」というのは下記のようなイメージで、プロジェクトの下にリポジトリを複数ぶら下げられるので、実験プロジェクト置き場としてもちょうどいいです(GitHubだと1リポジトリの下に複数のプロジェクトが置かれるのでダウンロードが大変)

f:id:kaorun55:20160511155056p:plain

いくつか補足

鍵の設定

「My profile」から行います。

f:id:kaorun55:20160511153440p:plain

「Security」ページ

f:id:kaorun55:20160511153514p:plain

サブフォルダ

リポジトリのルートにAssetsとProjectSettingsがあるように配置するのが基本で、そうでない場合は「プロジェクト サブフォルダー」の設定を行います。

VSTSで「<root/CloudBuildSample/Assets>」となっている場合、

f:id:kaorun55:20160511154003p:plain

プロジェクト サブフォルダーには「CloudBuildSample」を設定します。

f:id:kaorun55:20160511153957p:plain

 

結果ファイル

Windowsの実行ファイルでビルドした場合、ダウンロードできるZIPファイルになります。すべてサービスのCIとして活用できるので便利ですね。

f:id:kaorun55:20160511155456p:plain

 

HoloLensの実機で撮ったキャプチャー動画いろいろ

HoloLens

連休前にHoloLensが届いたので、休み中いくつか動画を作ってみました。

www.naturalsoftware.jp

動画はHoloLensのデバイスポータルにある「Mixed Reality Capture」という機能で、HoloLensの現実とホログラム合わせた空間を画像、動画、ライブ映像で取得できます。

f:id:kaorun55:20160506100738p:plain

ジェスチャーの基本

最初はHoloLensのジェスチャーです。これができるとHoloLens内でおおよその操作はできるようになります。


HoloLensの基本ジェスチャー

アプリを動かす

HoloLensにはWindows 10と同じストアがあります。アプリはHoloLens用に配信されているものに限りますが、OneDriveやPowerPointなどMicrosoftのアプリはすでに利用できます。見た感じもほぼキャプチャと同じなので、HoloLens内での作業というのも現実的な範囲かと思います。


HoloLensでUWPアプリを動かす

MR(Mixed Reality)

HoloLens最大の特徴がMR(Mixed Reality)です。これは仮想空間に配置されたオブジェクトが現実空間から干渉されるというイメージです。

イメージの動画はこちらです。


HoloLensでMixed Reality

ユニティちゃんというキャラクターを走らせてみます。


HoloLensの中を走り回るSDユニティちゃん

まだまだ紹介したいものがあるHoloLensですが、少しずつ動画を作ってみようと思います。

 

 

HoloLens がきました

HoloLens

Wave1に通ったHoloLensが本日到着しました。

f:id:kaorun55:20160502231652j:plain

f:id:kaorun55:20160502143613j:plain

www.naturalsoftware.jp

 

ほかにも何人かWave1で購入できた方がいて、先週の土曜日に体験会が開催されたりしていました。

ytabuchi.hatenablog.com

hatsune.hatenablog.jp

MR(Mixed Reality)

HoloLnesはMR(Mixed Reality:複合現実感)という部類だそうです。AR,VRと近いものですね。ARが現実に仮想オブジェクトを上乗せする、VRが仮想オブジェクトの世界を構築するのに対して、MRは仮想オブジェクトが現実の影響を受けるということが違いでしょうか。

ちょっとサンプルアプリを作ってみました。HoloLnesが認識した空間がリアルタイムでメッシュ化され、仮想オブジェクトに影響を与えます。


HoloLensでMixed Reality

プロジェクトはこちらにあります(MixedRealityDemo以下)。

github.com

同梱物

f:id:kaorun55:20160502163152j:plain

内容物は左から

  • レンズふき
  • ヘッドストラップ(頭が小さい人用)
  • USBケーブル
  • ACアダプター
  • クリッカー
  • 本体

あと取説と鼻パッドのかえが入っています。

起動

最初に起動すると指の位置のキャリブレーションが行われます。右と左で6回ずつ計12回ゆびの位置を登録します。

続いてジェスチャーの練習です。ジェスチャーのやり方にもコツがあるので、最初に練習しておくとよいです。

f:id:kaorun55:20160502145403j:plainf:id:kaorun55:20160502145752j:plain

初期起動後は「Learn Gesture」というアプリで練習できます。

f:id:kaorun55:20160503025135j:plain

「Mixed Reality Capture(HoloLnesで見た映像を保存する)」でとったジェスチャーのイメージを載せておきます。


HoloLensの基本ジェスチャー

 

ここまでできると、なんとなく使えるようになります。

PCからプログラムのダウンロードはUSBケーブルを接続して行います。

話を聞いているとWindows Phoneと似たような形で、その知見が生かせるようです(ぼくはほとんど触ってない^^;)。

ということで少しずつ触っていきます。