windows mixed reality デバイスリリース直前! ~hololens開発総集編~
TRANSCRIPT
本日のアジェンダ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
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
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 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
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