Azure Remote Rendering用のアセットを作る

  • April 25, 2020
  • d_yama
  • Azure

mixpaceと連携させてみた

先日public previewで公開されたAzure Remote Rendering(以下、ARR)について、mixpaceでもARR用のアセットを作るコンバータのプロトタイプを作ってみました。

mixpaceはCADやBIMといった3DデータをコンバートしてHoloLens 2やiPad上のクライアントアプリで閲覧できるサービスなのですが、コンバート後のファイルフォーマットとしてGLBを採用しています。ARRではアセットを作るためのデータソースとしてFBX、glTF、GLBをサポートしているのでmixpaceにとっては都合が良いです。

ARR用のアセットを作るための方法として、サンプルプロジェクトのリポジトリにてPowerShellスクリプトが公開されています。中身をみると分かるのですが、ARR用のアセットへのコンバートはREST APIを叩くだけで実行できます。

今回はARR用アセットの作り方を少し紹介したいと思います。

ARR用アセットへのコンバート

コンバートの手順はざっくり以下の通りです。

  1. Blob Storageを用意する
  2. Blob Storageにソースファイルをアップロードする
  3. コンバートジョブをトリガーするためREST APIをたたく
  4. コンバートジョブの進捗を確認するためREST APIをたたく

Blob Storageを用意する

Azure Storage Accountを準備すればOKです。StorageV2でもBlob Storage onlyでもどちらでも大丈夫です。

Blob Storageにソースファイルをアップロードする

方法は問いません。Storage Explorerからアップロードしてもいいし、REST APIからアップロードしてもOKです。

ドキュメントをみると、入力となるソースファイルを格納するコンテナと出力となるARR用アセットを格納するコンテナを用意するように書いてありますが、同じコンテナにしても問題ありません。

コンバートジョブをトリガーするため、REST APIを実行する

アクセストークンの取得

model conversion REST APIにアクセスするためにはアクセストークンが必要となります。アクセストークンは専用のエンドポイントが用意されているのでそちらから取得できます。アクセストークン取得のためにはARRのAccountIDとAccess Keyが必要となります。(確認方法はこちらのキャプチャを参考に


  • ドメイン
    • sts.mixedreality.azure.com
  • エンドポイント
    • accounts/{ARRのAccountID}/token
  • メソッド
    • GET
  • 必要なヘッダ
    • Authorization
    • Bearer {ARRのAccountID}:{ARRのAccessKey}

リファレンス


コンバート用APIの選択

コンバート用のAPIは2つ用意されています。出力されるARR用アセットに違いはなく、ARRからBlob Storageへのアクセス方法の選択によって変わります。アクセス方法としてはIAMを使う方法とSASを使う方法があります。


IAMを使ってアクセスする

Storage Accountに対して、OwnerStorage Account ContributorStorage Blob Data ContributorのロールをARRのManaged Identityに割り当てます。設定方法はこちら

設定完了後、APIを叩くとAzure上でコンバートが開始されます。


  • ドメイン
    • 以下の4つから選ぶ
    • remoterendering.southeastasia.mixedreality.azure.com
    • remoterendering.eastus.mixedreality.azure.com
    • remoterendering.westeurope.mixedreality.azure.com
    • remoterendering.westus2.mixedreality.azure.com
  • エンドポイント
    • /v1/accounts/{ARRのAccountID}/conversions/create
  • メソッド
    • POST
  • 必要なヘッダ
    • Authorization
    • Bearer {アクセストークン}

リクエストボディのフォーマットは以下の通り

{
    "input":
    {
        "storageAccountname": "ソースファイルが置いてあるストレージアカウントの名前",
        "blobContainerName": "ソースファイルが置いてあるコンテナの名前",
        "folderPath": "ソースファイルが置いてあるコンテナの中のフォルダの名前(オプション)",
        "inputAssetPath" : "ソースファイル名"
    },
    "output":
    {
        "storageAccountname": "ARR用アセットの出力先のストレージアカウントの名前",
        "blobContainerName": "ARR用アセットの出力先のコンテナの名前",
        "folderPath": "ARR用アセットの出力先のフォルダ名(オプション)",
        "outputAssetFileName": "ARR用アセットのファイル名。拡張子を`.arrAsset`にする必要がある"
    }
}

レスポンスとしてコンバートジョブのIDが返ってきます。コンバートの進捗を確認するときに必要となります。

{
    "conversionId": "GUID"
}

リファレンス


SASを使ってアクセスする

SASとはStorage Account内のデータへアクセスするための時限式トークンみたいなものです。こちらもStorage ExplorerやREST APIから取得することが可能です。

ソースファイルと出力先のSASをそれぞれ取得したあと、それを使ってAPIを叩きます。


  • ドメイン
    • 以下の4つから選ぶ
    • remoterendering.southeastasia.mixedreality.azure.com
    • remoterendering.eastus.mixedreality.azure.com
    • remoterendering.westeurope.mixedreality.azure.com
    • remoterendering.westus2.mixedreality.azure.com
  • エンドポイント
    • /v1/accounts/{ARRのccountID}/conversions/createWithSharedAccessSignature
  • メソッド
    • POST
  • 必要なヘッダ
    • Authorization
    • Bearer {アクセストークン}

リクエストボディのフォーマットは以下の通り

{
    "input":
    {
        "storageAccountname": "ソースファイルが置いてあるストレージアカウントの名前",
        "blobContainerName": "ソースファイルが置いてあるコンテナの名前",
        "folderPath": "ソースファイルが置いてあるコンテナの中のフォルダの名前(オプション)",
        "inputAssetPath" : "ソースファイル名",
        "containerReadListSas" : "ソースファイルのSAS"
    },
    "output":
    {
        "storageAccountname": "ARR用アセットの出力先のストレージアカウントの名前",
        "blobContainerName": "ARR用アセットの出力先のコンテナの名前",
        "folderPath": "ARR用アセットの出力先のフォルダ名(オプション)",
        "outputAssetFileName": "ARR用アセットのファイル名。拡張子を`.aarAsset`にする必要がある",
        "containerWriteSas" : "出力先のSAS"
    }
}

レスポンスとしてコンバートジョブのIDが返ってきます。コンバートの進捗を確認するときに必要となります。

{
    "conversionId": "GUID"
}

リファレンス


コンバートジョブの進捗を確認するためREST APIを実行する

コンバートの進捗を確認するためのREST APIも用意されています。


  • ドメイン
    • 以下の4つから、コンバートジョブを実行したときと同じものを選ぶ
    • remoterendering.southeastasia.mixedreality.azure.com
    • remoterendering.eastus.mixedreality.azure.com
    • remoterendering.westeurope.mixedreality.azure.com
    • remoterendering.westus2.mixedreality.azure.com
  • エンドポイント
    • /v1/accounts/{ARRのAccountID}/conversions/{conversionId}
    • conversionIdはジョブ実行時のレスポンスから取得したもの
  • メソッド
    • GET
  • 必要なヘッダ
    • Authorization
    • Bearer {アクセストークン}

レスポンスとしてコンバートの進捗が文字列で返ってきます。

{
    "status": "'Created' | 'Running' | 'Success' | 'Failure' "
    "error": "string or null"
}

コンバートが完了すると、SuccessFailureが返ってきます。

リファレンス


まとめ

ARR用のアセットを作る手順をまとめました。まだ各言語用のSDKは用意されていませんが、コンバートに必要なREST APIの種類も少なくシンプルなので実装に困ることはそれほどないかなと思います。今回作ったプロトタイプもNode.js + TypeScriptでaxiosを使って実装しました。

参考

Convert models - MS公式ドキュメント
Azure Remote Rendering - Hiromuブログ

Profile
d_yama
元Microsoft MVP for Windows Development(2018-2020)
Sub-category : Windows Mixed Reality
Search