從 Jetpack XR 程式庫的 Alpha04 版開始,提供空間環境資產的方式有重大更新,可確保最佳效能和視覺品質。這些變更會影響相容性,因此需要更新設定空間環境的現有應用程式。
如要提供空間環境,您需要兩個主要元件:
- 環境幾何圖形的 .glb 或 .gltf 檔案 (例如地面平面、附近物體),以及使用者看到的主要視覺天空盒紋理。
- 另一個 ZIP 檔案,內含使用 cmgen 工具從高動態範圍 EXR 圖片產生的影像式照明 (IBL) 資訊。ZIP 檔案用於光照計算 (例如物件上的反射),而非用於視覺天空盒材質本身。
為什麼要採用這種做法?
更新後的資產結構具有下列優點:
- 縮減檔案大小:相較於先前的做法 (例如使用單一高解析度 HDR 立方體貼圖檔案,同時提供視覺顯示和照明資訊),這個方法可縮減檔案大小。
- 提升效能:將視覺天空盒紋理 (內建於 glb) 與 IBL 資料 (位於 ZIP 檔案中) 分開,即可分別最佳化各個元件。這會降低紋理記憶體讀取頻寬和耗電量。
- 最佳化照明:使用專為照明地圖設計的低解析度天空盒資源,有助於提升效能,且不會大幅影響物體照明的視覺效果。
如要進一步瞭解如何在應用程式中新增空間環境,請參閱「將環境新增至應用程式」指南。
最佳化 glb 檔案

glb 代表使用者周圍的幾何圖形,您會加入天空盒的視覺紋理。幾何圖形檔案大小應維持在 80 MB 以下。
為此,您可以透過多種方式提高環境效率,同時維持高品質。舉例來說,網格在使用者附近應最密集,而距離使用者較遠的網格密度則可降低。
- 檢視距離:Android XR 環境的檢視距離為使用者所在位置的 200 公尺,您的天空盒紋理應遵守這項限制。因為視差在該距離下會變得難以辨識,因此可提供最佳體驗。
使用者高度:地理位置可能有所不同,但請將使用者放在約 1.5 公尺高的土堆上,以免與應用程式中較大的 UI 元素發生剪裁問題。
多邊形數量:請注意 glb 檔案中的多邊形數量,因為多邊形數量過高可能會導致不必要的耗電。每個幾何圖形修補程式不得超過 10,000 個頂點。
KTX 壓縮:確保 glb 使用 mipmap 和 ktx2 紋理,藉此提升 glb 檔案的 GPU 效能。
最佳化 IBL 的必要條件
下載 cmgen 指令列公用程式:
- 您可以在 Filament 存放區中找到最新版本。
- 找出包含適用於您平台的 cmgen 預先建構版本的 .tgz,然後解壓縮。
- 預先建構的工具位於解壓縮的 .tgz 檔案的 /bin 目錄下。
準備好要產生 IBL 的 .zip 檔案的素材資源:
- 與天空盒紋理相符的低解析度 EXR
- 輸入的 Skybox 紋理應為 EXR 檔案。雖然 cmgen 支援其他格式,但建議使用 EXR,因為這種格式提供的高動態範圍資訊對於提供高品質 IBL 至關重要。使用 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.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 ..