从 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 ..