
纹理大小、颜色空间和压缩
Tutorial
intermediate
+0XP
15 mins
(21)
Unity Technologies

在本教程中,我们将讨论如何选择适当的纹理大小、颜色空间和压缩以带来更好的性能。
Languages available:
1. 概述
纹理大小、颜色空间和压缩都会影响游戏的性能。
较好的做法是创建足够大但不过大的纹理(达到你想要的质量即可)。此外,最好使用包含许多网格共享的多个纹理的大型纹理图集。
2. 纹理大小
纹理可以有不同的大小。减小需要较少细节的纹理的大小有助于减少带宽。例如,漫射纹理可设置为 1024x1024,相关的粗糙度/金属性贴图可设置为 512x512。
尽量有选择地减小纹理大小,并始终查看这是否降低了任何视觉效果。
3. 纹理颜色空间
大多数纹理处理软件(例如 Adobe Photoshop 和 Substance Painter)都可以使用 sRGB 颜色空间处理和导出纹理。
我们建议你在 sRGB 颜色空间中使用漫射纹理。如果不把纹理当作颜色信息使用的话,就不要使用sRGB 颜色空间。此类纹理示例包括金属性、粗糙度和法线贴图,因为这些贴图作为数据而非颜色使用。在这些贴图中使用 sRGB 会导致材质出现错误的视觉效果。
注意:请确保在 Inspector 窗口的 sRGB(颜色纹理)设置中,没有选中粗糙度、镜面、法线贴图或类似项目。
下面的屏幕截图显示了将 sRGB 错误地应用于纹理时的情况:
4. 纹理压缩
纹理压缩是一种图像压缩,用于在保持视觉质量的同时减小纹理数据大小。
通常使用 TGA 或 PNG 等格式导出纹理。虽然这些格式比较方便使用,主要的图像软件程序都支持它们,但是与专用图像格式相比,它们的访问和采样速度较慢,因此不能在最终渲染中使用。对于 Android,有多个选项,例如自适应可伸缩纹理压缩 (ASTC)、Ericsson 纹理压缩 (ETC) 1 或 ETC2。
我们建议你使用 Arm 开发的 ASTC 技术:
- ASTC 在不需要更多内存的情况下,提供了比 ETC 更好的质量。
- ASTC 的编码时间比 ETC 长,会让游戏打包过程花费更多时间。如果这让你感到烦恼,那么最好在游戏的最终打包阶段再使用 ASTC。
- ASTC 允许设置块大小,让你能够更好地控制质量。虽然没有特定的最佳默认块大小,但将其设置为 5x5 或 6x6 是一个很好的起点。
有时,如果必须快速部署游戏,则最好使用 ETC 进行开发。可以组合使用 ASTC 和快速压缩设置,以避免部署时间的增加。编码时,需要在速度、质量和大小之间进行权衡。对于最终构建,就视觉质量和文件大小而言,ASTC 是最佳选择。
打包游戏时,Unity 会处理纹理压缩,但你可以选择使用 ASTC 还是 ETC。
下面的屏幕截图显示了在 Unity 中构建 Android 包时如何选择 ASTC:
下图显示了使用 ETC 和 ASTC 压缩时质量及文件大小的差异:
5. 总结
2D 资源可能会对移动应用程序的性能产生巨大影响。在使用纹理时,必须考虑大小、颜色空间和压缩细节。在下一个教程中,我们将讨论使用纹理图集将图像打包在一起的好处。