littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

【Unity 2018.2の新機能】デスクトップのUWPアプリからHolographic Remotingを呼び出す。(サンプルコード付き)

f:id:pigshape:20180609210102p:plain

Unity 2018.2の新機能である、 「Windows 10PC用のUWPアプリからHolographic Remoting を呼び出す」 を試して、無事に動作させる事ができました。

個人的にずっと待っていた機能です。

PCの高速な処理能力と 64bitのライブラリを利用したHoloLensアプリケーションの開発が可能となりました。

けどUWPです。

元のUnityのブログはこちら blogs.unity3d.com

Holographic Remotingについてはこちら。 (古い記事ですが、この一年でそんなに変化無いです)

littlewing.hatenablog.com

何ができるのか?

  • PC上でアプリの実行・レンダリングを行い、その内容をHoloLensで表示します。
  • 当然、HoloLensの動き・向きに追随して映像は変化します。
  • これまでも、UnityEditorの機能としては存在していたのですが、主にデバッグ用途だったのですが、これがビルド済みアプリからも呼び出せるようになりました。
  • 64bitビルドで動くので、アプリケーションはx86ではなく、64bit用として開発できます。(これが地味にうれしい)
  • PCとHoloを連携させたアプリが作りやすくなりそう。

動作デモ動画と解説

PC上のUWPアプリとしてCubeが回転しているだけのサンプルアプリを動かします。 左上にIPアドレス入力欄とConnect/Disconnectのボタンがついています。

f:id:pigshape:20180609204839p:plain

HoloLensではHolographic Remoting Playerを起動し、 PCアプリケーションにそのIPを入力して「Connect」を押すと、HoloLens上にCubeが回転する映像が表示されます。 「Disconnect」でHoloLensへの映像出力は停止します。

動いている様子を動画で撮影しました。

youtu.be


開発環境とサンプルコード

Unity Blogにあるように、Unity2018.2.b7を利用しました。

BuildSettingsに「Enable Mixed Reality Remoting」というcheckboxが追加されています。

f:id:pigshape:20180609205459p:plain

そしてHoloLensで動くようなSceneを作成します。 今回はMRTKは使わず、

  • Cameraの位置は(0,0,0)。背景黒・Near Clip 0.1
  • 1.5メートル先に scale0.2のCubeを設置。Constant Forceで回転

という簡単なシーンを作成しました。

その後、空のGameObjectを作成し、以下のRemoteExample.csを作成してattachします。

gist.github.com

で、上の図にあるようなUWP用のBuildSettingsでビルドしてVusialStudioのソリューションを生成します。

このコードはUnityのDocumentにあったコードを少しいじっただけです。

これを64bitアプリケーションとして「ローカルコンピューター」で実行しました。 f:id:pigshape:20180609211246p:plain

ハマったこと

最初動かなくて、困ったのですが、 以下の対応をしていたら動くようになりました。 実際の原因がはっきりわかってないのが情けないですが、、、

  1. PCにHoloLensのエミュレーターが入っていなかったのでインストールしました。

    • Unityブログのそのような記載があったため、
    • VSでの実行時に、Microsoft.Perception.Simulation.DLLが64bitじゃないという警告が出ていたから。(結局これは消えませんでした)
    • HoloLensのエミュレーターのインストール・再起動後、Unityのtoolbar のWindowのメニュー構成が変わりました。Holographic EmulationがXRの中に。気のせい? f:id:pigshape:20180609212158p:plain
  2. PlayerSettingsのCapabilitySettingsに全部チェックを入れた。ガバガバですみません。(どれが有効だったのか、今の所わかってません。)


動作の安定性は Unity Editor上のHolographic Emulationと同じくらいかな。

また、今までもそうでしたが、音声周りやカメラ周りの挙動は異なります。

Known Limitations Speech (PhraseRecognizer) isn’t currently supported via Holographic Remoting and instead intercepts speech from the Editor-hosted machine.

PhotoCapture can be performed during Holographic Simulation, but since the capture works via a local camera (such as a webcam), you won’t be able to retrieve a matrix with TryGetProjectionMatrix or TryGetCameraToWorldMatrix.

During Remoting, all audio on the hosted PC (not just that from the app) will redirect to the device. (Unity blogより引用)

ただ、今までのUnity Editor上でのRemoting はUWPではなく、Windows StandAloneのコードが動いていたのですが、UWPビルド後なので、当然UWPのコードが動きます。ここは違いがありますね。


終わりに

待ちに待った機能です。やったー

PCの高速GPU処理や64bitライブラリの恩恵を受けられるアプリケーションをいろいろ試してみたいと思います。