1.Assets
游戏制作涉及处理大量不同类型的资源,例如纹理、网格、动画、音频等,本章提供资源的一些调优知识,包括各种资源的设置等。
1.1 纹理
图像数据是纹理的来源,是游戏制作中不可或缺的一部分,而它消耗的内存也比较大,所以必须进行一些适当的设置。
1.1.1 导入设置
下面是Unity中纹理的导入设置
1.1.2 读/写
默认情况下禁用此选项。如果禁用,纹理仅在GPU内存中扩展。如果启用,它不仅会复制到GPU内存,还会复制到主内存,从而使消耗加倍。因此,如果不使用Texture.GetPixel、Texture.SetPixel等API而仅使用Shader来访问纹理,直接禁用它们。
另外,对于运行时生成的纹理,将makeNoLongerReadable设置为true,以免复制到主内存
texture2D.Apply(updateMipmaps,makeNoLongerReadable:true);
由于将纹理从GPU内存传输到主内存是非常耗时的,因此如果它们是可读的,则可以通过将纹理部署到两者中来提高性能。
1.1.3 生成Mip贴图
启用Mip映射设置将纹理内存使用增加约1.3倍。此设置通常用于3D对象,以减少远处对象的抖动和纹理转移。这对于2D精灵和UI图像基本上是不必要的,所以应该禁用它。
1.1.4 压缩设置
参考资料:[Unity优化]图片压缩格式 https://zhuanlan.zhihu.com/p/457822156
在
实
践中,
图
像大多是作
为压缩
数据使用的。 压缩是通
过设计
存
储
数据的方法来
减
少数据量的
过
程。例如,假
设
有
五个
相同
颜
色的 像素彼此相邻
。
在
这
种情况下,每个像素 如果你有一个颜
色的信息和一排有
五个
的
信息,而不是
单
一
颜
色
的
五个
颜
色信息,那么 信息量就会减
少。
在
实
践中,有很
多更复
杂
的
压缩
方法。 作为
一个具体的例子,我
们
介
绍
ASTC
,一个
典型的移
动压缩
格式。
应
用
ASTC6x6 格式,一个
1024x1024
的
纹
理被从
4
兆字
节压缩
到大
约
0.46
兆字
节
。
换
句
话说
,其
结
果是 压缩不到
八分之一
的容量,
这
就体现
了
进
行
压缩
的重要性。
纹理应该被压缩,除非有特定的原因不被压缩。如果在项目中发现了未压缩的纹理,这可能是人为错误或缺乏规则。请尽快检查一下。我们建议使用文本导入器来自动化这些压缩设置,以避免人为错误。
using UnityEditor;
public class ImporterExample : AssetPostprocessor
{
private void OnPreprocessTexture()
{
var importer = assetImporter as TextureImporter;
// 读取/写出设置等。
importer.isReadable = false;
var settings = new TextureImporterPlatformSettings();
//Android = "Android", PC = "Standalone
settings.name = "iPhone";
settings.overridden = true;
settings.textureCompression = TextureImporterCompression.Compressed;
// 指定压缩格式
settings.format = TextureImporterFormat.ASTC_6x6;
importer.SetPlatformTextureSettings(settings);
}
}
并非所有的纹理都需要使用相同的压缩格式。例如,在UI图像中,具有整体层次的图像往往由于压缩而显示出明显的质量损失。在这种情况下,建议只为一些目标图像设置一个较低的压缩比。另一方面,对于3D模型等纹理,很难看到质量损失,所以最好找到一个合适的设置,如高压缩比
推荐android使用ETC2, ios使用ASTC,或者PVRTC ,PC使用DXT