Windows MR
アプリ開発 ベストプラクティス
XVI Inc.
自己紹介
株式会社エクシヴィ代表取締役
近藤 義仁
Oculus Japan Teamの立ち上げに参画
個人でもVR/MRアプリを開発
twitter: @GOROman
同リードオーディオプログラマー
吉高 弘俊
Mikulusの音で光るヘッドホン実装
Unity/UE4プラグインを主に開発
twitter: @tyounanmoti
会社紹介
株式会社エクシヴィ
2010年創業
主な業務内容
VR/AR/MR の企画・開発・配信・コンサルティング
xvi.co.jp
本日のアジェンダ
・MR ヘッドセット移植への道
・Motion Controller をつかってみた
・質疑応答
Immersive
没入型
大事なのことは「プレゼンス」
MR ヘッドセット移植への道
デバイスの違いを知る
Oculus Rift & HTC Vive
外部センサーが必要
Windows MR Headset
センサーは不要!
Unityで開発されたVRアプリケーション
Oculus Rift/Vive用を実際にMR ヘッドセットへ移植
Unityの設定
これは簡単!!!!! と思いきや。。。
試した環境
● Mixed Reality 推奨PC
○ (GeForce GTX 1080)
● Windows Build 16299.0
● Windows Insider SDK Preview 16288
● Visual Studio 2017 Version 15.2 (26430.14) Release
● Unity 2017.2.0f1 (RC1)
Unityのカメラ
基本的にはMain Cameraが
そのままMR内のカメラとして動く
Editor 上の再生でPreviewも可能に
MR開発 落とし穴
Near Clipを約0.1未満に
できない
Near Clipとは
キャラクターの顔などが
欠けてしまう。。。
VRにとって致命的
Near Clipを0.01に設定するには…
投影行列を直接いじる
var projection = Matrix4x4.Perspective(fieldOfView, 1440.0f / 1440.0f, nearClip, farClip);
main.SetStereoProjectionMatrix(Camera.StereoscopicEye.Left, projection);
main.SetStereoProjectionMatrix(Camera.StereoscopicEye.Right, projection);
(Unity2017.2.0f2 MRTPでは表示がバグる…)
裏技
Recenterできない
Recenterできない
シーンロード時に位置リセットされる
→位置リセットするにはシーンリロードが必要
(0,0,0)をヘッドセットの位
置にできない
(0,0,0)をヘッドセットの位置にできない
TrackingSpaceTypeをStationaryに変更できない
Unity2017.2.0f2 MRTPでは修正済み!
SinglePassにできない
RenderScaleを変更
できない
RenderScaleを変更できない
UnityEngine.XR.XRSettings.eyeTextureResolutionScaleが効かない
Win32では使えてたけど、
UWPでは使えないAPI
がある
移植が必要なAPIがある
よくハマるのは…
● System.Threading.Threadがない
○ System.Threading.Tasksへ移行
● System.Net.Sockets.TcpClientなどがない
○ Windows.Networking.Sockets.StreamSockets系へ移行
● System.Console.WriteLineがない
○ System.Diagnostics.Debug.WriteLineへ移行
ASW的なのがない?
ASW的なのがない?
フレーム落ちがダイレクトに影響する
● ポジショントラッキング
● ジャダー
● …
Tips
● OculusとImmersiveヘッドセットは同時に使える
○ OculusをDisplayPort->HDMI変換して接続する
● Fall Creators UpdateではIntel HD Graphicsでも動作する
○ 60fps
○ RenderScaleが低い
○ 視野角が少し狭い
● 立体音響はMS HRTF Spatializerを使える
Motion Controller をつかってみた
Motion Controller の違い
Oculus TouchやVive Controllerとの違い
Touchのようなハンドジェスチャは難しい
インサイドアウトトラッキングのため、範囲外はトラッキングを失う!
Motion Controller
https://developer.microsoft.com/en-us/windows/mixed-reality/motion_controll
ers
Motion Controller のココがスゴイ!
机の上に立つ!!
振動が強い!!
Mixed Reality Toolkit
https://github.com/Microsoft/MixedRealityToolkit-Unity
Motion Controller を描画するには?
https://github.com/Microsoft/MixedRealityToolkit-Unity/tree/Dev_Unity_2017.2
.0
Unity2017.2.0f1(RC)
https://unity3d.com/jp/unity/beta/unity2017.2.0f1
Windows Insider SDK Preview
https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK
Motion Controller を振動させるには?
MRTKのHapticsTest.cs
エディタでは動作しない
Windows.Devices.Haptics.SimpleHapticsControllerを使っている
Motion Controller
落とし穴
Windows Insider SDK Previewを
入れてないとクラッシュ
PC Standalone向けに実行すると
クラッシュ
エディタ実行では
コントローラが描画されない
エディタ実行では
一度Homeに戻らないと
コントローラが認識されない
Motion Controller TIPS
・電池残量を見るには?
・エネループが使える
その他関連情報
https://forums.hololens.com/categories/questions-and-answers-immersive
デモ
@hecomi さんのVrGrabberを移植
https://github.com/XVI/VrGrabber
(hecomiさんgithubでもマージ済み!)
質疑応答
ありがとうございました!

Windows Mixed Reality アプリ開発 ベストプラクティス