🍉

Immersive Stream for XRを使ってみる

2022/08/16に公開

概要

  • Immersive Stream for XRはストリーミング技術を使って、モバイル端末上で3Dコンテンツの表示を可能にします
  • ARコンテンツの作成も可能なため、低負荷で高品質なARコンテンツの作成が可能となっています
  • 2022年8月現在プレビュー版となっていますが、使い方を紹介します
    • GCPとUE4の行き来を防ぐため公式ドキュメントと説明の順番が一部異なっています

https://cloud.google.com/immersive-stream/xr?hl=ja

YouTubeのvideoIDが不正ですhttps://youtu.be/vBwMsdr764U?t=30

環境

  • Windows10
  • Unreal Engine 4.27

GCP側の準備

  • 基本的にこちらのクイックスタートに沿って構築していきます
    https://cloud.google.com/immersive-stream/xr/docs/quickstart?hl=ja

  • まずGCPプロジェクトを作成し、その中にバケットを作成します

    • バケットを作成する際には支払い情報が必要になるので、事前に準備しておく必要があります

バケット名は任意の名前を入力します
データ保存場所によって料金が変化します。デフォルトのままでも問題はないかと思います

次にGoogle Cloud CLIの準備をします。インストール済みの方は読み飛ばして問題ありません
https://cloud.google.com/sdk/docs/install-sdk?hl=ja

Windowsの場合は下記のコマンドを PowerShellで実行します

(New-Object Net.WebClient).DownloadFile("https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe", "$env:Temp\GoogleCloudSDKInstaller.exe")
& $env:Temp\GoogleCloudSDKInstaller.exe

自動的にインストールが進み、Googleアカウントにログインまで実行されます

次にGCP上でImmersive Stream for XR serviceを使えるように設定していきます
下記のコマンドではmy-projectというのがプロジェクトID、my-project-numberがプロジェクト番号と読み替えてください
プロジェクトIDはプロジェクト名ではなく赤枠のIDの方になります

下記のコマンドを実行していきます。PowerShellではなくコマンドプロンプトで問題ありません

gcloud services enable stream.googleapis.com --project my-project

プロジェクト番号を調べる

gcloud projects describe my-project

実行結果。projectNumberがプロジェクト番号になります

createTime: '2022-05-12T03:59:39.290Z'
lifecycleState: ACTIVE
name: ARCore
projectId: arcore-xxxxxx
projectNumber: '123456789'

このプロジェクト番号を使用するように gcloud CLI コンテキストを設定します。

gcloud config set project my-project-number

gcloud CLI の alpha コマンド コンポーネントをインストールします。

gcloud components install alpha

gcloud CLI が最新であることを確認します。

gcloud components update

次にバケットの操作をします。my-gcs-bucketの部分を、作成したバケット名に置き換えて実行してください。数十分ほど時間がかかります

gcloud alpha immersive-stream xr contents create my-content --bucket=my-gcs-bucket --async

実行状況は下記のコマンドで確認できます

gcloud alpha immersive-stream xr contents describe my-content

実行結果。stateがREADYになれば準備完了です。

createTime: '2021-12-07T18:40:08.#######'
lifecycleState:
  description: 'Creation operation: projects/my-project-number/locations/global/operations/operation-####'
  state: CREATING
name: projects/my-project-number/locations/global/streamContents/my-content
updateTime: '2021-12-07T18:41:33.#######'

ドキュメントにはREADYになった後、1時間待つように記載があるのでここで1時間ほど休憩を取りましょう

(推奨) コンテンツの準備が整った後、コンテンツ ビルダーがプレウォームするまで 1 時間待ちます。

これでGCP側の準備はいったん完了です

UE4コンテンツの準備

なお、テンプレートプロジェクトの説明についてはこちらのページになります
https://cloud.google.com/immersive-stream/xr/docs/template-project?hl=ja

テンプレートプロジェクトがダウンロード出来たら XR_Template.uprojectをダブルクリックしてプロジェクトを開きます

この状態で実行して通常モードとARモードを切り替えるシミュレーションをすることもできます
このテンプレートの場合、SphereをタップするとCubeのメッシュに切り替わる機能が実装されています

プロジェクトの内容に手を加えたい場合は、ここで手を加えておきます

UE4プロジェクトのアップロード&ビルド

  • PowerShellでテンプレートプロジェクトのXR_Actionsフォルダまで移動します
  • 下記のコマンドを実行してUE4プロジェクトをバケットにアップロードします
.\SyncContent.ps1 my-gcs-bucket

上手く実行できない場合はこちらを参考にしてください
https://qiita.com/ponsuke0531/items/4629626a3e84bcd9398f

アップロードが完了したらいよいよビルドを実行します。私の環境では2時間かかりました。(ドキュメントには最大4時間かかると記載があります)
my-version-tagの部分は任意の文字列になります。001などバージョンが分かりやすい文字列にしておくといいかと思います

gcloud alpha immersive-stream xr contents build my-content --version=my-version-tag --async

下記のコマンドを実行すると状況が確認できます

gcloud alpha immersive-stream xr contents describe my-content

ビルドが成功するとdescriptionがBuilder finished building 001 with status SUCCESSに変化します

bucketName: xr_stream
createTime: '2022-08-15T03:11:15.406816529Z'
lifecycleState:
  description: Builder is building 001
  state: READY
name: projects/123456789/locations/global/streamContents/my-content
updateTime: '2022-08-15T04:27:37.124734227Z'

インスタンスの作成

下記のコマンドでインスタンスを作成します。こちらも数十分程度時間がかかります

gcloud alpha immersive-stream xr instances create my-instance --content=my-content --version=my-version-tag --async

リージョンはアジアリージョンを使用することも可能です asia-northeast1

下記のコマンドで状況が確認できます。

gcloud alpha immersive-stream xr instances describe my-instance

lifecycleStateがREADYになればインスタンスの作成が完了です

apiEndpoint: 123456-789-123-456-349d7150f822.streamplease.net
apiKey: *****************
content: projects/123456789/locations/global/streamContents/my-content
contentBuildVersion:
  buildId: version-d2090ca5-6f03-4387-97e3-4b5d7b364b91
  buildTime: '2022-08-15T04:32:26.593587360Z'
  contentVersionTag: '001'
createTime: '2022-08-15T06:05:55.466066947Z'
lifecycleState:
  state: READY
locationConfigs:
  asia-northeast1:
    capacity: 1
    location: asia-northeast1
name: projects/123456789/locations/global/streamInstances/my-instance
realmConfigs:
- capacity: 1
  realm: REALM_ASIA_NORTHEAST
updateTime: '2022-08-15T06:36:33.368376587Z'

URLを作成する

インスタンスが作成出来たらLink Generatorを使ってリンクを作成します
https://www.gstatic.com/ar/core/viewer/carousel/cloud9/tools/link_generator.html

下記のコマンドを実行した際に表示される
apiEndpointをEndpoint URLに
apiKeyAPI Keyに入力してリンクを作成します

gcloud alpha immersive-stream xr instances describe my-instance

Cross-Platform Redirect Linkを押すとQRコードが生成されます
そのQRコードをモバイル端末で読み取ることでコンテンツにアクセスすることができます

後片付け

下記のコマンドでインスタンスを削除できます。インスタンスの削除にも30分程度時間がかかります

gcloud alpha immersive-stream xr instances delete my-instance --async

最後に

  • 実行するまでの手順が多いですが、一度構築すればリッチな表現をモバイル端末で表示することができるようになります
  • ビルド時間も初回は長いですが、2回目以降は30分程度に圧縮されるようです

Discussion