windows mixed reality デバイスリリース直前! ~hololens開発総集編~

37
Windows Mixed Reality デバイス リリース直前 ~HoloLens開発総集編~ 2017/10/15 Miyaura Takahiro @TAKABRZ1 2017/9/2 1

Upload: takahiro-miyaura

Post on 22-Jan-2018

328 views

Category:

Technology


2 download

TRANSCRIPT

Windows Mixed Reality デバイスリリース直前~HoloLens開発総集編~

2017/10/15

Miyaura Takahiro

@TAKABRZ1

2017/9/2 1

本日のアジェンダ0. 自己紹介

1.HoloLensについて振り返りMRの定義と最近のMicrosoft社の考え方

HoloLensの基本的な話

HoloLensのスペックと性能差

Windows Mixed RealityデバイスとHoloLens

2.開発ツール

Visual Studio

D3D

UrhoSharp

Unity+Visual Studio(2D/3D)

UE4+Visual Studio(2D)

2017/9/2 2

3.ライブラリMixed Reality Toolkit – Unity

MRDesignLabs

4.開発Tips(Unity+Visual Studioパターン)

HoloLens用Unityプラグイン

外部連携する際の通信

UWPとUnity混在型での開発

パフォーマンス関連

JSONどうする系。

自己紹介

2017/9/2 3

Miyaura Takahiro(@takabrz1)◦ HoloLens(2017/2~)

◦ Unity、Visual Studio…

◦ 言語:.NET系(C#,UWP)

◦ MCSD:Windows Store Apps Using C#(~2017/03)

◦大阪駆動開発メンバーでHoloLensを中心にイベントや技術調査で活動中

1.HoloLensについて振り返りMRの定義と最近のMicrosoft社の考え方

HoloLensの基本的な話

HoloLensのスペックと性能差

Windows Mixed RealityデバイスとHoloLens

2017/9/2 4

Mixed Reality

複合現実感(MR)は、物理的およびデジタル的なオブジェクトが共存しリアルタイムに相互作用する新しい環境と視覚化を生み出す、実世界と仮想世界の融合です。

- 出典元 wikipedia

1.HoloLensについて振り返りMRの定義と最近のMicrosoft社の考え方

2017/9/2 5

出典元:https://developer.microsoft.com/en-us/windows/mixed-reality/mixed_reality

Microsoft社でのMixed Realityの考え方

Computer x Environment x Human = Mixed RealityEnvironment(環境)には単純に現実世界の話だけではなく、デバイスによる現実世界から収集できる情報(空間認識、環境光、音声等、空間位置)が含まれる。このような環境からの情報とコンピュータからの情報をMixして人に認識させることをMixed Realityととらえている。

複合現実(Mixed Reality)を体験できる市販化されている装置

単体で動作するスタンドアロン型デバイス

ベースはWindows 10

シースルーによる仮想の物体と現実空間を交差して扱える。仮想の物体は現実空間の座標に固定されます。

センサーを用いて空間情報をリアルタイムで解析、仮想の物体を机に上に置く等の表現が可能

HoloLens

1.HoloLensについて振り返りHoloLensの基本的な話

2017/9/2 6

次期HoloLensHPUが2.0に。スタンドアロンでディープニューラルネットワーク(DNN)用コプロセッサを搭載予定。(環境認識力向上のため?)

HoloLensのスペックタブレットPC並みで非力。あまりパワーのある仕事はさせないほうが良い。• CPU:Intel 32 bit• Microsoft Holographic Processing Unit (HPU 1.0)• 2GB RAM (2GB CPUおよび1GB HPU)

性能差

1.HoloLensについて振り返りHoloLensのスペックと性能差

2017/9/2 7

Surface Book (i7 6600U 2.6GHz)1.0x

HoloLens (x5 Z8100 1.04GHz)0.15x

Lumia 830 (SnapDragon 400 1.2GHz)0.048x

1.HoloLensについて振り返りWindows Mixed RealityデバイスとHoloLens

2017/9/2 8

出典元:http://indiegame-japan.com/blog/2017/08/31/post-3368/

HoloLensとWindows Mixed Reality デバイスアプローチの違い

現実世界からのアプローチ:HoloLens仮想世界からのアプローチ:WinMRデバイス

デバイスの特性による得意/不得意分野はあるがMixed Realityとしてとらえた場合は大差はない。

1.HoloLensについて振り返りWindows Mixed RealityデバイスとHoloLens

特徴 Holographic Devices Immersive Devices

デバイスの例

Microsoft HoloLens Acer Windows Mixed Reality Development Edition

表示方法シースルー表示。

ヘッドセットを装着しても、物理的な環境を見ることができる。

不透明な表示。

ヘッドセットを装着した状態で物理的環境は見えない。

移動検知 回転と位置両方を検知できる6軸自由度のトラッキング

2017/9/2 9

2.開発ツール

Visual StudioD3D

UrhoSharp

Unity+Visual StudioUnreal Engine+Visual Studio

2017/9/2 10

IEやPhoto等ウィンドウを空間に複数表示。空間上の好きな位置(ex:壁紙的に絵を表示)に配置できる。ウインドウを消さない限りは同じ位置にずっと存在する。

※PCのデスクトップ上で複数のアプリを操作するイメージ

同時実行は1つまで。他のアプリは待機状態になる。現実空間全ての領域を使った3Dアプリケーションを体験できる。

※PCで最大化状態でアプリを操作するイメージ

2.開発ツールMixed Realityで作れるアプリケーションの種類排他 ウィンドウ

2017/9/2 11

Windows Mixed RealityはWindows 10を前提にしているためUniversal Windows Platform(UWP)アプリケーションとして開発

2.開発ツールVisual Studioだけで開発する

2017/9/2 12

C++で実装する3Dグラフィックス描画用API。

Direct3Dはゲームのようなパフォーマンスが重要なアプリケーションで利用される。ウィンドウ表示だけでなく全画面表示での実行も可能。

HoloLensではVisual Studioのみでの開発するパターンと、後述のUnity+Visual Studioでの開発時に出力方式を「D3D」にすることで利用可能。

Direct3D

2.開発ツールVisual Studioだけで開発する

2017/9/2 13

C#で記述可能な3D/2D用ゲームエンジン。Xamarinファミリーでクロスプラットフォーム開発対応。

ゲームエンジンとしてOSSの無償を売りにしており有償(といっても個人では無償だが)のUnityをかなり意識している。

実装については全てコーディングだがアーキテクチャはUnityライクな考え方になっている。

UrhoSharp

「X」はやっぱりXamarin?

2.開発ツールUnity+Visual Studioで開発するHoloLens(Windows Mixed Reality)開発で最も利用されている(?)方式最もノウハウがたまっている開発手法であり、後述のWindows Mixed Reality向けライブラリも充実

Visual StudioUnityを組み合わせる場合は基本的には生成されるソリューションをビルドするのみ

場合によってはVisual Studioで追加実装を行う。

Unityモバイルゲームではおなじみ(Made with Unity)

色々なプラットフォーム(Andoroid,iOS,Windows…)向けのアプリケーション開発が可能

Mixed Realityでは排他モードのアプリケーションを作成するための3Dゲームエンジン※2Dアプリケーションに変更も可能。

2017/9/2 14

2.開発ツールUnreal Engine+Visual Studioで開発するゲームエンジンの1つ「Unreal Engine」での開発ができる

非公式ではあるがUWP向けのモジュールを吐き出すことができる全ての機能がきれいに動作するわけではないため注意!

Visual Studio直接的には呼び出さないがUE側のバックエンドで呼びだされビルドを実行する。

Epic Gamesより開発されたゲームエンジンコーディングの知識がなくてもある程度アプリケーション開発ができる。

2017/9/2 15

2.開発ツール

Demo(時間があれば)

UrhoSharpで積木

2017/9/2 16

3.ライブラリ

Mixed Reality Toolkit – Unity(HoloToolkit – Unity)

MRDesignLabs

2017/9/2 17

3.ライブラリMixed Reality Toolkit – Unity

Windows Mixed Reality向けUnityアセット以前はHoloLens専用に近い設計でHoloToolkit-Unityと呼ばれていた

現在Mixed Reality Toolkit – Unityに名称変更されHoloLens以外のVRデバイスへの対応を含めて修正中(Unity-2017.2向け)

2017/9/2 18

Mixed Reality Toolkit - Unity

3.ライブラリMixed Reality Toolkit – Unity

2017/9/2 19

アーキテクチャ

3.ライブラリMixed Reality Toolkit – Unity

2017/9/2 20

Mixed Reality Toolkit

UWPと「Mixed Reality Toolkit - Unity」の中間に存在するライブラリ。提供形式はDLLやExe。基本的には言語はC++で記述されており、このライブラリを利用してUnityやUWP上ではC#で開発する形になります。

主な提供機能:空間マッピング、空間認識、Sharing、音声入力支援

Mixed Reality Companion Kit

直接アプリケーション開発で使用するライブラリではないですが、Mixed Realityの体験を支援する機能が提供されています。

主な提供機能:Holographic Remoting Host、KinectIPD等

MicrosoftのMixed Realityに関するデザインチームが手掛けるプロジェクト。

サンプルとMR探求を目的に公開されている。

Fluent Design Systemが導入されている。

公開リポジトリMRDesignLabs_Unity - MRデザイン用のベースライブラリ https://github.com/Microsoft/MRDesignLabs_Unity

MRDesignLabs_Unity_PeriodicTable - 元素記号 https://github.com/Microsoft/MRDesignLabs_Unity_PeriodicTable

MRDesignLabs_Unity_LunaModule - 月面着陸ゲーム https://github.com/Microsoft/MRDesignLabs_Unity_LunarModule

3.ライブラリMRDesignLabs

MRDesignLabsMR用のアプリケーションで便利なライブラリ群を提供

Interactable Object Dialog Bounding Box

Periodic Table of the ElementsMRDesignLabsライブラリを利用したサンプルアプリ

Lunar Module宇宙船を操作し着陸させるゲーム◦ MRDesignLabsライブラリを利用

◦ ジェスチャーチュートリアルの仕組み(Hand Coach)

◦ 両手ジェスチャーによる操作系

4.開発Tips

HoloLens用Unityプラグイン作成Tips外部連携する際の通信UWPとUnity混在型での開発パフォーマンス関連

2017/9/2 25

4.開発TipsHoloLens用Unityプラグイン作成Tips

④Unityでビルド⑤Visual Studioでビルド/デプロイ

⑥HoloLens等で実行③Unityで開発

UWPなプラグイン①UWPな開発

②Pluginsに追加

UWPとしてプラグインを作成する場合の開発

Windows Mixed Reality開発でも予めよく使う処理や、大きな機能を部品化しライブラリを作成することが可能。その際に参照するライブラリバージョンに注意が必要

4.開発TipsHoloLens用Unityプラグイン作成Tips

Visual Studioで空のUWPライブラリを作成

Unityから出力したプロジェクト

バージョンが実は違う

Visual Studioで空のUnityプラグイン作成時にUWPライブラリを作成する場合はバージョンを合わせる

4.開発TipsHoloLens用Unityプラグイン作成TipsUnity上で利用する場合

UWPのプラグインはUnity上では使えないため実装とライブラリの設定が必要

#if UNITY_EDITOR

// デバック用の処理#else

// UWPプラグインを利用する処理

#endif

C#スクリプト内での実装 Unity上のUWPプラグイン設定

エディタはチェック外す

4.開発Tips外部連携する際の通信

2017/9/2 29

必要な技術

HTTP通信 クライアント~サーバ間のリクエスト/レスポンス

WebSocket クライアント~サーバ間の双方向通信 チャット等の双方向リアルタイム性が要求される場合

Unity側で実装可能 WWWクラス UnityWebRequestクラス

Unity側で実装不可 UWPで利用できるWebSocket用アセットは存在しない UWPの標準ライブラリで提供される機能を活用

4.開発TipsUWPとUnity混在型での開発

2017/9/2 30

UnityのC#スクリプトでの開発とVisual StudioでUWP開発を組合せた場合

「UnityでC#スクリプト」と「Visual StudioでUWP開発」を組合せたWindows Mixed Realityアプリケーション開発にはスレッドのタイプを注意した実装が必要。

Unityで作成したUWPアプリケーション

APPスレッド

その他スレッド(Taskなどで別途実行)

UIスレッド

.NET/UWPライブラリ(共通で使えるもの)

UWPライブラリ(UIスレッド専用)

Unityライブラリ

AppスレッドUnity特有の機能を動作させる

ためのグループ

UIスレッドUWP特有の機能を動作させる

ためのグループ

4.開発TipsUWPとUnity混在型での開発

2017/9/2 31

使う処理によってスレッドの切り替えが必要

Unity側のライブラリはAppスレッドで動かす

AppCallBacks.Instance.InvokeAppThreadメソッドAppCallBacks.Instance.TryInvokeAppThreadメソッド

UWP側のライブラリはUIスレッドで動かす

AppCallBacks.Instance.InvokeUIThreadメソッドAppCallBacks.Instance.TryInvokeUIThreadメソッド

4.開発TipsUWPとUnity混在型での開発

2017/9/2 32

以下に関連する処理は注意

画面オブジェクトを扱う処理テキストボックスやボタンへの値設定

デバイスを使う処理カメラを操作する等

ファイルを扱う処理ファイルのI/O等

4.開発Tipsパフォーマンス関連

2017/9/2 33

パフォーマンスの考え方は一般的なオブジェクト指向言語のそれに近い

いかに余計なオブジェクトを量産せずにおとなしくメモリを使用できるようにする できるだけ計算量が少なくなるアプリケーションを目指す HoloLensに限っては電力消費量にも配慮を

4.開発Tipsパフォーマンス関連

2017/9/2 34

描画に関すること

3Dアプリについては60FPSを目指す。 多少のフレーム落ちはOK。シースルーによりVR酔いが発生しにくい。

電力消費量を極力抑える。 デバイスポータルから消費電力を確認可能。60FPSを維持しながらできるだけ

電力消費を抑えるとよい。 メモリは900MB未満

1アプリのメモリ使用量が900MB未満という制約がある。

4.開発Tipsパフォーマンス関連

2017/9/2 35

処理に関すること

できるだけオブジェクトの使いまわしをする(C#/Unity) 生成→破棄を繰り返すとGCが頻発する(GCはコストが高い)

構造体をなるべく使う(C#/Unity) C#では構造体は値型として扱われ、GCの対象外。参照を外せば廃棄。

foreachよりはforを使う(C#/Unity) foreachはイテレータによる操作が発生しコストがかかる。

LINQ、lambda式を使わない(C#/Unity) 処理コストが高い

FixedUpdateは使わない。 FixedUpdate内の処理時間によっては完了せずに次の呼出が発生

巻末参考リンク集Mixed Reality https://developer.microsoft.com/ja-jp/windows/mixed-reality

https://developer.microsoft.com/en-us/windows/mixed-reality/mixed_reality

HoloLens https://developer.microsoft.com/en-us/windows/mixed-reality/install_the_tools

Github Mixed Reality Toolkit – Unity > https://github.com/Microsoft/MixedRealityToolkit-Unity

MRDesignLabs_Unity > https://github.com/Microsoft/MRDesignLabs_Unity

MRDesignLabs_Unity_PeriodicTable > https://github.com/Microsoft/MRDesignLabs_Unity_PeriodicTable

MRDesignLabs_Unity_LunaModule > https://github.com/Microsoft/MRDesignLabs_Unity_LunarModule

HoloLensの技術系サイト Qiita(HoloLensタグ)http://qiita.com/tags/HoloLens

HoloLens技術集:https://github.com/HoloMagicians/HoloLensDevelopersLink

HolographicAcademy日本語訳:https://github.com/HoloMagicians/HolographicAcademyJP

2017/9/2 36

2017/9/2 37

大阪駆動開発

関西を中心に、IT系のおもしろそうなことを楽しんでやるコミュニティ