Unity3D:压缩网格数据

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

压缩网格数据

您可以在 Unity 中压缩网格数据以减小其大小,从而提高性能。Unity 提供了两种压缩网格的方法。它们的工作方式不同,并影响性能的不同方面:

  • 顶点压缩是影响项目每个网格的设置。它允许您在网格中使用较低精度的数据格式。这会减小内存中网格数据的大小,略微减小文件大小,并可能提高 GPU 性能。潜在的缺点是精度损失。
  • 网格压缩是影响单个网格的设置。它压缩磁盘上的网格数据,从而减小文件大小。潜在的缺点是加载时间增加、加载时临时内存使用量增加以及压缩伪影的可能性。

您可以在同一项目中使用这两种压缩方法,但不能在同一网格中使用。如果将网格压缩应用于网格,Unity 不会将顶点压缩应用于该网格。

注意:Unity 的顶点压缩和网格压缩默认设置适用于大多数项目。仅当遇到问题时,才应更改这些设置,并评估结果以确保更改有所帮助。

顶点压缩

“顶点压缩”设置允许您对项目中的所有网格使用较低精度的数据格式。您可以通过为特定数据通道配置数据类型来执行此操作。

可以将给定通道的数据类型从 FP32(浮点 32,32 位浮点数)更改为 FP16(浮点数 16,也称为半精度浮点数)。FP16 格式存储的小数点后位数比 FP32 数字少的数字,这意味着它占用的空间更少,但精度略低。

从 FP32 转换为 FP16 的数据占用的内存空间较少,磁盘空间略少。在 GPU 上,数据使用较少的内存带宽,这可能会略微提高 GPU 性能。

顶点压缩技术按比率压缩网格,该比率因您选择压缩的顶点属性数而异。压缩法线、切线、颜色和三组 UV 坐标时,压缩率通常在 1.45 倍左右。

顶点压缩的局限性

网格必须满足以下要求才能使用顶点压缩:

  • 网格必须禁用其“启用读/写”属性。您可以在“模型导入设置”窗口的“模型”选项卡中更改此属性。
  • 网格不得是蒙皮网格。
  • 目标平台必须支持 FP16 值。
  • 包含网格的模型必须将其网格压缩值设置为“关闭”。

如果网格无法满足任何这些要求,则 Unity 不会对该网格应用顶点压缩,并且网格上的所有数据通道都使用 FP32 精度数字。

配置顶点压缩

要更改顶点压缩设置: 1. 打开播放器设置(菜单:编辑>项目设置>播放器)。 1. 打开“其他设置”子菜单,然后导航到“优化”标题。 1. 选择“顶点压缩”下拉列表,然后选择任何通道以启用或禁用该通道的压缩。还可以选择“无”以禁用所有通道的压缩,或选择“全部”以启用所有通道的压缩。

默认情况下,顶点压缩设置为混合,当下拉列表中有多个选择处于活动状态时,Unity 会显示该压缩。默认情况下,Unity 对以下通道使用顶点压缩:

  • 正常
  • 切线
  • 德克萨斯坐标 0
  • 特克斯坐标 2
  • 特克斯坐标 3

Unity 默认压缩这些通道,因为在大多数情况下,这种设置组合提供了保存的内存的良好组合,而不会对网格的外观进行重大更改。默认情况下,Unity 不会压缩其他设置(位置和 Tex 坐标 1),因为这些设置更有可能影响网格的外观,并且不会显著减少内存使用。如果要为位置和 Tex 坐标 1 通道启用顶点压缩,则应测试设置以确保它们不会在网格中引起伪影。

网格压缩

您可以使用网格压缩设置来压缩磁盘上给定模型资产的网格数据。网格压缩算法比顶点压缩技术更具侵略性,后者导致更高的压缩率,因此文件大小更小。但是,它也有更多的缺点。

应用此设置时,Unity 会使用一种算法将每个压缩通道的显式值替换为介于最大值和最小值之间的范围,其中固定位数表示每个值在该范围内的位置。这减少了磁盘上网格数据的大小。当 Unity 将网格加载到内存中时,它会解压缩数据,这意味着它会将此范围转换回原始值。在此之后,性能不会受到影响。

如果您需要尽可能减小最终构建大小或网格所在的 AssetBundle 大小,并且运行时解压缩导致的性能降低是可以接受的,则此技术非常有用。

网格压缩的局限性

在运行时,网格解压缩会使用额外的 CPU 资源;这意味着加载网格数据需要更长的时间。Unity 在解压缩网格时还会使用更多的临时内存。

此外,相对较高的压缩率意味着在 Unity 解压缩网格时可能会出现不需要的伪影。为避免这些伪影,您应该测试要压缩的网格的每个选项,并检查它是否正确显示。

配置网格压缩

“模型导入设置”窗口中的“网格压缩”设置
“模型导入设置”窗口中的“网格压缩”设置

要使用网格压缩设置:

  1. 在项目的“资源”文件夹中选择一个模型,以打开“导入设置”窗口的“模型”选项卡。
  2. 导航到网格标题并找到网格压缩设置。
  3. 选择下拉菜单,为该模型中的所有网格选择一个级别。还可以使用 ModelImporterMeshCompression 枚举在代码中更改此设置。

可用值为“高”、“中”、“低”或“关”。下表显示了其中每个设置的典型压缩比:

顶点正常切线乌布苏颜色
关闭1.01.01.01.01.0
1.64.64.42.01.0
中等2.05.65.33.21.3
3.27.46.74.02.0

网格压缩技术的压缩比

注意:上表中的“颜色”列显示了使用 UNorm8 格式的网格的比率。对于对顶点颜色使用 FP32 格式的网格,“低”设置的比率为 4.0,“中”设置的比率为 5.3,“高”设置的比率为 8.0。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:导入 LOD 网格 (mvrlink.com)

下一篇:Unity3D:加载纹理和网格数据 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号