環境アセットを最適化する

対象の XR デバイス
このガイダンスは、このようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス

Jetpack XR ライブラリの alpha04 リリース以降、最適なパフォーマンスと視覚的な品質を実現するために空間環境アセットを提供する方法に重要な更新が加えられています。これらの変更は互換性に影響するため、空間環境を設定する既存のアプリを更新する必要があります。

空間環境を提供するには、次の 2 つの主要コンポーネントが必要です。

  • 環境のジオメトリ(地面、近くのオブジェクトなど)と、ユーザーが目にする主な視覚的スカイボックス テクスチャの .glb ファイルまたは .gltf ファイル。
  • cmgen ツールを使用してハイ ダイナミック レンジの EXR 画像から生成された、画像ベース ライティング(IBL)情報を含む別の ZIP ファイル。この ZIP ファイルは、オブジェクトの反射などの照明計算に使用され、空のビジュアル スカイボックス テクスチャ自体には使用されません。

このアプローチを採用した理由

この更新されたアセット構造には、次のような利点があります。

  • ファイルサイズの縮小: 以前の方法(視覚的な表示と照明情報の両方に単一の高解像度 HDR スカイボックス ファイルを使用するなど)と比較して、このアプローチではファイルサイズが縮小されます。
  • パフォーマンスの向上: ビジュアル スカイボックス テクスチャ(glb に組み込み)を IBL データ(ZIP ファイル内)から分離することで、各コンポーネントを個別に最適化できます。これにより、テクスチャ メモリの読み取り帯域幅が減少し、消費電力が低下します。
  • 最適化されたライティング: ライティング マップ専用の低解像度スカイボックス リソースを使用すると、オブジェクトのライティングの視覚的な結果に大きな影響を与えることなく、パフォーマンスを向上させることができます。

アプリに空間環境を追加する方法については、アプリに環境を追加するガイドをご覧ください。

glb を最適化する

glb はユーザーの周囲のジオメトリを表し、スカイボックスの視覚的なテクスチャを含みます。ジオメトリについては、ファイルサイズを 80 MB 以下に保つようにしてください。

そのため、高品質を維持しながら環境の効率を高める機会が数多くあります。たとえば、メッシュの密度はユーザーの近くで最も高くし、ユーザーから遠いメッシュの密度は低くすることができます。

  • 視距離: Android XR の環境の視距離はユーザーの地点から 200 m です。スカイボックス テクスチャはこの制約に準拠する必要があります。この距離では視差が認識できなくなるため、最適なエクスペリエンスが提供されます。
  • ユーザーの高さ: 地理はさまざまですが、アプリ内の大きな UI 要素とのクリッピングを避けるため、ユーザーを高さ約 1.5 メートルの丘の上に配置します。

  • ポリゴン数: ポリゴン数が多いと不必要な電力消費につながる可能性があるため、glb ファイルのポリゴン数に注意してください。各ジオメトリ パッチは 10,000 個の頂点を超えてはなりません。

  • KTX 圧縮: glb が mipmap と ktx2 テクスチャを使用するようにして、glb ファイルの GPU パフォーマンスを最適化します。

IBL を最適化するために必要なもの

cmgen コマンドライン ユーティリティをダウンロードします。

  • 最新のリリースは、Filament リポジトリで確認できます。
  • プラットフォーム用の cmgen のビルド済みバージョンを含む .tgz を見つけて展開します。
  • ビルド済みのツールは、抽出された .tgz ファイルの /bin ディレクトリにあります。

IBL の .zip ファイルを生成するために準備するアセット:

  • スカイボックス テクスチャに一致する低解像度の EXR
    • スカイボックス テクスチャの入力は EXR ファイルである必要があります。cmgen は他の形式もサポートしていますが、高品質の IBL を提供するために不可欠なハイ ダイナミック レンジ情報を提供するため、EXR が推奨されます。PNG などの他の形式を使用すると、照明の精度が低下します。
    • ソース画像(EXR)は、比率が 2:1 で、寸法が 2 のべき乗である必要があります。1,024 x 512 ピクセルの EXR を使用します。注: 1, 024 x 512 は解像度が低すぎるように見えるかもしれませんが、パフォーマンスにはメリットがあります。IBL の場合、ユーザーに表示される結果は、IBL の解像度がはるかに高いアセットと非常に似ています。
  • 黒一色の PNG
    • このアセットも 2:1 のアスペクト比にする必要があります。100 x 50 ピクセルのサイズを使用します。
    • これは、IBL に付随する最適化されたテクスチャとして機能します。ユーザーには表示されないため、パフォーマンスの最適化に重点を置いてアセットを作成します。

以下に、cmgen を使用して IBL の .zip ファイルを作成する例を示します。この例では、my_360_skybox_1024_x_512.exr と black_skybox.png という名前の入力ファイルを使用し、my_ibl .zip という名前の.zip ファイルを作成します。

# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png

# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr

# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512

# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old

# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox

# Change into the child directory.
cd ./skybox_ibl

# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*

# Return to the directory you started in.
cd ..