常见的资源规则
纹理Texture
关闭read/write enabled的标志
Read/Write enabled标志导致Texture会在内存中存在两份资源:一份在GPU,一份在GPU寻址空间【因为在大部分平台,从GPU内存读取非常缓慢。从GPU内存读取纹理资源到临时缓冲区非常不划算】。在Unity中,这个选项默认被关闭,但是有可能被意外开启。
Read/Write enabled属性被打开只有在Shader外操作纹理数据才有意义(例如Texture.GetPixel和Texture.SetPixel等)所以应当尽可能避免开启。
尽可能关闭Mipmaps
如果对象相对于Camera的Z深度不变,最好关闭mipmaps可以节省大概1/3的内存。如果对象的Z深度值会变化,关闭mipmaps可能导致GPU的取样效果比较差。
通常来讲,UI纹理和在屏幕上是固定大小的纹理资源通过可以关闭掉mipmaps选项。
压缩所有的纹理
对于目标平台使用合理的纹理压缩格式可以节省内存资源。
如果目标平台的纹理压缩格式设置的不合理,Unity加载纹理资源之后会对纹理资源重新解压,会消耗大量CPU时间和内存资源。这对于Android设备很常见,通常是因为不同的芯片级支持不同的纹理格式,差异太大,难以统一。
建立纹理限制条件
虽然这个很简单,但是通常很容易忘记重新调整纹理的大小,或者不小心改变了导入设置中的纹理大小。最好是通过代码确定不同类型的纹理资源是否满足了设定的规则。
对于许多移动应用程序,2048x2048或1024x1024对于纹理地图集是足够的,512x512对于应用于3D模型的纹理是足够的。
模型Model
关闭Read/Write enabled的标志