はじめに
季節柄、ビールが美味しいと感じるようになりました。@hiroakitです。
さて、早速ですが本題に参ります。
こんな悩みはございませんか。
- 高密度・高解像度の3Dモデルがクライアント (デバイス) に表示できるか不安だ。
- プレゼン時に実物を持っていけないから代替案として3Dモデルを見せたいのにクライアント (デバイス) の描画性能の都合で見せられなくてプレゼンの妥協点となっている。
今回ご紹介するAzure Remote RenderingはAzureから高密度・高解像度の3Dモデルをクライアント (例: HoloLens 2) にビデオストリーミングするサービスです。サービスがAzureの仮想マシンで3Dモデルをレンダリングしてビデオストリーミングするため、クライアントが直に高密度・高解像度の3Dモデルを高度に処理する必要がありません。そのため冒頭のような不安や悩みが起きません。
例えば、次のGIFアニメーションは1870万 (三角形) ポリゴンの3DモデルをHoloLens 2で表示している様子です。ご覧いただくと青い雲が登場して6秒ほどで3Dモデルが表示されることがわかります。
こちらのGIFアニメーションはMicrosoftが提供しているソースコードから作成したShowcaseというアプリを動かした様子です。ですのでUnity, Visual Studio, Azure, HoloLensがお手元にあれば同じようにご体験いただけます。次に構築手順をまとめておりますのでご興味のある方はぜひご一読ください。
Azure Remote RenderingがサポートするプラットフォームはHoloLens 2とWindowsのデスクトップです。
システム要件 – Azure Remote Rendering | Microsoft Docs
構築手順
冒頭でご紹介したShowcaseアプリを動かすには以下の準備が必要です。
- Azure Remote Renderingアカウントを作成する
- Azure Remote RenderingアカウントとAzure Storageアカウントを紐づける
- Azure Remote Rendering Asset Toolで3Dモデルをアップロードする
- Unityプロジェクト「Showcase」でHoloLensアプリケーションを作成する
それでは1つずつご説明します。
Azure Remote Renderingアカウントを準備する
まず、Azure Remote Renderingアカウントを作成します。
Azure Portalの検索バーで Remote Rendering
を探します。Marketplaceの欄に表示されます。
Remote Renderingアカウントの作成フォームが表示されますので適宜ご入力ください。作成ボタンで次に進みます。
Remote Renderingアカウントの作成が完了したらアカウントのページに移動します。
次にAzure Storageアカウントのアクセス制御 (IAM) で連携させるためにAzure Remote Renderingアカウントページでシステム割り当てマネージドIDを確認します。
以下のページによるとマネージドIDが割り当てられていないことがあるため、この確認は重要です。
それではRemote Renderingアカウントのページで左のメニューにある ID
をクリックします。
遷移先のページで状態
の項目が オン
になっていることを確認します。
以上でAzure Remote Renderingアカウントの設定は完了です。後ほどの作業でこのアカウントのIDなどを入力する場面があるのですが、その点については後述いたします。
Azure Remote RenderingアカウントとAzure Storageアカウントを紐づける
続いてAzure Storageアカウントに設定を加えます。(Storageアカウントは別途ご用意ください)
Azure Remote Renderingは3DモデルをAzure Blob Storageから取得する機能を提供しています。その機能を利用するにはStorageアカウントのアクセス制御 (IAM) で先ほど用意したRemote Renderingアカウントを加えます。以下に手順を示します。
Azure Storageアカウントのページを開き、左のメニューにあるアクセス制御 (IAM)
をクリックします。
続いてロールの割り当ての追加 (プレビュー)
をクリックします。
そうすると一覧が表示されます。そこからストレージ BLOB データ共同作成者
を選び、ページ下段に位置する 次へ
ボタンをクリックします。
遷移先のページでマネージドID
を選択して メンバーを選択する
をクリックします。
右側にマネージドIDの選択
が表示されますから以下の2点を確認します。
システム割り当て
が選択されていること- サブスクリプションが意図したものになっていること
続いて下図の赤枠1点目、システム割り当て
の真下にあるドロップダウンメニューをクリックします。
一覧から Remote Renderingアカウント
を選びます。
Remote Renderingアカウントが一覧表示されるので、対象のアカウントを選択します。
以上でAzure Storageアカウントの設定変更は完了です。
次はこのストレージに3Dモデルをアップロードします。
Azure Remote Rendering Asset Toolで3Dモデルをアップロードする
手順の説明に入る前に少し寄り道するのですが、Azure Remote Renderingで描画したい場合、Azure Remote Renderingのフォーマットに変換する必要があります。その変換はMicrosoft社が提供する専用アプリケーションのAzure Remote Rendering Asset Tool
で出来ます。アプリケーションは以下からダウンロードできます。
Azure Remote Rendering Asset Toolは下図のようにAzure StorageとAzure Remote Renderingに接続してファイルアップロードや変換処理をするアプリケーションです。
そのためAzure Remote Renderingアカウントの接続情報とAzure Storageの接続情報をアプリケーションの設定画面に入力する必要があります。
Azure Remote Rendering Asset Tool
下図がAzure Remote Rendering Asset Toolの設定画面です。こちらにAzure Remote RenderingアカウントとAzure Storageアカウントの接続情報を入力します。
まずAzure Remote RenderigアカウントのアカウントID, アクセスキー, アカウントドメインを設定していきます。下図を参考にAzure Portalから入力する値を確認します。
次にAzure Storageアカウントのストレージアカウント名, アクセスキー, Blob serviceのエンドポイントを設定します。入力する値はAzure Portalで確認します。参考に下図もご覧ください。
以上の手順で入力した内容は %LOCALAPPDATA%\Arrt\config.json
に保存されます。こちらのアプリケーションはバージョンアップが発生してもそのJSONファイルを参照するので一度設定すれば継続して利用できます。設定ファイルの中身を例として掲載します。GUIで設定するのが手間な場面では設定ファイルをコピーすると楽かもしれません。
{ "arraccount": { "accountDomain": "", "availableregions": [ ], "id": "", "key": "", "regionurl": "westeurope.mixedreality.azure.com", "supportedAccountDomains": [ ] }, "cameraconfig": { "autoGlobalScale": true, "cameraInertia": 0.5, "cameraRotationSpeed": 0.5, "cameraSpeed": 2.5, "farPlane": 100, "fovangle": 90, "globalScale": 1, "nearPlane": 0.10000000149011612 }, "runningsession": "", "storageaccount": { "blobendpoint": "", "key": "", "name": "" }, "uistate": { "logModel:severityMask": 22, "modelsPage:defaultContainer": "", "modelsPage:defaultDirectory": "", "modelsPage:filterType": "JustAllowedExtensions", "sessionCreation:extendAutomatically": true, "sessionCreation:extensionMinutes": 30, "sessionCreation:leaseTime": 60, "sessionCreation:size": 2, "sessionManager:extendAutomatically": true, "sessionManager:extension": 10, "upload:defaultContainer": "", "upload:defaultDirectory": "" }, "videoconfig": { "fps": 60, "height": 1080, "width": 1920 } }
3Dモデルのアップロード
それでは3Dモデルをアップロードしていきます。
アップロードはAzure StorageにしますのでBLOBコンテナーを用意します。BLOBコンテナーはinput
,output
としますが、いずれも本稿の都合ですので名称は任意で構いません。
アップロードできるファイルのフォーマットは以下の通りです。(詳細)
- FBX (バージョン 2011 からバージョン 2020)
- GLTF/GLB (バージョン 2.x)
歯車アイコンの隣にある Upload
をクリックします。その次にUpload files
を選択します。3Dモデルによってはテクスチャを格納しているフォルダもありますが、そのようなケースではUpload directory
をクリックします。
エクスプローラーが立ち上がりますのでアップロードしたい3Dモデルを選択します。しばらくするとアップロードが完了しますので、アプリ画面内のBlob listを確認します。
3Dモデルのアップロードが完了しましたので、次はAzure Remote Renderingのフォーマットに変換します。アプリ画面内上部にある Convert
をクリックします。そうすると下図の画面に切り替わります。
New
をクリックすると下図のようになります。右側の表示領域にあるInput 3D Model
を探し右端のSelect
ボタンをクリックします。
下図の画面で変換する3Dモデルを選択します。選択するとSelect Input
ボタンがクリックできるようになりますのでクリック。
下図の画面に切り替わりましたらStart conversion
をクリックします。
しばらくすると変換が完了します。成功時には緑色のレ点が付きます。
変換処理が終わりましたのでプレビューしてみます。Render
ボタンをクリックすると下図の画面に切り替わります。画面が切り替わりましたら、右側のSession status
のところをクリックします。
3Dモデルをプレビューするにはセッションを開始する必要がありますのでStart session
をクリック。セッションが開始されるとAzureのコンピューティングリソースを使用することになりますので課金が発生します。
セッション開始に切り替わると3Dモデルを一覧から選択できるようになります。3Dモデルを選択しましたらLoad
ボタンをクリックします。しばらくすると3Dモデルがアプリ画面内に表示されます。
ロードが終わると下図のように3Dモデル (例: スミソニアン博物館のApollo 11 Command Module) が表示されます。
プレビューが終わりましたらセッションを閉じておきましょう。Session statusのところをクリックするとStop sessionのボタンがありますのでクリックしてセッションを終了します。
以上で3DモデルをアップロードしてAzure Remote Renderingのフォーマットに変換するところまでが完了しました。
次はUnityプロジェクトのShowcaseをHoloLensで動かす準備に入ります。
Unityプロジェクト「Showcase」でHoloLensアプリケーションを作成する
Azure Remote Renderingを使うアプリのShowCaseプロジェクトがあります。
このプロジェクトはAzure Remote Rendering SDKを使っています。
- https://docs.microsoft.com/en-us/azure/remote-rendering/samples/showcase-app
- https://github.com/Azure/azure-remote-rendering
GitHubでコードが公開されているので、PowerShellで以下のコマンドを実行して環境を整えていきます。
git clone https://github.com/Azure/azure-remote-rendering.git cd azure-remote-rendering git checkout -b playground 1.0.17 .\Scripts\DownloadUnityPackages.ps1
次に azure-remote-rendering\Unity\Showcase\App
を Unity Editor 2019.4.16f1
で開きます。
Unityが起動したらAzure Remote RenderingとAzure Storageの接続情報を入れます。DefaultRemoteRenderingServiceProfile
に入力項目があります。場所は以下です。
- Projectウィンドウで
Assets/Scenes/SampleScene.unity
を開きます。 - Hierarchyウィンドウで
MixedRealityToolkit
をクリックします。 - Inspectorウィンドウで
MixedRealityToolkit
コンポーネントを見つけます。 - そのコンポーネントで
RemotingHoloLens2ConfigurationProfile
が選択されていることを確認します。 Extensions
(Camera, Input, Boundaryなどが縦に並んでいるメニューにあります) をクリックします。RemotingMixedRealityRegisterdServiceProfile
が選択されていることを確認します。Remote Rendering Service
で上から5番目に位置するドロップダウンメニューでDefaultRemoteRenderingServiceProfile
が選択されていることを確認します。
次にDefaultRemoteRenderingServiceProfile
の項目に値を入力していきます。Storage Model Container
はこの記事の例ではoutput
にしています。
入力が終わったらアプリケーションをビルドします。Unity Editorの上部に Builder
のメニューがありますので、そこからBuild HoloLens 2 Client (arm64)
を選択します。出力先の指定を求められます。
アプリケーションをビルドするには以下の環境が必要です。
- Windows SDK 10.0.18362.0
- Visual Studio 2019 と Visual Studio Installerが提供する以下のコンポーネント
- C++ によるデスクトップ開発
- ユニバーサル Windows プラットフォーム (UWP) の開発
しばらくビルドに時間を要します。終了すると指定した出力先に以下のフォルダがあります。
- AppPackages\Azure Remote Rendering Showcase\Azure Remote Rendering Showcase_1.0.18.0_ARM64_Master_Test
Azure Remote Rendering Showcase_1.0.18.0_ARM64_Master.appx
がアプリケーション本体です。デバイスポータルを経由してインストールします。
アプリケーションを使い終わったら、意図しない課金が発生しないようにAzure Portalで稼働中のセッションがないか確認します。
まとめ
こちらの記事ではAzure Remote Rendering, Azure Remote Rendering Asset Tool, Showcaseアプリをご紹介しました。また、お手元の3DモデルをAzure Remote Renderingを経由してHoloLensで閲覧できる手順についてもご紹介しました。
参考資料
参考にした資料は以下の通りです。
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/overview/about
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/samples/showcase-app
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/quickstarts/render-model
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/quickstarts/convert-model
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/resources/troubleshoot#cant-link-storage-account-to-arr-account
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/samples/azure-remote-rendering-asset-tool
- https://docs.microsoft.com/ja-jp/azure/remote-rendering/how-tos/conversion/model-conversion
- https://github.com/Azure/azure-remote-rendering-asset-tool
- https://azure.microsoft.com/ja-jp/pricing/details/remote-rendering/