Oculus Quest版 Virtual DesktopでUnityの実行画面をVR表示で見る

#ご挨拶と話の起こり
初めまして。ソラノアナと申します。
私は大学での研究の傍ら、VRでのゲームやツールの開発をしています。

VRでの開発をしている方ならVRHMDをPCにさして開発されている方も多いと思います。
私はUnityを基本に開発しているので、開発したシステムの動作やデバッグ作業などはPlayボタンからちょこちょこ実行画面を確認しつつ行っています。
しかし、先日購入したOculus Questはスタンドアローンなのでビルドをかけて本体にapkファイルを書き込んでインストールして…
軽い気持ちでのデバッグや動作確認ができないことが大変ストレスに感じます。
そんなときに下のサイトでVirtual DesktopなるアプリでSteamVRを遊べることを知りました。
> reddit - Virtual Desktop is very cool. Easily run Steam VR Game on Oculus Quest wirelessly.
[link]https://www.reddit.com/r/OculusQuest/comments/by8sxi/virtual_desktop_is_very_cool_easily_run_steam_vr/

そのとき、**UnityのPlayボタンでもVR表示で行けるのでは！？？**　と思いました。
本記事を執筆している時点で、同様の内容について述べている記事や、Twitterのつぶやきが確認できませんでした。
そのために、貧乏学生の身銭を切って、血涙を流しながら本記事を執筆しております。
~~（最悪、Oculus Storeの返金でどうにかできると思ったんです）~~

本記事では、”Oculus Quest版 Virtual DesktopでUnityの実行画面をVR表示で見る”を目標にします。
#先に結論
見れます。

快適性はLAN環境にもよると思いますが、問題なくVRで見れます。
Oculus Integrationさえ入れていれば、SteamVRのプラグインをプロジェクトに入れる必要もないです。
#メリット・デメリット
まず、具体的なやり方の前に、今回の話のメリットとデメリットをまとめます。
###これができたときのメリット
 - いちいちAndroidビルドをして、Questに送って、インストールしてという動作がなくなる
 - 時短
 - 開発プロジェクト分のアプリ容量が浮く
 - Questからアプリを削除する手間が減る
 - Debugログなど、スタンドアローンVRを開発中でも実機で確認できる
 
###デメリット
 - 価格1990円（税込み）
 - Virtual Desktopのアプリ分の容量を喰う
 - PC側にVRreadyのスペックがいる
 - UXはLAN環境に依存する~~（ゲロ酔い注意）~~

メリットはこの記事のモチベーションにもなっている「ビルドが不要になる」点が大きいです。
「時短」についても副産物ではありますが、数分～数十分のビルド時間が大幅に削れます。
また、PC側のプロジェクトの実行画面を見てるだけなので、Quest側にアプリが残ることもなく、容量や削除の手間が減ります。
また、Debugログなどの確認や、InspectorビューやSceneビューの操作が可能です。

対して、デメリットはやはり価格。
貧乏学生並からすると、中古のゲーム買えるやん、ラーメン二杯食べれるやん、安い呑み屋行けるやんというお値段です。
また、メリットと矛盾しそうですが、Quest側にVirtual Desktop分のアプリ容量は必要になります。
その他、開発は低いスペックのPCでしてQuestで実行して動作を確認するというような使い方はできません。
VRとしての処理はPC側にすべて投げることになるので、最低限VRreadyのPCは必要になります。
最後に、Wi-Fi経由で動画を送るので、UX（ユーザーとしての体験）はLAN環境に依存します。
古いルーターや社内Wi-Fiなどの通信の混雑する環境ではカクカクになると考えられます。

#実際にQuestで動かすまで
実際に動かす話です
細かいインストールなどの話は先人が以下のサイトで詳しく書いてくださってます。
>オタ趣味ブログ - 【Oculus Quest】Virtual DesktopでSteamVRやOculusストアのPCVRゲームを遊んでみる
[link]https://otasyumi.site/vr/oculus-quest-play-pcvr-game-of-steamvr-and-oculus-store-with-virtual-desktop

ただし、私はこのサイトのやり方で詰まったところがあるので、僭越ながら注意点などを書かせていただきます。
##Virtual Desktop環境構築の注意点
私が上記のサイトで詰まったのは、「PCのデスクトップに接続する」の途中です。
私の環境では、**Steamライブラリのプレイボタンが押せない**という問題が発生しました。
正確には、押してもエラーを吐いて起動しないという状態です。
Unityの方でログから確認したところ、HMDが認識されていないとのこと。

私の開発環境では、すでにVIVEが接続されているのですが、どうやらそれが原因だったようです。
VIVEのUSBとHDMIを抜いて、PCを再起動、Virtual Desktop SteamerとSteamVRを起動しなおしたら解決しました。
その際のSteamVRは以下のような表示になっていました。
![SteamVRSteamer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/33309bbc-9a42-e3ab-73d8-69e997a903f6.png)


緑の六角形にHと書かれているのがヘッドセットで、Cの方がそれぞれのコントローラのようです。（ゲームコントローラアイコンは無関係）
この表示が正しく、他の表示の際には再度再起動や他のHMDの確認が必要だと思います。

また、試しにSteamer経由でVirtual Desktopを起動した際、Virtual Desktop Steamerが以下のような表示になる場合があります。
![統合グラフィックス環境.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/02f3ed1b-1785-83e3-3003-53136d8d10ea.png)
問題なのは下側に書いてある　Adapter: Intel(R) HD Graphics 630 の表示。
これは、VRのレンダリング処理をIntel CPU内蔵のGPU（統合グラフィックス環境）が行っているという意味です。
この場合はNvidia コントロール パネルから設定を変える必要があります。

![Nvidiaコントロール呼び出し.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/5d1a6864-c0b1-2726-58aa-7d61f73d0b2a.png)
右下のタスクアイコンからNvidiaコントロールを呼び出します。

![統合グラ選択中.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/36919eb7-15fe-7e9e-71d5-dfef8bc1bcd2.png)
3D設定の管理から、優先するグラフィックプロセッサを変更します。

![GPU選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/9c6f1939-b3c8-c5ca-7c50-a977c95405a7.png)
私の環境では高パフォーマンスNvidiaプロセッサを選択します。

![適用を忘れずに.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/14e5d05d-8f7c-88fd-4aa8-c6fc427d2d3a.png)
最後に右下の適用をクリックします。
その後、Virtual Desktop Steamerを再起動すると下のような表示になります。
![Nvidia1070環境.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/902e8e8a-d7d5-b92a-88e0-5a4184b52c83.png)

##Unityの準備
いよいよUnityでの動作を確認します。
検証環境は2019.1.6f1。
新規で立ち上げ、Asset storeからOculus Integrationだけインストールします。
簡単に動作を確認するため、Assets/Oculus/VR/Scenes/Cube.scene を開きます。
![入れたのはOculusIntegrationだけ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/50e45c7e-ca3f-8948-0a0e-38d9b2c8c628.png)

これだけでも動作しますが、検証のためにProject Settings->PC->XR Settings->Virtual Realty SDKsをOpenVRだけにします。

これで準備完了です。

##Unityの画面をOculus Questに表示してみた
さて、Virtual Desktop Steamer、SteamVRと準備が整ったら、Playボタンを押してみましょう。
すると問題なく動作するのではないかと思います。

#終わりに
今回は私のPC2台の環境で動作を確認したため、他の環境でどうなるかはわからないです。
それでもこの記事を見ていただいた方の開発の一助になればと思います。

#私について

HN：ソラノアナ
Twitter@Inanis_foramen
[link]https://twitter.com/Inanis_foramen
Github@BzLOVEman
[link]https://github.com/BzLOVEman
![10秒クオリティお絵かき.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274916/3a4eecbb-1ab9-039a-e093-e738a8d6fd49.png)