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

Natural Software

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

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と似たような形で、その知見が生かせるようです(ぼくはほとんど触ってない^^;)。

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

 

 

HoloLensのネットワークを使うときのいろいろ

HoloLens

HoloLens(エミュレーター)のネットワークを使うときにハマったポイント。

そもそもネットワークにつながってない。

f:id:kaorun55:20160428125322p:plain

なので、Edgeでどこか開いても見えない。

f:id:kaorun55:20160428125358p:plain

Toolsを開いてネットワークを見てみます。NAT SwitchとInternal Switchのエミュレーターがついてますね。

f:id:kaorun55:20160428125253p:plain

Device Portalを見るにInternal Switchのほうがこっちとつながっているようです。

f:id:kaorun55:20160428125500p:plain

で、どうするか。

詳しい手順はこちらを見てもらうとして概要を

Blog - Connecting The HoloLens Emulator To the Internet

1.HoloLensエミュレーターを起動しておきます。

2.Hyper-Vマネージャーを起動します(HoloLensエミュレーターはHyper-Vで動いてます)。

f:id:kaorun55:20160428125923p:plain

仮想スイッチマネージャーで、外部ネットワークにつながるスイッチを作ります。

f:id:kaorun55:20160428130033p:plain

HoloLensエミュレーターの設定で、NAT Switchを先ほどのExternal Switchに変えます。

f:id:kaorun55:20160428130133p:plain

ネットワークを更新して、IPアドレスが変わったことを確認します。

f:id:kaorun55:20160428130206p:plain

Edgeを再起動してサイトが表示されればOKです。再読み込みだとダメでした。

f:id:kaorun55:20160428130256p:plain

ストアにもつながります(インストールできなかったけど)。

f:id:kaorun55:20160428130318p:plain

これでHoloLensのネットワークがつながったので、ネットワーク経由のデータ転送ができます。

で、作ったのがこちら。KinectのデータをHoloLensアプリに投げています。


Holoportation的なやつ

あ、Capabilityでネットワーク系のチェックを忘れずに。

いまいちわかってないのですが、UnityのSocketでBegin~系のAPIがUWPビルドの際にエラーになりました。SocketAsyncEventArgsを使う系のAPIは大丈夫でした。

ここらへん、APIもUWPに出せるか最小構成で検証したほうがよさそうですね。

 

ちなみに、、、つながってる状態でもDisconnectでした。

f:id:kaorun55:20160428141524p:plain

 

HoloLensのSpatial Perceptionを使うときのいろいろ

HoloLens

Spatial Perceptionを使うと、HoloLensが認識した空間をメッシュ化して、あたり判定ができるようになります。


HoloLens(エミュレーター)が認識した空間を走り回るユニティちゃん

現実空間の情報を使うため、そもそも認識した空間がどこなのか見えなかったり、開発やデバッグどうすんだ?という話があったりします。

そのあたり今の経験上でのことを書いておきます。

Spatial Perceptionの準備

Holograms 101Eのチュートリアルにもある通り、Unityで作る際には「Spatial Mapping」プレハブを入れるだけです(マテリアルの設定はありますが)。

f:id:kaorun55:20160428123847p:plain

あとCapabilityで「SpatialPerception」にチェックしましょう。

これでアプリに認識した空間のワイヤーフレームが表示されます。

f:id:kaorun55:20160428124057p:plain

どんな空間なのか?

で、どんな空間にいるのか知りたくなります。

Device Portalで「3D View」を開きます。

f:id:kaorun55:20160428124653p:plain

「Surface reconstruction」の「Update」をすると、認識した空間を3Dモデルにして表示してくれます。

f:id:kaorun55:20160428124321p:plain

これを「Save」すると空間の情報をobjファイルにしてくれます。

f:id:kaorun55:20160428124418p:plain

このobjをUnityに入れると空間情報が取り込まれるので、開発の際に利用できるようになります。

f:id:kaorun55:20160428124524p:plain

原点の位置や縮尺がわかってませんので、それを入れてあげるとよりリアルになります(Forumにあったの見たけど忘れた。。。)

 

HoloLensエミュレーターでいくつかアプリを作ってみたのでまとめる

HoloLens

HoloLensエミュレーターでいくつかアプリを作ってみたので、ドキュメントと合わせてまとめてみます。

MRアプリなのでUnityでの開発が主となります。

HoloLens(エミュレーター)が認識した空間を走り回るユニティちゃん

ユニティちゃんが自分の視線の先に向かって走ります。HoloLensの認識した空間を走るので、段差があると落ちます(上るのはできませんw)


HoloLens(エミュレーター)が認識した空間を走り回るユニティちゃん

 

 Holoportation的なやつ

KinectのデータをHoloLensに表示させることで、目の前に人がいるような感覚になります。3次元情報を送っているので、回り込んだりできます(ただし、いまは一台なので、裏は見えません)。

research.microsoft.com


Holoportation的なやつ

 

開発環境

Install the tools

Untiyでアプリを作るときは、下記のツールが必要です

  • Visual Studio 2015 Update 2
  • HoloLens Emulator
  • Unity HoloLens Technical Preview Beta 14
  • Unity用UWP Runtime(UWP書き出し)

Unityの基本設定

Unity development overview

Main Cameraの設定

  • 「Position」 「0, 0, 0」 にする
  • 「Clear Flags」 を 「Solid Color」にする
  • 「Background」を RGBAで「0,0,0,0」にする(黒の透過にすることで重ねる)
  • 「Clipping Planes」の「Near」 を0.85 (メートル)にする

f:id:kaorun55:20160428114618p:plain

MR用の設定

「Player Settings > Windows Store > Other Settings」から。

「Virtual Reality Supported」にチェック、「Virtual Reality SDKs」に「Windows Holographic」が追加される。このチェックをしなかった場合は普通のWindows付きUWPアプリになります。

f:id:kaorun55:20160428115041p:plain

Capabilities(機能)の設定

「Player Settings > Windows Store > Publishing Settings > Capabilities」から。使用する機能にチェックする。HoloLens特有のCapabilityは以下の4つ。あとはネットワークとかそういうのはアプリに合わせて

  • WebCam:写真、ビデオのキャプチャを使う場合
  • SpatialPerception:Spatial Mappingを使う場合
  • Microphone:音声認識系を使う場合
  • picturesLibrary / videosLibrary / musicLibrary:キャプチャデータを保存する場合

f:id:kaorun55:20160428115256p:plain

UWPへの出力

HoloLensのアプリはUWP(Universal Windows Platform)で作成します。一度UnityのプロジェクトをUWP用にビルドし(書き出し)てVisual Studio 2015 Update2でビルド、配置します。Unityの「Build Setting」で「Windows Store」から「Universal 10」を選択します(これがない場合には「Unity用UWP Runtime」のインストールを確認してください)。

「UWP Build Type」はどちらでも(ゲーム系はD3D、業務系はXAMLかな?)。

「Unity C# Project」にチェックを入れてビルドします。

f:id:kaorun55:20160428115545p:plain

出力先のフォルダは「UWP」にしておくと間違いなさそうです(Appにしたらほかの出力がUWPに出てうまく関連づかなかった)。

Unityからの再ビルドについて

Exporting and building a Unity Visual Studio solution

スクリプトはリンクで関連付けられているので、変更の際に再ビルドは不要です。

Unity Editor内でシーンに関連する変更を行った際には再ビルドを行います。

出力データのビルド

出力されたsln(出力先フォルダ、例えば「UWP」の下にできます)をVisual Studioで開きます。プロジェクトの設定を「x86」、実行先を「HoloLens Emurator~」にします。HoloLensはx86環境なのでx64やARMは使えません。

f:id:kaorun55:20160428120021p:plain

これで実行してビルドが通ればエミュレーターが起動します。

f:id:kaorun55:20160428120221p:plain

しばらく待つとHoloLensのOSが起動します。

f:id:kaorun55:20160428120247p:plain

さらに、もうしばらく待つとアプリが配置、実行されます。

f:id:kaorun55:20160428120338p:plain

f:id:kaorun55:20160428120346p:plain

その他雑多に

エミュレーターの起動

2GBの空きメモリが必要です。PCのメモリが16GBあるとよいでしょう。

f:id:kaorun55:20160428121334p:plain

ディスプレイ

Best practices for working with Unity and Visual Studioにもありますが、Unityで開発する際は、Unity Editor、Visual Studio(Unityのコード用)、Visual Studio(UWPビルド用)、HoloLens エミュレーターを起動します。複数ディスプレイあるとはかどります。

f:id:kaorun55:20160428121550p:plain

必要な知識

やってみると色々な知識が必要ですね。。。

  • Unityでの開発知識:Unityを使うので
  • VR、MR系アプリの開発知識:Oculus Riftなどでのアプリ開発のノウハウが使えます(ユーザー=カメラで、動きに合わせて視点が変わるので)
  • UWPの知識:最終的にUWPで出力するので、Windowsストアアプリから続くUWPの知識が必要です
  • UnityからUWPへの変換に関する知識:Unityから一度UWPへビルドしますが、その際にエラーが発生することが結構あります。例えばプラグインのDLLが使えない、コードの互換性がないなど。プラグインやアセットを使う場合には、最小構成でUWP(HoloLensエミュレーターまで持ってこられるか)まで検証すると後戻りが減ります

 

「Microsoft Innovation Day」でKinectを使った高速3Dスキャナーを展示しました

Kinect for Windows v2 実績

4/23に行われた「Microsoft Innovation Day」でKinectを使った高速3Dスキャナーを展示しました。

ms-innovation-day.jp

いままで結構な時間をかけてきたのですが、今回が初お披露目となりました。

Kinect 8台を使って1秒ほどで3Dスキャンを行います。

実際、運用してみると、いろいろ改善点が見つかっていいですね^^;

f:id:kaorun55:20160427182100j:plain

f:id:kaorun55:20160427182103j:plain

 

HoloLens Wave1の購入メール

HoloLens

f:id:kaorun55:20160419093547p:plain

HoloLens Wave1の購入メールがきました。

10日以内に決済、その後に発送のようで、そう遠くないところで手に入りそうな感じです。

詳しいところはこちらをどうぞ

c-mitsuba.hatenablog.com

「HoloLens Development Edition」と開発版ではありますが$3,000(約36万円)といいお値段なので、僕のほうもぜひ体験、講演、執筆、開発などのご依頼をいただければと思います!