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

対応する XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
[
XR Headsets
]
有線 XR グラス

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

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

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

このアプローチを採用する理由

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

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

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

glb を最適化する

glb はユーザーの周囲のジオメトリを表し、スカイボックスのビジュアル テクスチャが含まれています。ジオメトリの場合、ファイルサイズを 80 MB 以下に維持するようにしてください。

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

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

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

  • KTX 圧縮: glb がミップマップと ktx2 テクスチャを使用していることを確認して、glb ファイルの GPU パフォーマンスを最適化します。

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

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

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

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

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

以下に、cmgen を使用して IBL の ZIP ファイルを作成する例を示します。 この例では、my_360_skybox_1024_x_512.exrblack_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 ..