■NVIDIA Omniverse XR を使った AR/VRモード 出力について

■はじめに
・NVIDIA Omniverse XR を使った AR/VRモード 出力について、環境設定から実行方法について備忘録として残します
　基本的に自分用なので、記載抜けもあるかもしれませんがご了承願います

▲初投稿：2022-05-14

**！！！注意事項！！！**
・Omniverse XR 現在ベータ版につき、記載内容が今後流動的に変更する可能性があります

**■環境構築**
**■■基本構成**
NIVIDIA CloudXRサーバ側とそれをWifiや5G等の回線で繋いだデバイスのクライアント側で構成されます
![cloudxr001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/89bf72ac-2df4-190f-98e7-169d38ba1f74.png)

サーバおよびクライアント側のハードウェア要件は下記の様になります
***■■■サーバ側***
・Operating System    Windows 10 or later
・Dependencies        NVIDIA GeForce, Quadro and Tesla products with Pascal or newer generation GPUs.
・Development         Environment	OpenVR compatible application, SteamVR

***■■■クライアント側***
****WindowsVR Client****
・Operating System    Windows 7, 8, 10 or later
・Dependencies        NVIDIA GeForce, Quadro and Tesla products with Pascal or newer generation GPUs.
・Supported Devices   Vive, Vive Pro, Vive Pro Eye, Valve Index

****AndroidVR Client****

・Operating System    Android 7.0/SDK24 or later
・SoC                 OpenGL ES 3.0 or later Hardware HEVC Decoder capable of 4K @ 60hz
・Supported Devices    Vive Focus Plus, Oculus Quest, Oculus Quest 2

****AndroidAR Client****
・Operating System    Android 7.0/SDK24 or later, with Google Play Services for AR installed
・SoC                 OpenGL ES 3.0 or later Hardware HEVC Decoder capable of 4K @ 60hz
・Supported Devices	Google ARCore supported devices list(https://developers.google.com/ar/devices)

****AppleAR Client****
・Operating System    This client sample is based on Apple ARKit
・Dependencies        iOS 14.2, Xcode 12.2
・Supported Devices   Apple Augmented Reality supported devices(https://www.apple.com/augmented-reality/)

**■■アプリケーション構成**
ARモードとVRモードでは下記の様な構成が必要になります。ARモードのServer側にOmniverse XRとOmniverse Createが書かれていますが、どちらかだけで、ARモードを実行できます。今後はOmniverse XRにAR/VRモードの出力は集約されていくようです
**！！！注意事項！！！**
・iPad Client用にXR Remote というNVIDIAのツールがありますが、iPhone用は現時点ではまだリリースされていません。しかし、リリースの予定はあるようです
・ARモードでOmniverse Creatでも実行は今でもできますが、いつまでできるかはわかりません。途中でなくなる可能性もありです
・VRモードは現時点ではStemVRを利用することになっています。しかし、CloudXR対応のリリースも予定されているようです
・ARモードのAndroidについてはARCoreSDKを用いて構築するものですが、ここでその説明は省きます
![ovxr001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/67a50e55-5597-17be-ba03-2ab81d9ce8dd.png)

***■■■CloudXRサーバ側***
****事前準備****
・Windows10、Windows10サーバー、またはWindow2019サーバー以降
・NVIDIAドライバーバージョン440.97以降
・Microsoft2010年6月DirectXSDK インストール　↓ダウンロード先
　https://www.microsoft.com/en-us/download/details.aspx?id=8109
　directx_Jun2010_redist.exeをダウンロードして解凍します（これは圧縮ファイル）
　DXSETUP.exeを実行するとインストール用のGUIが表示されるので指示に従ってインストールします
![DirectX_3-500x321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/e467209b-0b7d-4d4a-5757-9126549c7f0e.png)
・VRモードを利用する場合には、↓サイトからSteam, StemVRをインストールします（初めての場合はアカウントの作成も必要）
　https://store.steampowered.com/?l=japanese

****NVIDIA CloudXR SDK インストール****
・NVIDIA CloudXR のインストール用実行ファイルを下記サイトから入手します。申し込みが必要になるので承諾されるまで少し待ちます
　https://developer.nvidia.com/nvidia-cloudxr-sdk
　承諾されたら、ダウンロード用のサイトからCloudXR-SDKの圧縮ファイルをダウンロードし、解凍します
　解凍後\CloudXR-SDK\Installer内のCloudXR-Setup.exeを実行します。インストール用のGUIが表示されるので指示に従ってインストールします
![cloudxrinst3.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/ec7f8ced-05b7-4161-03c1-fff901ec3975.png)

・ネットワーク設定でFirewallが実行されている場合、下記ポートをあけておきます
　・TCPポート 48010
　・UDPポート 47998, 47999, 48000, 48002, 48005

****NVIDIA Omniverse アプリケーション インストール****
・omniverse launcher から下記のアプリケーションをインストールします。（launcher自体のインストール、nucleusの設定については省きます）
　・omniverse XR
　・omniverse Create
　・omniverse Kit

***■■■クライアント側***
****iPad****
・AppleStoreからNVIDIA XR Remote をインストールします
　https://apps.apple.com/us/app/nvidia-omniverse-xr-remote/id1474019722
　https://docs.omniverse.nvidia.com/app_create/prod_extensions/ext_cloud-xr/client_ios.html

****VRデバイス****
・SteamVRが事前に実行できるように確認しておきます。Meta Questの場合、Oculus Link, Air LinkでCloudXRサーバと接続できることを確認しておきます

**■各モードの実行**
**！！！注意事項！！！**
・サーバとクライアントは同一のネットワークに接続しておくこと

**■■　OmniverseXRでARモード**
***■■■サーバ側***
・OmniverseXRをlauncherから起動します。AR表示させたいファイルを読み込みます
![ovxr011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/400a6a0a-815a-2bdb-fbe6-5628ec4f21c0.png)
① "XR"メニューから"TabletAR"をチェックします
② "RenderSetting"->"PostProcessing"内の"XR Compositing" をチェックします 
③ "TabletAR"タブ内の"Setting"で Setting Output Plugin で"CloudXR"を選択します
　"Start Tablet AR"ボタンを押下するとタブレットにARストリーミングが始まります
④ ③で"Start Tablet AR"ボタンを押下すると同じ事が"StartAR"アイコンをクリックすることで始まります

・iPad側でXR Remoteを事前に起動しておけばAR画像が表示されます

***■■■iPad側***
・iPadでXR Remoteを起動します
![ovxr012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/02ba88b4-6a48-5d32-97be-619908ed90fd.png)
・Show Camera View(AR)のスライドをONにするとカメラ映像と合成されたAR画像が表示されます。
　OFFだとAR画像だけを表示させることができます
・"Connect"ボタンを押下すると画面が切り替わります
![ovxr013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/37b14de2-e49c-1078-729c-4d9099881a04.png)
・Show Camera View(AR)をONにするとカメラ画像の中にメッシュが表示されるのでそこをクリックします。するとAR画像がそこに表示されます

**■■　OmniverseCreateでARモード**
***■■■サーバ側***
・OmniverseCreateをlauncherから起動します。AR表示させたいファイルを読み込みます
・メニューバーの"Windows"メニューから"Extentions"をクリックします
![ovxr030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/863eb8ec-8080-fe39-9c39-86642dffeaec.png)
・Extentionsの中から"AR TABLET EXPERIENCE"を探します。そこのスライドをONにして"ENABLED"にします。"Windows"メニューの中に"XR"が追加されます
![ovxr032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/ef51ced7-1108-2986-7238-b2dfc3b91735.png)
① "Windows"メニューから"XR"->"TabletAR"をチェックします
② "RenderSetting"->"PostProcessing"内の"XR Compositing" をチェックします 
③ "TabletAR"タブ内の"Output Setting"で Select Output Plugin で"CloudXR"を選択します
　"Start Tablet AR"ボタンを押下するとタブレットにARストリーミングが始まります
④ ③で"Start Tablet AR"ボタンを押下すると同じ事が"StartAR"アイコンをクリックすることで始まります

※iPad側は上記と同じなので省略します

**■■　OmniverseXRでVRモード**
***■■■サーバ側***
・OmniverseXRをlauncherから起動します。VR表示させたいファイルを読み込みます
![ovxr022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/f2837d6b-87e0-aa49-f5bd-df93d48f7d55.png)
① "XR"メニューから"VR"をチェックします
② "RenderSetting"->"PostProcessing"内の"XR Compositing" をチェックします 
③ "VR"タブ内の"Output Settings"で Select Output Plugin で"SteamVR"を選択します
　"SteamVR"ボタンを押下するとVR出力が始まります
④ ③で"SteamVR"ボタンを押下すると同じ事が"StartVR"アイコンをクリックすることで始まります

・正常にVR出力が始まるとVRデバイスに見えている画面が表示されます
![ovxr007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224568/0f1e2250-9e0b-68c9-a365-5671249f269c.png)

***■■■VRデバイス側***
・SteamVRを起動します。正常に接続が出来ればVR映像が表示されます
※詳細は個別のデバイスによるので省略

**■参考**
・NVIDIA Omniverse XR Document
https://docs.omniverse.nvidia.com/app_omniverse-xr/app_omniverse-xr/overview.html
・NVIDIA Omniverse Create Document
https://docs.omniverse.nvidia.com/app_create/app_create/overview.html
・NVIDIA Omniverse XR Remote Document
https://docs.omniverse.nvidia.com/app_create/prod_extensions/ext_cloud-xr/client_ios.html

・NVIDIA CloudXR SDK
https://developer.nvidia.com/nvidia-cloudxr-sdk
・NVIDIA CloudXR Document
https://docs.nvidia.com/cloudxr-sdk/index.html
・NVIDIA CloudXR User Manual
https://docs.omniverse.nvidia.com/app_create/prod_extensions/ext_cloud-xr/settings.html
・NVIDIA CloudXR Firewall Settings
https://docs.omniverse.nvidia.com/app_create/prod_extensions/ext_cloud-xr/firewall.html
・NVIDIA Omniverse Streaming Client
https://docs.omniverse.nvidia.com/app_streaming-client/app_streaming-client/overview.html
・NVIDIA Omniverse Connect
https://docs.omniverse.nvidia.com/con_connect/con_connect/overview.html

・Qiita(KSxRDevelop)　・・・　その他の情報は[こちら](https://qiita.com/KSxRDevelop)