從 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
- 天空盒紋理輸入內容應為 EXR 檔案。雖然 cmgen 支援其他格式,但建議使用 EXR,因為 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 ..