2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UE4.21で追加されたWindowsMixedRealityのサポートについて

Last updated at Posted at 2018-12-17

HoloLens Advent Calendar 2018の17日目です。

UnrealEngine4.21.0より、WindowsMixedRealityHeadset(以後WinMRと表記)がネイティブサポートされました。
今まではUE4でWinMRのデバイスを使うとなると、
Windows Mixed Reality for SteamVR on Steamを使ってWinMRデバイスをSteamVR経由で認識させて使うか、
UWP用のUE4のカスタムエンジンをビルドして使う(参考)か、の2パターンぐらいでしか使えませんでした。
(こんなUE4とWinMRの本もでてました。)

そういったちょっと特殊なことをやらないとUE4ではWinMRデバイスを使うこともできなかったのですが、最近ネイティブサポートされたので、その辺りで具体的に何ができるのか、適当に見てみようかと思います。

##環境
環境については、記事投稿時点での最新にしています。
(また、Windows Mixed Reality for SteamVR on Steamはアンインストール済みです。)

バージョン
Windows10 Windows 10 October 2018 Update Version 1809
UnrealEngine 4.21.1
VisualStudio2017 15.9.4

##公式の情報
https://docs.unrealengine.com/en-US/Platforms/VR/WMR
(情報ほぼなかった。)

##ひとまずVRテンプレートで動作確認
VRテンプレートでプロジェクトを作成します。
UE4_WinMR1.png

プロジェクトが作成できたら、まずプラグインを有効にします。
Pluginsの「Built-In」→「Virtual Reality」から「Microsoft Windows Mixed Reality」を有効にします。そして、UE4を再起動します。
UE4_WinMR2.png

「VirtualRealityBP」→「Map」→「MotionControllerMap」を開き、
MixedRealityポータルが起動している(or起動できる)状態で、VRプレビュー実行をすると、そのままWinMRデバイスでVRテンプレートがプレイできます。
UE4_WinMR3.png
UE4_WinMR4.png
UE4_WinMR5.png

MixedRealityポータルを介して、UWPのアプリが起動した状態でプレイしているような感じになっていました。
Windowsボタンからホームに戻ると、「UE4Game_WindowsMR」というUWPアプリが起動している状態になっています。
UE4_WinMR6.png

ちなみに、UWP向けのパッケージ化は相変わらずできませんが、
Windows向けにパッケージ化した実行ファイル(exe)を実行しても、同様にMixedRealityポータルからWinMRデバイスでプレイできるようになっていました。

##ブループリントから呼べるノード等
現状呼べそうなノードはこれらみたいです。
UE4_WinMR7.png
UE4_WinMR8.png

####入力以外のあれこれ

ノード 概要
GetVersionString 使用しているデバイス名(例:Samsung Windows Mixed Reality 800ZAA)を取得
IsCurrentlyImmersive 3Dアプリとして(VRモードで)実行されているかどうかを取得
LockMouseToCenter マウスポインタを画面中央に固定するかどうかを設定
ToggleImmersive 3Dアプリとして(VRモードで)実行されているかどうかを設定(3Dアプリとして実行されていない場合はMixedRealityポータルでデスクトップが表示され、Windows上で普通のWindowsアプリとして実行された状態になる)

####入力のあれこれ

ノード 概要
WindowsSpatialInput(L)TouchpadX 左手コントローラーのタッチパッド上の触れているX座標(-1.0~1.0)
WindowsSpatialInput(L)TouchpadY 左手コントローラーのタッチパッド上の触れているY座用(-1.0~1.0)
WindowsSpatialInput(R)TouchpadX 右手コントローラーのタッチパッド上の触れているX座標(-1.0~1.0)
WindowsSpatialInput(R)TouchpadY 右手コントローラーのタッチパッド上の触れているY座用(-1.0~1.0)
ノード 概要
WindowsSpatialInput(L)Menu 左手コントローラーのメニューボタン押下
WindowsSpatialInput(L)Touchpad 左手コントローラーのタッチパッド押下
WindowsSpatialInput(L)TouchpadIsTouched 左手コントローラーのタッチパッド接触
WindowsSpatialInput(L)TouchpadX 左手コントローラーのタッチパッド上の触れているX座標(-1.0~1.0)
WindowsSpatialInput(L)TouchpadY 左手コントローラーのタッチパッド上の触れているY座用(-1.0~1.0)
WindowsSpatialInput(R)Menu 右手コントローラーのメニューボタン押下
WindowsSpatialInput(R)Touchpad 右手コントローラーのタッチパッド押下
WindowsSpatialInput(R)TouchpadIsTouched 右手コントローラーのタッチパッド接触
WindowsSpatialInput(R)TouchpadX 右手コントローラーのタッチパッド上の触れているX座標(-1.0~1.0)
WindowsSpatialInput(R)TouchpadY 右手コントローラーのタッチパッド上の触れているY座用(-1.0~1.0)

VRテンプレートが何も設定せず普通に操作できるため、ある程度の部分は共通となっていました。
MotionControllerコンポーネントでのトラッキング状態取得やトリガー等の(上記以外の)入力取得は従来のものでできるようです。
UE4_WinMR9.png

##さいごに
UWP出力ができるわけでもないので、メリットとしては、
公式のUE4オンリーで、WinMRデバイスが使えるぐらいしかなさそうです。
(デバイスがOculusRiftやHTCVIVEでいい場合は特にメリットなさそう。)
ただ、デバイスとしてWinMRのメリット(外部センサーが不要、動作要求スペックが低い等)はあるので、意味はあるかなという感じです。
(トリッキーな活用法としては、従来のWindowsアプリとWinMRの3Dアプリを行き来するアプリが作れますね。)

何故か公式の情報がセットアップ方法ぐらいしかありませんでしたが、基本的に今までのVR開発の手法が使えるので、WinMRデバイスしか持っていなくてもOculusRiftやHTCVIVEに対応したコンテンツを、UE4で作れそうですね。


明日は18日目、@SatoshiSugaiさんです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?