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 m 程度の土台に配置します。
ポリゴン数: ポリゴン数が多すぎると、不要な電力消費につながる可能性があるため、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 ..