优化环境资源

从 Jetpack XR 库的 alpha04 版本开始,关于如何提供空间环境资源以实现最佳性能和视觉质量,有一些重要的更新。这些更改会影响兼容性,需要更新设置空间环境的现有应用。

要提供空间环境,您需要两个主要组件:

  • 用于环境几何体(例如,地面、附近物体)的 .glb 或 .gltf 文件,以及用户看到的视觉天空盒主纹理。
  • 一个单独的 ZIP 文件,其中包含使用 cmgen 工具从高动态范围 EXR 图像生成的基于图像的照明 (IBL) 信息。ZIP 文件用于照明计算,例如物体上的反射,而不是用于视觉天空盒纹理本身。

为什么采用这种方法?

这种更新的资源结构具有以下优势:

  • 更小的文件大小:与以前的方法(例如,使用单个高分辨率 HDR 天空盒文件用于视觉显示和照明信息)相比,这种方法减小了文件大小。
  • 改进的性能:将视觉天空盒纹理(内置于 glb 中)与 IBL 数据(在 ZIP 文件中)分开,可以独立优化每个组件。这会降低纹理内存读取带宽和功耗。
  • 优化照明:专门为照明贴图使用较低分辨率的天空盒资源有利于性能,而不会显著影响物体照明的视觉效果。

要详细了解如何在应用中添加空间环境,请参阅我们的向您的应用添加环境指南。

优化您的 glb

您的 glb 表示用户周围的几何体,并且您包含天空盒的视觉纹理。对于您的几何体,您应该尝试将文件大小保持在 80MB 或更小。

为此,有许多机会可以在保持高质量的同时提高环境效率。例如,您的网格密度应该在用户附近最密集,并且您可以降低离用户较远的网格的密度。

  • 视距:Android XR 中环境的视距距离用户位置 200m,您的天空盒纹理应遵守此限制。这提供了最佳体验,因为在此距离下,视差变得难以辨别。
  • 用户高度:地理环境可能有所不同,但将用户定位在约 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,因为它们提供高质量 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 ..