随時更新
目次
HoloLensとは
HoloLensで何ができるの?
狭いって言われている視野角は実際どんな感じ?
どんな方面での利用を期待されているの?
HoloLensのゲームってどんな感じ?
Windows Holographicプラットフォームで未来の働き方はこうなる
複合現実 (MR) の幕開け -Windows Holographicをパートナーに公開
https://blogs.windows.com/japan/2016/06/01/opening-windows-holographic-to-partners-for-a-new-era-of-mixed-reality/
開発環境の構築
Windows 10 Pro(HomeはHoloLensエミュの動作にHyper-Vが必須のため不可)
- 4コアのCPU
- メモリ8GB以上
- BIOSがHAV、SLAT、DEPをサポート
- GPUがDirectX 11以上、WDDM 1.2 driver以上サポート(エミュレーターの動作に関係)
- システムでHyper-Vを有効にできる
>> Install the tools
https://developer.microsoft.com/en-us/windows/holographic/install_the_tools
上のページの指示に従い次の3つをセットアップ
- Visual Studio 2015 Update 2
- Unity HoloLens Technical Preview Beta 10
- HoloLens Emulator
詳細については次のサイトをご参照ください:)
>> HoloLensのエミュレータを起動し、Unityでアプリを作るまでの手順メモ – Cross Road
http://magicbullet.hatenablog.jp/entry/HoloLensEmulator
>> HoloLens Emulator エミュレータの準備と DEP6100 エラーの対処 – tech.guitarrapc.cóm
http://tech.guitarrapc.com/entry/2016/04/11/070745#環境準備
開発
HoloLensドキュメント
https://developer.microsoft.com/en-us/windows/holographic/documentation
HoloLensハードウェア詳細
https://developer.microsoft.com/en-us/windows/holographic/hardware_details
https://en.wikipedia.org/wiki/Microsoft_HoloLens
OSはWindows 10でこれ自体がスタンドアローンなコンピュータ。
バッテリーは2-3時間。スタンバイモードで2週間。充電しながら使える。
CPUはIntel 32bit、Custom-built Microsoft Holographic Processing Unit (HPU 1.0)というもので詳細は不明。
容量は64GBにメモリは2GB。
重さは579g。
インターフェース
- 内臓スピーカー
- 3.5mmイヤフォンジャック
- ボリューム調整、輝度調整、電源ボタン
- Wi-Fi 802.11ac
- Micro USB 2.0
- Bluetooth 4.1 LE
HoloLens Clicker
Bluetooth接続のHoloLens用コントローラ [URL]
ジェスチャー操作のうち、clickとscroll操作ができる。
bloom、resize、moveジェスチャーは行えない。
指に通して使う。Micro USB接続で充電可能。バッテリーは通常の使用で2週間持つ。
Bluetooth キーボード
US配列のBluetoothキーボード。おススメはもちろんMicrosoft Designer Bluetooth® DesktopかMicrosoft Universal Foldable Keyboard
Bluetoothのプロファイルは HIDとGATTに対応。オーディオやファイル転送には対応していない。
Bluetoothのプロファイル的にはマウスには対応しているものの、現在のシェルではサポートされていない(クリックとか、注視カーソル(Gaze Tracking)をマウスカーソルちっくに動かすような感じにはなっていないということっぽい) [URL]
>> bluetooth®各プロファイル説明 | 製品案内 | 株式会社プリンストン
http://www.princeton.co.jp/product/bluetooth_profile.html
センサ
- 1 IMU(慣性測定ユニット、モーションセンサ)
- 4 environment understanding cameras(位置推定に使う多視点の環境理解カメラ)
- 1 depth camera(Depthカメラ)
- 1 2MP photo / HD video camera(2メガピクセルのHD(720p) 1280×720のカメラ)
- Mixed reality capture(視界をキャプチャしてホログラフィックと合成して出力するもの?)
- 4 microphones(マイク)
- 1 ambient light sensor(環境光センサ)
入力について
ユーザーからの入力として使用できるものとしては、向いている方向の中心を示す注視カーソルと、ハンドジェスチャー、音声入力、HoloLens Clickerからのクリックとスクロール操作、Bluetooth接続したキーボードでの文字入力が現状では使用できる。
- Spatial sound(空間音響、3D音響)
- Gaze tracking(視線追跡、向いている方向の中心を示す注視カーソル)
- Gesture input(ハンドジェスチャー)
- Voice support(音声入力)
注視カーソル
チュートリアル Chapter2 – Gaze
普通にUnityのPhysics.Raycastを使って、カメラの向きでRayを飛ばして取得。
ハンドジェスチャー
HoloLens前面のカメラのジェスチャーフレーム内にある手を認識。特定の手のポーズ、指の動きで入力ができる。
またHoloLens Clickerにより一部のクリックとスクロースの操作を行うことが可能。(ClickerはBluetooth接続なのでHoloLensのジェスチャーフレーム内になくてもOK)
>> Gestures
https://developer.microsoft.com/en-us/windows/holographic/gestures
ホログラフィックを選択、クリックする
手で認識されるポーズは、”the ready state” 準備完了状態(人差し指を上にして手の甲をHololensに向ける)と、”the pressed state” 押された状態(人差し指を曲げた状態)を認識。
注視カーソルで対象を選択して、ハンドジェスチャーで人差し指を曲げて選択はair-tap gesture
戻る操作
Androidアプリとかであるような戻る操作はBloom、咲く。
手のひらを上に向けてグーからパーに。花が咲くような感じのジェスチャー
ホログラフィックアプリで推奨されるハンドジェスチャーの実装について
https://developer.microsoft.com/pt-BR/windows/holographic/gestures#Gestures
Hold(ホールド)
Pressで長押し的な操作。
Manipulation(操作)
Pressでドラッグアンドドロップ的な操作。Pressしたまま手を動かして対象を移動したりスケールを変えて大きさを操作したり。
空間に浮かぶ操作パネルUI
>> Gesture design
https://developer.microsoft.com/en-us/windows/holographic/gesture_design
Unityでの実装方法
チュートリアル Chapter 3 – Gestures
GestureRecognizer クラスを使う
>> Gestures in Unity
https://developer.microsoft.com/en-us/windows/holographic/gestures_in_unity
開発リソース
Holographicアプリ開発Unityパフォーマンスガイド
https://developer.microsoft.com/en-us/windows/holographic/performance_recommendations_for_unity
快適さや消費電力を抑えるためにFPS60。たとえ下回ったところでVRHMDのように酔うことはないが重要。
以下適当に抜粋
具体的な設定としてQuality SettingsでFastestを設定。合わせてPlayer SettingsでShader関係の設定。
実装ではGCを抑える。LINQやラムダ、foreachを避けて構造体やフラットな1次配列を使う。
表現上Idleアニメーションは負荷が高いため避ける。
Unityで実装する際は最初に表示する軽いシーンを用意して、本体のシーンをSceneManager.LoadSceneAsyncでロードする。
HoloLensアプリケーション開発のチュートリアル
Holograms 100 UnityでHoloLensのホログラフィックアプリを作る超基本編
https://developer.microsoft.com/en-us/windows/holographic/holograms_100
0からUnityでホログラフィックアプリを作るチュートリアル。UnityでのProject Settingsの各種設定、シーンにカメラとキューブを配置した簡単なものをVisual Studioへエクスポート。実機へのWi-FiやUSBでのデプロイ手順、エミュレーターで実行するまでの一通りの手順についての説明。
Holograms 101 UnityでHoloLensのホログラフィックアプリを作る基本的な入力を使ってみよう編
用意されたOrigamiサンプルプロジェクトに手を入れていくStep by Stepチュートリアル。
Chapter1ではシーンへカメラや用意された3Dモデルオブジェクトのプレハブを配置し、Visual Studioへ転送して確認して、一通りのHolographicアプリ開発の流れがわかる。
Chapter2では向いた方向に注視カーソルが表示されるGaze trackingの使い方。Chapter3はGesture(ハンドジェスチャー)。Chapter4はVoice(音声入力)、Chapter5はSpatial sound(空間音響)、Chapter6はSpatial mapping(空間マッピング)
エミュレーターで動かす方はこちら
https://developer.microsoft.com/en-us/windows/holographic/holograms_101e
実機で動かす方はこちら
https://developer.microsoft.com/en-us/windows/holographic/holograms_101
Holograms 210 視線入力の発展
https://developer.microsoft.com/en-us/windows/holographic/holograms_210
Holograms 211 Gestures(ジェスチャー)
https://developer.microsoft.com/en-us/windows/holographic/holograms_211
Air-TapのPressedのみのサンプル
Holograms 212 Voice input(音声入力)
https://developer.microsoft.com/en-us/windows/holographic/holograms_212
Holograms 220 Spatial sound(空間音響)
https://developer.microsoft.com/en-us/windows/holographic/holograms_220
Holograms 230 Spatial mapping(空間マッピング)
https://developer.microsoft.com/en-us/windows/holographic/holograms_230
Unityでholographicアプリ作成の基本設定
>> Holograms 100
https://developer.microsoft.com/en-us/windows/holographic/holograms_100
Unityのプロジェクトを3Dで作る
Main Cameraの設定を変更する
- Position Reset
- Clear FlagsをSkyboxからSolid Colorへ
- Backgroundを真っ黒(RGBA 0,0,0,0)へ
- Clipping Planesを0.3から0.85へ
Build SettingsでPlatformをWindows Storeへ切り替える
- SDKをUniversal10へ
- UWP Build TypeをD3Dへ
- Unity C# ProjectsをONへ
Player SettingsのVirtual Reality SupportedでWindows Holographic SDKを追加
(オプション) 適宜アプリから使用を許可する機能を選択。ミュージックライブラリとか写真・動画フォルダとか、WebカメラとかBluetoothとか
Holographicアプリでパフォーマンスを稼ぐために必須な設定
Quality SettingsでWindows StoreアプリをリアルタイムなライトOFF、影OFF、アンチエイリアスOFFな徹底的に簡易表示化するFastest設定をデフォルトにする。
Visual Studioのソリューションをエクスポート
Buildを押してプロジェクトルートにAppフォルダを作ってフォルダを選択
エクスポートが終わったらAppフォルダが開くので、プロジェクト名.slnを叩いてVS起動
ちなみにUnityプロジェクトルートの.slnではない。Appフォルダ直下の.sln。間違えてUnityプロジェクトのslnを開くと、Package.appxmanifestが見当たらないし、Visual Studio上でHoloLensシミュレーターが選べない。
アプリをWindows.Holographicにターゲット設定する
Package.appxmanifestを開いて
- TargetDeviceFamily を Windows.Universal からWindows.Holographic へ
- MaxVersionTested を10.0.10240.0から10.0.10586.0 へ
※もしPackage.appxmanifestが見当たらない場合は、誤ってUnityプロジェクトのソリューションファイル(sln)を開いているので、先ほどの手順でAppフォルダ以下にエクスポートしたVisual Studioのソリューションファイルを開く。
エミュレーターで実行して確認する
ビルドターゲット設定を、Release、x86、HoloLens Emulatorを選択して実行
Retry
しばらく待っているとHoloLensエミュレーターが起動。
またしばらくすると先ほど実行したUnityのプロジェクトが自動的に起動
HoloLens EmulatorのHelpについてはこちら[URL]
- WASDかXboxコントローラーの左スティックで前後左右のFPS移動。
- マウスドラッグか矢印キー、またはXboxコントローラーの右スティックで向き変更。
- Air-tapジェスチャーは右クリックかEnterかXboxコントローラーのAボタン
- BloomジェスチャーはWindowsキーかF2キーかXboxコントローラーのBボタン
- 掴んで移動とかスクロールは、Altキーか右クリック押しっぱなしで上下ドラッグ。XboxコントローラーではAボタン押しっぱなし
実行時に自前の空間マッピングデータ(spatial mapping)を使う
自前のルームキャプチャデータはWindows Device Portalからアップロードして使用することができる。
音声認識結果のテキストを使う
>> How do I record speech and display it as text please? — Hololens Developer Community
http://forums.hololens.com/discussion/1187/how-do-i-record-speech-and-display-it-as-text-please
英語のみ。将来HoloLensに搭載されているWindows10に日本語が入れば日本語も行けるかもしれない。
>> Holograms 212
https://developer.microsoft.com/en-us/windows/holographic/holograms_212#chapter_3_-_understanding
MicrophoneManager.csのDictationRecognizer_DictationHypothesis(string text)
HoloLensアプリをデバッグする方法
>> How to debug HoloLens apps? — Hololens Developer Community
http://forums.hololens.com/discussion/1418/how-to-debug-hololens-apps
1. Visual Studioでいつも通り release/x86/Emulatorを選択(実機はOS build 10.0.14342.1016ではダメっぽい)
2. マイコードのみを有効にする のチェックをOFF
3. デバッガーの種類で混合を選ぶ(Universal Windowsのプロジェクトのプロパティから)
4. デバッグの開始
Gazeで選択してAir-Tapクリック、スライダーをNavigation Gestureでドラッグもできる。
>> Unity UI on the HoloLens – Unity3d Community
https://community.unity.com/t5/Hololens/Unity-UI-on-the-HoloLens/td-p/2597979
1. シーンにあるEventSystemオブジェクトにHoloLensInputModuleをアタッチ(HoloTookit-Unity)
※シーンにUIを配置しておらず、EventSystemゲームオブジェクトがない場合はあらかじめ適当にボタンやトグルやスライダーなど置いておく。
2. Canvasを選び、Render ModeをWorld Spaceへ、Event CameraにMain Cameraを設定。
3. このままではGUIが超デカいのでスケールを調整する。
- 文字くっきりのためにCanvas ScalerのDynamic Pixels Per Unitを10へ
- CanvasのRect Transformを上のSSのようにPos XYを0にしたりZをToggleやSlider、Buttonのサイズに合わせて3-5に設定(ボタンとかは適宜小さく。1/32(0.03125)や1/16(0.0625)とあるけど0.02にしている)
4. HoloToolkitからカーソルのPrefabを突っ込むとGood
HoloLens向けに3Dモデルデータを最適化するUnityの設定
>> Adding 3d models of Jet Engine and other complex stuff degrades hololens Performance. — Hololens Developer Community
http://forums.hololens.com/discussion/1372/adding-3d-models-of-jet-engine-and-other-complex-stuff-degrades-hololens-performance
Unityのプロジェクト設定
Player Settings: 16-bit Depth Buffersの使用
Quality Settings: Fastest
3Dモデルについて
HoloLens向けに最適化された、HoloToolkitのshaderを利用
その他最適化について
>> Performance recommendations
https://developer.microsoft.com/en-us/windows/holographic/performance_recommendations
>> Performance recommendations for Unity
https://developer.microsoft.com/en-us/windows/holographic/performance_recommendations_for_unity
最適化事例
3:45、40万ポリゴンから4000に最適化
>> BONUS: Designing for Spatial Variation | //build Canada: LIVE from Toronto | Channel 9 https://channel9.msdn.com/events/Build/Build-Tour-2016-Toronto/Designing-for-Spatial-Variation
ポリゴンを最適化するUnityのアセット
Simplygon by Simplygon http://u3d.as/5hD #unity3d
またはUnite2016でも紹介したKrabl Mesh Processorsもおすすめ
Windows Device Portal
Wi-FiやUSBで接続したHoloLensの実機やエミュレータのWebブラウザでアクセスできる管理ツール。
各種設定やログ、パフォーマンスモニタ、Virtual Inputを行うコンソールなどが用意されている。
>> Using the Windows Device Portal
https://developer.microsoft.com/en-us/windows/holographic/using_the_windows_device_portal
また、Windows Device PortalのWeb画面で操作できる内容についてはRESTのAPIが用意されている。
>> Device portal API reference
https://developer.microsoft.com/en-us/windows/holographic/device_portal_api_reference
Device Portalへのアクセス方法
>> Using the Windows Device Portal
https://developer.microsoft.com/en-us/windows/holographic/using_the_windows_device_portal
USB接続
PCとHoloLensを接続して、http://127.0.0.1:10080 に接続する
Wi-Fi接続
同一ネットワーク内にあるPCから、HoloLensのSettings > Network & Internet > Wi-Fi > Advanced Options にある http://HoloLensのローカルIP を指定して接続
Unity向けのHolographicアプリ用のホロツールキット HoloToolkit
>> Microsoft/HoloToolkit-Unity: This is effectively part of the existing HoloToolkit, but is the repo that will contain all Unity specific components.
https://github.com/Microsoft/HoloToolkit-Unity/
>> HoloToolkitのWiki
https://github.com/Microsoft/HoloToolkit-Unity/wiki
ツールキットが持つ機能は次の通り
- 入力
視線(Gaze Tracking)とジェスチャーと音声 - シェアリング
ネットワークマルチプレイ機能 - 空間マッピング(SpatialMapping)
PlaneFindingアドオン 空間マッピングによって返されたメッシュデータの面を使用できる。 - 空間音響
- ユーティリティ
コミュニティで選出されたアイデアから作られたUnity製オープンソースのHoloLensアプリケーション
>> GitHub – Microsoft/GalaxyExplorer: Galaxy Explorer is the application Microsoft is building as part of the Share Your Idea campaign.
https://github.com/Microsoft/GalaxyExplorer
ついてくるGUI
MainSceneのIntroductionFlow/Slateにアタッチされている
GalaxyExplorer\Assets\HoloToolkit\Utilities\Tagalong.cs で追従
GalaxyExplorer\Assets\Scripts\Utilities\FaceCamera.cs でLookAt
CoreSystemシーンのVolumeにアタッチされているTightTagalong.csでも可能
GalaxyExplorer\Assets\Scripts\Utilities\TightTagalong.cs
Snippet集
肝はInteractionSourceState の state.properties.location.TryGetPosition(out handPosition)
使い方は、適当なオブジェクトを作り、HandMove.csをアタッチ。
これで注視カーソルに当たったオブジェクトをドラッグして操作できるようになる。(HandMove.csのTargetLayerMaskで指定したレイヤーと同じレイヤーに属するオブジェクト)
また、デバッグ用にいろいろ確認したい場合は下の絵のようにゲームオブジェクトを置いてTransformやらを合わせる。
合わせ技で、HoloTookit-Unityに含まれるCursorWithFeedbackプレハブを突っ込むと注視カーソルの表示と、手が認識されているかどうかがわかってGood
あと、注視カーソルのHold状態の可視化や、掴みながら首を左右方向に回転した時の移動量が足りてないので、Cameraの方向を見る、TransformDirectionで良しなにやってあげるとよさそう。
ちなみにSpatialMappingが生成するメッシュのLayer32はPhysicsManager.LayerCollisionMatrixの設定にもでない、すべてに衝突判定がでるレイヤーが設定されているので、Physics.RaycastのlayerMask設定を無視するため、(((1<<hitInfo.collider.gameObject.layer) & targetLayerMask) != 0)の判定ではじいている。
開発に便利なDebug用コード
Unity上だけである程度デバッグできるようになるスクリプト。
シーンの再生でゲームビューのカメラを、シーンビューと似た感じで操作することができるようになる。
このスクリプトをMain Cameraにアタッチすることで、注視カーソルの操作がUnityのシーン再生で賄えるため、何か変更して確認するたびに、UnityでプロジェクトをエクスポートしてVisual Studioでプロジェクト再読み込み、ビルドしてHoloLens Emulator上で動作確認をしなくても良くなる。(注視カーソル関係のみの場合)
または\HoloToolkit\Utilities\Scripts\ManualCameraControl.csを使う。
謝辞
HoloLens体験の機会を頂いた中村薫さん@kaorun55に特大の感謝を!
合わせて読みたい
HoloLensまとめ – Natural Software
http://www.naturalsoftware.jp/entry/2016/05/14/183430
最新情報や小ネタはTwitterで配信中 @yuujii