Version: Unity 6.0 (6000.0)
语言 : 中文
压缩网格数据以进行优化
配置顶点压缩

网格数据压缩的类型

Unity 提供了两种压缩网格的方法。它们的工作原理不同,对性能的影响也各有不同:

  • 顶点压缩 (Vertex Compression) 设置会影响项目中的每个网格。它允许在网格中使用较低精度的数据格式。这样可以减小网格数据在内存中的大小,略微减小文件大小,还有可能提高 GPU 性能。但潜在的缺点是会损失一定的精度。
  • 网格压缩 (Mesh Compression) 是影响单个网格的设置。它会压缩磁盘上的网格数据,从而减小文件大小。潜在的缺点是加载时间增加、加载时临时内存使用量增加,还有可能出现压缩瑕疵。

要访问网格压缩设置,请打开模型导入设置 (Model Import settings) 窗口,导航到模型 (Model) 选项卡的网格 (Meshes) 部分,然后使用网格压缩 (Mesh Compression) 下拉选单。

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

注意:Unity 中顶点压缩和网格压缩的默认设置适用于大多数项目。只有在出现问题时才应更改这些设置,并且要评估更改后的结果,确保这些更改起到了积极作用。

顶点压缩

顶点压缩 (Vertex Compression) 设置允许为项目中的所有网格使用较低精度的数据格式。为此,您需要为特定数据通道配置数据类型。

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

从 FP32 转换到 FP16 的数据在内存中占用的空间较小,在磁盘上占用的空间稍微较小。在 GPU 上,数据使用更少的内存带宽,这可能略微提升 GPU 性能。

顶点压缩技术对网格的压缩比例取决于选择压缩的顶点属性数量。压缩法线、切线、颜色和三组 UV 坐标时,压缩比通常约为 1.45 倍。

网格压缩

您可以使用网格压缩 (Mesh Compression) 设置来压缩磁盘上给定模型资源的网格数据。网格压缩算法比顶点压缩技术更具攻击性,因此会产生更高的压缩比,从而减小文件大小。但是,它也有更多的缺点。

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

如果需要尽可能减小最终构建大小或网格所在的 AssetBundle 大小,且运行时解压缩导致的性能下降在可接受范围内,则此方法非常有用。

网格压缩的局限性

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

此外,相对较高的压缩比意味着 Unity 解压缩网格时可能会出现不必要的瑕疵。为了避免这些瑕疵,需要测试要压缩的网格的每个选项,并检查其是否显示正确。

压缩网格数据以进行优化
配置顶点压缩