Azure Remote Rendering の QuickStart を試してみた

#はじめに
アナウンスされて長らく、プレビューですら使えなかった Azure Remote Rendering がついに Private Preview になりました。というわけで、サクッと Quick Start を試してみます。
[Quickstart: Render a model with Unity](https://docs.microsoft.com/en-us/azure/remote-rendering/quickstarts/render-model)


#Azure Remote Rendering って何？
Azure Remote Rendering (ARR) は、高品質でインタラクティブな 3D コンテンツをクラウド上でレンダリングし、HoloLens 2 などのデバイスにリアルタイムでストリーミングできるようにするサービスです。
つまり、ゴリゴリの GPU 搭載マシンと比べれば機動性は高いけれども描画能力や演算能力で劣るような端末(タブレット PC とか HoloLens 2 みたいな…) に、高品質な 3D ホログラムを表示することができるようになるわけですね！

#とりあえず試してみよう！
Unity やらなんやらの下準備さえ済んでしまえば割とサクッといけるはずです。
~~あと一番手間がかかるのは HoloLens 2 実機の手配…。欲しいなー欲しいなー。。。~~
~~もいっこ、めっちゃ重たい 3D のモデルを作るとこも、なかなかハードルが高い、かも。絵心が欲しい~~

それではいってみましょう！

##システム要件
[このドキュメント](https://docs.microsoft.com/en-us/azure/remote-rendering/overview/system-requirements) を読んでチェックします。

- Windows 10 Version 1903 以上
- グラフィックドライバーは最新の状態に
- 可能であれば H.265 のハードウェアアクセラレーションのあるグラフィックボード
- HoloLens 2 もしくは Windows 10 搭載の PC
- 下り 50Mbps / 上り 10 Mbps 以上のネットワークの帯域幅とできるだけレイテンシーの低いネットワーク

##Azure 側の準備
Azure にアクセス可能なサブスクリプションをお持ちであることを前提として以下の手順をすすめます。（もしなかったら、[Azure のサブスクリプションを作ってから](https://azure.microsoft.com/ja-jp/free/) 試してみてください！
※もしかしたら、Preview 機能なので無償評価版だと使えないかも。

1. まずは [Azure ポータル](https://portal.azure.com/) を開き、左上の三本線のアイコンからメニューを開き、「リソースの作成」をクリックします。
![2020-04-08 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/3d8a3462-624c-989e-98d9-fa8b853dbba5.png)

余談ですが、この三本線のアイコンから始まる導線のUI、欧米では「ハンバーガーメニュー」とか言うらしいです。
2. 検索窓で "Remote Rendering" で検索して、新規作成画面に遷移します。
![2020-04-07 (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/4d143ee3-e8e4-42d6-2720-43f135045e9e.png)
![2020-04-07 (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/ff410329-b2d9-d364-9c97-db65f035fc5c.png)
3. デプロイ先のサブスクリプションを選び、"Resource Name" には任意の名前を付けます。「リソースグループ」は既存のものを選んでもいいですし、「新規作成」から新しく作っても OK。
![2020-04-07 (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/4d091799-2eec-0d55-6b8c-1fa46823072a.png)
4. "New" ボタンをクリックすると、入力した情報のバリデーションの後にデプロイが開始されます。しばらくデプロイ完了を待ちましょう！
![2020-04-07 (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/a66fe08c-0049-074b-1385-b4a8a0a82a3c.png)
5.デプロイ完了画面が出たら、「リソースに移動」をクリックし、デプロイされたばかりの ARR のブレードに移動します。
![コメント 2020-04-08 001627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/83f16f37-549c-db70-6ff1-5fbd71f90378.png)
6.開いた画面から、"Account ID" と "Account Domain" をどこかにメモします。そのうち使います。
![コメント 2020-04-13 124138.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/090a474e-cbf3-e6ee-7936-51ebf44aed39.png)
7.同じ画面で、"Access Keys" ボタンを押し、Primary Key をクリップボードにコピーして、どこか自分にしかわからないところにメモしましょう。これもそのうち使います。
![2020-04-07 (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/d59f798b-bdd6-158e-8325-ac32e2eeb657.png)

##開発環境のセットアップ
とりあえず以下の要件を満たすようにセットアップ。

- [Windows SDK 10.0.18362.0](https://developer.microsoft.com/windows/downloads/windows-10-sdk)
- 最新バージョンの[Visual Studio 2019](https://visualstudio.microsoft.com/vs/older-downloads/)
- [Git](https://git-scm.com/downloads)
- Unity 2019.3.1
    - [ここ](https://unity3d.com/get-unity/download/archive) からバージョンを指定してダウンロードするのが多分一番楽。
    - インストールするときに Universal Windows Platform (UWP) のビルドサポートと Windows Build (IL2CPP) のサポートの追加を忘れずに。

##QuickStart のソースコードをリポジトリからクローンしてくる
「Windows キー + R キー」同時押しからの、"cmd" と入力して Enter。
![2020-04-08 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/9573779c-dc1a-3e0d-93c9-e8bf6a0ff5dd.png)

表示された黒い画面で、適当なディレクトリに移動したあとに、以下のコマンドでサンプルのソースコードをクローンします。

```
mkdir ARR
cd ARR
git clone https://github.com/Azure/azure-remote-rendering
```

こんな感じになるはず。
![2020-04-08 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/9602a4b4-432f-fc34-0bda-8f0b5c33b886.png)

##Unity からプロジェクトを開く
Unity Hub のプロジェクトのリスト画面で「リストに追加」をクリックして、先ほどクローンしたサンプルコードのディレクトリ配下の "ARR\azure-remote-rendering\Unity\Quickstart" フォルダを選択して追加します。
![2020-04-08 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/7e4fce24-a094-ab31-59b0-a37f5e51dc46.png)

##プロジェクトを開いたら初期設定から
1.まずは Project タブから、Assets -> Scenes と開き、Quickstart シーンを開きます。
![コメント 2020-04-13 123050.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/4b18de5b-bf6e-b29e-776c-38fe3a047866.png)
2.次に、Hierarchy タブから RemoteRendering ゲームオブジェクトを選択します。
![コメント 2020-04-12 224419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/ea97b45c-c19e-860c-a63a-ded8f516d8b4.png)
3.Inspector 内で、Remote Rendering のアカウント情報を入力します。ちょっと前にメモしたやつです。
![コメント 2020-04-12 224309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/31bf47ba-5318-2074-045a-cf127f7a6c02.png)
※と言いつつ Account Domain はポータルに表示されているやつじゃうまくいきませんでした。"eastus" とか、ARR のデプロイ先のリージョン名を頭につける必要がある模様。

[ドキュメント](https://docs.microsoft.com/en-us/azure/remote-rendering/reference/regions) を見る限り、今のところは下記のいずれかになるようです。

| Region Name | Region | Account Domain|
|:-----------|:-------|:--------------|
| West US 2 |	westus2	| https://remoterendering.westus2.mixedreality.azure.com |
| East US |	eastus | 	https://remoterendering.eastus.mixedreality.azure.com |
| West Europe |	westeurope |	https://remoterendering.westeurope.mixedreality.azure.com |
| Southeast Asia | 	southeastasia | 	https://remoterendering.southeastasia.mixedreality.azure.com |

##さあ動かしてみましょう！
ここまできたら、 Unity のエディタ上部の Play ボタン（お馴染み再生マーク）を押せば起動するはずです。
![2020-04-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/45a94cdc-03e6-0bc3-df0a-38e44d4256e6.png)
真っ黒い画面に、Session ID などが出てきて、"Session status" に "Starting" と出てたらきっと大丈夫。ARR のインスタンスが立ち上がっているところなので、しばらく待ちましょう。

そのうち、エンジンっぽいものが表示されます。こいつが Azure 上のレンダリングサービスで描画されて、その結果だけが Unity のエディタに表示されているというわけですね！
![2020-04-12 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/8420bd90-080f-2f16-1e39-6cf37c867e58.png)

ちょっとエンジンがはみ出してて気持ち悪いなーと思ったら、MainCamera の Transform の Position を Y 軸方向に 0.2、Z 軸方向に -0.5 くらいずらすと、大体綺麗に収まると思います。
![2020-04-12 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/6abd23bf-aca5-7f53-e17f-bde6b3c1109b.png)

これで動作チェック完了です！

#まとめ
この後の手順としては、HoloLens 2 で見られるようにアプリをビルドしたり、Windows PC 用にアプリをビルドしたり、ということがありますが、それはまたの機会に！あと、自前の高精細なモデルもクラウドに上げてレンダリングしてみたいところですが、そんな重たそうなモデルを準備するところが大変なのでどうしたものか…。

いずれにせよ、クラウド上で高精細な 3D モデルのレンダリングが可能になるってことは、高フレームレートと高精細さを両立したい時に、使える選択肢となるのではないでしょうか。