本日はAzure枠です。
Azureはチュートリアルやイベント等で何度か触ったことがあるものの自発的に触ることはなかったので、勉強して自分の言葉でまとめます。
今回は前回に続いてAzure Remote Renderingを調査します。
〇サンプルプロジェクトをHoloLens 2にデプロイ
前回作成したサンプルプロジェクトをHoloLens 2にデプロイします。
①Unityの[BuildSetting]を開きプラットフォームをUWPに変更し、ビルドします。

②ビルドが完了するとソリューションファイルが作成されます。

これをHoloLens2実機にデプロイします。
〇実機で確認
実機でも同様にモデルを表示できました。
〇モデルの変更
サンプルモデルでは機械の3Dモデルが表示されましたが、ここを自身の3Dモデルに変更します。
今回は次の人体の3Dモデルを表示します。
・モデル情報

今回はとりあえずモデルを変更することが目的だったのでポリゴン数はリッチですが、マテリアルや稼働に関しては考慮しないモデルを使用しました。
・ポリゴン数:1738160ポリゴン(=170万ポリゴン)
モデルのソースは以下の記事にあります。
ここからは以下のドキュメントを基に進めていきます。
〇ストレージアカウントの作成
① Azure のポータルへ移動し新しいリソースを作成します。

②ストレージアカウントを追加します。アカウント作成画面で詳細の設定を行います。

[リソースグループ]にARR_Tutorialという名前の新規リソースを作成します。
[ストレージ アカウント名]にオリジナルの名前を付けます。この名前は他の開発者などが同名のストレージを使用している場合使用できません。(唯一無二である必要があります。)
③[確認及び作成]を選択します。

デプロイが始まり完了すると[リソースへ移動]が押せるようになります。

〇BLOB ストレージの作成
〇BLOBストレージとは?
BLOB=Binary Large OBject はデータベースで用いられるデータの型で任意のバイナリデータを格納するためのストレージです。
RemoteRenderingで自身のモデルを表示するためには入力用、出力用の2 つの BLOB コンテナが必要です。
Azure ポータルのサイドバーにある[Blob Service]から[コンテナー]を選択します。

[+コンテナー]ボタンを選択し新規のコンテナーを追加します。

新しいコンテナーの設定は次のようにします。
・[名前]=arrinput
・[パブリック アクセス レベル]=プライベート
これが入力用のコンテナーになります。次に出力用のコンテナーを作成します。
入力用同様[+コンテナー]から新規のコンテナーを作成し次のように設定します。
・[名前]=arroutput
・[パブリック アクセス レベル]=プライベート
これで入力用、出力用の二つのコンテナーが作成できました。

〇変換を実行する
〇arrconfig.jsonの設定
Azure Remote Renderingではアセット変換サービスの呼び出しを簡単にするため、ユーティリティスクリプトが用意されています。
これはARR\azure-remote-rendering\Scriptsのarrconfig.jsonというファイルから構成を読み取ります。
arrconfig.jsonを開くと次のようになっています。
{
"accountSettings": {
"arrAccountId": "<fill in the account ID from the Azure Portal>",
"arrAccountKey": "<fill in the account key from the Azure Portal>",
"region": "<select from available regions: eastus, westeurope, westus2, southeastasia>"
},
"renderingSessionSettings": {
"vmSize": "<standard or premium>",
"maxLeaseTime": "<hh:mm:ss>"
},
"assetConversionSettings": {
"resourceGroup": "<resource group which contains the storage account you created, only needed when uploading or generating SAS>",
"storageAccountName": "<name of the storage account you created>",
"blobInputContainerName": "<input container inside the storage container>",
"blobOutputContainerName": "<output container inside the storage container>",
"localAssetDirectoryPath": "<fill in a path to a local directory containing your asset (and files referenced from it like textures)>",
"inputFolderPath": "<optional: base folderpath in the input container for asset upload. uses / as dir separator>",
"inputAssetPath": "<the path to the asset under inputcontainer/inputfolderpath pointing to the input asset e.g. box.fbx>",
"outputFolderPath": "<optional: base folderpath in the output container - the converted asset and log files will be placed here>",
"outputAssetFileName": "<optional: filename for the converted asset, this will be placed in the output container under the outputpath>"
}
}
[resourceGroup]、[blobInputContainerName]、[blobOutputContainerName]をそれぞれ次のように変更します。
"resourceGroup": "ARR_Tutorial",
"blobInputContainerName": "arrinput",
"blobOutputContainerName": "arroutput",
[storageAccountName]は作成したストレージ名を指定します。
[localAssetDirectoryPath]には変換したいモデルがいるディレクトリを指すように変更します。ここで指定されるパスには[inputFolderPath]によって指定されたBLOBコンテナーにアップロードされます。
[inputAssetPath]にはアップロードするモデルのパスを指定します。 ここで注意点がパスの区切りは"\" ではなく "/"を使用するようです。
筆者の環境では次のようになります。
"inputAssetPath": "D:/3Dmodel//AzureRemoteRenderingModel//3DAnatomyman_Japanese_1.FBX",
変換後のモデルは[blobOutputContainerName]で指定したストレージコンテナに格納されます。このパラメータは省略可能です。
〇PowerShellのコマンドでモデルをアップロードする
①Azure PowerShallで次のコマンドを実行します。
Connect-AzAccount
実行すると下画像のようにサインインを求められます。Azureのアカウントでサインインします。

②azure-remote-rendering\Scriptsのディレクトリに移動し以下のコマンドを実行します。
.\Conversion.ps1 -UseContainerSas
実行するとファイルのアップロードが開始されます。
実行結果は次のようになります。

これでアップロードが完了しました。
変換されたモデルの Shared Access Signature (SAS) URI が作成されます。これがモデルのURLになります。
〇Unityでモデルを切り替える。
[RemoteRendering]オブジェクト[RemoteRendering]コンポーネントの[ModelName]に取得したモデルのURLを記入します。
UnityのPlayボタンで実行すると自身のアップロードしたモデルが表示されます。

以上でAzure Remote Renderingと任意のモデルのアップロードについてでした。