概要
Azure Remote Rendering - REST API を使って Azure Blob Storage にアップロードされている3Dモデル (glTF) を Azure Remote Rendering 専用のバイナリ形式 ( ArrAsset ) に変換する方法を調査したので、以下調査した内容を記事に残しておきます。
前提知識 : Azure Remote Rendering とは?
Azure Remote Rendering は Azure Mixed Reality サービスの1つで、Azure 上のハイエンドな GPU マシン ( Azure VM ) を使ってハイポリゴン ( 高品質・高精細 ) な 3D コンテンツをレンダリング、リアルタイムでローカル ( PC, HoloLens 2 ) へのレンダリング結果をストリームしてれくれるサービスです。サービスの概要とサンプルについては、過去の登壇資料 でまとめているので、気になる方はご覧ください。

Azure Remote Rendering ( ARR ) の レンダリングエンジン は、FBX
や GLTF
などの
ファイルフォーマット (拡張子) を直接処理することができないため、3Dモデルデータを
ARR 専用のバイナリ形式 ( ArrAsset ) に変換する必要があります。(※ 月 100 トランザクションまで無料で変換することが可能です。詳しい費用は 価格表 をご覧ください。 )
モデルデータの変換は、以下3種類の方法が提供されています。
(1) Azure Remote Rendering Asset Tool (ARRT) での変換方法
(2) PowerShell スクリプトを用いた変換
(3) Azure Remote Rendering REST API を用いた変換
今回は (3) Azure Remote Rendering - REST API を用いた変換 をやってみたいと思います。
Remote Rendering - REST API
Azure Remote Rendering では、以下8種類の API が提供されています。
項目 | 概要 |
---|---|
API Version | 2021-01-01 |
API Docs | https://docs.microsoft.com/en-us/rest/api/mixedreality/2021-01-01/remote-rendering |
API 一覧 | |
Create Conversion | Azure Blob Storage アカウントに保存されたアセットを ArrAsset に変換する API |
Create Session | 新しいレンダリングセッションを作成可能な API |
Get Conversion | 特定のコンバージョン (モデル変換) スタータスを取得可能な API |
Get Session | 特定のセッションのプロパティを取得する API |
List Conversions | コンバージョン ( モデル変換 ) 一覧を取得する API |
List Sessions | リモートレンダリングセッション一覧を取得する API |
Stop Session | 特定のリモートレンダリングセッションを停止する API |
Update Session | 特定のリモートレンダリングセッションの接続時間 (最大値) を更新する API |
今回は Create Conversion
API を使用して、Azure Blob Storage の 3Dデータを変換します。
Azure 構成
Azure サービスの構成は以下の通りです。

※ Azure Remote Rendering アカウントの マネージドID (システム割り当て) を有効にして、
ロールの割り当てを行う必要があります。
手順
Azure Remote Rendering アカウントを作成する
Azure Portal へアクセスして 「Remote Rendering Accounts」を検索します。

Remote Rendering Accounts ページ遷移後、[+作成] ボタンを押して
Azure Remote Rendering アカウントを新規作成します。

リソースグループ、インスタンス詳細 ( 名前、 リージョン ) を指定して
[確認と作業] ボタンを押します。

検証に成功した後 [作成] ボタンを押します。

Remote Rendering の作成が正常終了したら、以下3つをメモしておきます。
- Account ID
- Account Domain
- Access Keys ( Primary Key )
「Overview」ページ
「Settings」> 「Access Keys」 ページ
Azure Storage コンテナー を作成する
Azure Portal を開き、3Dデータ保存用の Azure Storage アカウント を新規作成します。

ストレージアカウントページに遷移後、[+作成] ボタンを押します。

プロジェクト詳細 (サブスクリプション、リソースグループ)、インスタンス詳細 (ストレージアカウント名、地域、パフォーマンス) を入力して、[確認および作成] ボタンを押します。

検証成功後、[作成] ボタンを押します。

リソースのデプロイが終わったら、ナビゲーションメニューから
[データストレージ] > [コンテナー] を選択します。

[+コンテナー] ボタンを押して、以下コンテナーを作成します。

作成するコンテナー
- arrinput ( 変換前の3Dモデルデータを保存 )
- arroutput ( 変換後の3Dモデルデータを保存 )

以上で、3D データを保存するための Azure Storage コンテナーを準備できました。
ARR インスタンス を Azure Storage にリンクする
Azure Remote Rendering インスタンス から Azure Storage アカウント へアクセスするためには、Azure Storage Account の アクセス制御 (IAM) から Azure Remote Rendering インスタンス の マネージドID へ ロールの割り当てを行う必要があります。( ※ この手順を行わないと REST API を実行した際に、権限周りのエラーが発生するので注意してください。)
まず、Azure Remote Rendering アカウントの マネージドID を有効にします。
( ※ デフォルト設定では、無効の状態 )
[Settings] > [Identity] を選択、システム割り当て済みの状態を オン に変更後、
[保存] ボタンを押します。

システム割り当て マネージドID を有効にするか聞かれるので、[はい] と答えます。

オブジェクト ( プリンシパル ) ID が割り当てられました。

次に Azure Storage アカウント へ移動し、
ナビゲーションメニューより [アクセス制御 (IAM)] を選択します。

アクセス制御 (IAM) ページに遷移した後、
[このリソースへのアクセス権の付与] > [ロールの割り当ての追加] ボタンを押します。

[ストレージ BLOB データ共同作成者] を選択後、[次へ] ボタンを押します。

メンバー設定へ遷移後、 アクセスの割り当て先] の [マネージドID] にチェックを入れ、[+メンバーを選択する] ボタンを押して、Azure Remote Rendering インスタンスの マネージドID を登録します。

メンバー追加が終わると、レビューを行い、ロールの割り当てを実行します。

これで Azure Remote Rendering の マネージドID にロールの割当を行うことができました。
※ Azure Blob Storage の アクセス制御 (IAM) よりロールの割当を行うより詳しい方法は
ストレージ アカウントをリンクする をご覧ください。
サンプルモデルの取得 と アップロード
今回は KhronosGroup/glTF-Sample-Models ( GitHub ) のサンプルを使用して検証を進めたいと思います。
サンプルリポジトリをクローンします。
git clone https://github.com/KhronosGroup/glTF-Sample-Models
今回は FOX の 3Dデータ (glTF) を ArrAsset に変換したいと思います。
Azure Portal を開き、Azure Blob Storage へ移動します。
ナビゲーションメニューより [データストレージ] > [コンテナー] を選択します。

コンテナー一覧より、[arrinput] を選択します。

[アップロード] ボタンを押して、さきほどのサンプルデータ (FOX) をアップロードします。

Azure Portal 画面からだとフォルダごとアップロードができないみたいなので、
詳細設定でアップロード先フォルダーを指定してアップロードを行います。
(配置するデータは glTF-Sample-Models/2.0/Fox/glTF/
配下のもの全てになります。)

arrinput / Fox 配下に以下3つのファイルがアップロードされていることが確認できます。

- Fox.bin
- Fox.gltf
- Texture.png
以上で、サンプルモデルの準備が整いました。
Remote Rendering REST API でモデルを変換する
それでは Azure Blob Storage にアップロードした 3Dデータ を変換していきたいと思います。
今回は Postman を使用して、Remote Rendering REST API を実行します。
REST API を実行するためには、MRAccessToken (MRトークン)
が必要となります。
この MRAccessToken
は、Azure Mixed Reality Security Token Service (STS) から取得することができます。Azure Remote Rendering リージョンごとに、STS のエンドポイントが異なるので、注意してください。
1. MRAccessToken の取得
[ GET ] : https://sts.japaneast.mixedreality.azure.com/accounts/{Account ID}/token
リクエストヘッダー
{
"Autorization": "Bear {Account ID}:{Access Key}"
}
もしくは、
{
"Authorization": "Bearer {Azure_AD_token}"
}
セキュリティの観点では後者が推奨されています。この REST API 呼び出しで返ってくるトークンが、MRAccessToken ( MR トークン )
です。
レスポンス
{
"AccessToken": "{MRAccessToken}"
}

取得したアクセストークン (赤枠部分) を元に、Create Conversion
API を実行します。
2. 3Dモデルの変換をリクエストする
[ PUT ] : https://remoterendering.japaneast.mixedreality.azure.com/accounts/{Account ID}/conversions/{Conversion Id}/?api-version=2021-01-01
リクエストヘッダー
{
"Autorization": "Bearer {Access Token}"
}
リクエストボディ
{
"settings": {
"inputLocation": {
"storageContainerUri": "https://demo20220203.blob.core.windows.net/arrinput",
"blobPrefix": "Fox/",
"relativeInputAssetPath": "Fox.gltf"
},
"outputLocation": {
"storageContainerUri": "https://demo20220203.blob.core.windows.net/arroutput",
"blobPrefix": "Fox/",
"outputAssetFilename": "Fox.arrAsset"
}
}
}
Postman で実際に API リクエストを行うと、200 Created が返ってきました。

続いて、List Conversions
API を実行してみると、
コンバージョン中のデータ一覧が返ってきました。
(※ 2~3分は status
が NotStarted
のままでした。)

3 ~ 5 分経過後、再度同様の API を実行すると、
Status
が Succeeded
と表示されました。

Azure Portal で arroutput
コンテナーを開くと、
変換後のバイナリデータ ( ArrAsset
) が保存されていることが確認できました。

試しに、ARRT ( Azure Remote Rendering Asset Tool ) を使って、
変換したモデルデータをレンダリングしてみたいと思います。

FOX
データを Azure Remote Rendering で処理することができました!
Azure Remote Rendering Asset Tool (ARRT) の使用方法は、Azure Remote Rendering Asset Tool (ARRT) の使い方 (2022.02 最新版) にまとめたので、興味がある方はこちらも合わせてご覧ください。
終わりに
無事 API で 3Dモデルを変換することができました。マネージドID や ロール割り当てはまだまだ理解できていない部分もあるので、今後はそのあたりも深堀りできると良いなと思います。最後までお読みいただき、ありがとうございました!
参考文献 / 資料
- Remote Rendering - Create Conversation | MS Docs
- ストレージ アカウントをリンクする
- 認証を構成する ← Azure Remote Rendering API 認証の仕組み
過去にコミュニティイベントで登壇した際の資料も参考になるかと思います。
トラブルシューティング
Azure Remote Rendering アカウントに適切なロールが割り当てられていない場合、以下エラーが発生します。( Error accessing connected storage account due to insufficient permission. )
