从 Jetpack XR 库的 alpha04 版本开始,您应如何提供空间环境资源以实现最佳性能和视觉质量方面有重要更新。这些变更会影响兼容性,需要更新设置空间环境的现有应用。
若要提供空间环境,您需要两个主要组件:
- 环境几何形状(例如地面、附近物体)的 .glb 或 .gltf 文件,以及用户看到的主要视觉天空盒纹理。
- 一个单独的 ZIP 文件,其中包含使用 cmgen 工具从高动态范围 EXR 图像生成的基于图像的光照 (IBL) 信息。ZIP 文件用于光照计算(例如物体上的反射),而不是用于视觉天空盒纹理本身。
为什么采用这种方法?
这种更新后的资源结构具有以下优势:
- 更小的文件大小:与之前的方法(例如使用单个高分辨率 HDR 天空盒文件来同时提供视觉显示和照明信息)相比,此方法可减小文件大小。
- 提升性能:将视觉天空盒纹理(内置于 GLB 中)与 IBL 数据(位于 ZIP 文件中)分离,可让您单独优化每个组件。这样可以降低纹理内存读取带宽和功耗。
- 优化照明:专门针对照明贴图使用较低分辨率的天空盒资源有助于提高性能,同时不会对物体照明的视觉效果产生显著影响。
如需详细了解如何在应用中添加空间环境,请参阅有关向应用添加环境的指南。
优化 GLB

您的 GLB 表示用户周围的几何形状,并且您包含天空盒的视觉纹理。对于几何图形,您应尽量将文件大小保持在 80MB 或更小。
为此,您可以采取多种措施来提高环境效率,同时保持高品质。例如,网格的密度应在用户附近达到最高,而对于距离用户较远的网格,您可以降低密度。
- 观看距离:Android XR 中环境的观看距离为用户所在位置的 200 米,您的天空盒纹理应遵守此限制。这样可提供最佳体验,因为在该距离下,视差变得难以辨别。
用户身高:地理位置可能各不相同,但请将用户放置在约 1.5 米高的土堆上,以避免与应用中较大的界面元素发生剪裁。
多边形数量:请注意 glb 文件中的多边形数量,因为多边形数量过高可能会导致不必要的能耗。每个几何块不应超过 10,000 个顶点。
KTX 压缩:确保您的 glb 文件使用 mipmap 和 ktx2 纹理,从而优化 glb 文件的 GPU 性能。
优化 IBL 需要做哪些准备
下载 cmgen 命令行实用程序:
- 您可以在 Filament 代码库中找到最新版本。
- 找到包含适用于您平台的 cmgen 预构建版本的 .tgz 文件,然后将其解压缩。
- 预构建的工具位于提取的 .tgz 文件的 /bin 目录下。
准备好生成 IBL 的 .zip 文件所需的素材资源:
- 与天空盒纹理相匹配的低分辨率 EXR
- 您的天空盒纹理输入应为 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 ..