Read/Write Enabled 逐像素可修改参数
用途:只有开启此项,才可以使用 Texture.GetPixel 接口,获取像素数据
弊端:内存中会保留一份内存的的拷贝,会占用双倍内存
Generate Mipmap
用途: 类似LOD技术,会预先为纹理创建出一系列逐层缩小的备份图,以此根据摄像机的远近来选用不同的图
弊端:会增加纹理内存,增加额外33%内存
WrapMode纹理模式
Clamp 拉伸模式: 纹理采样时,在边缘处将会拉伸,这样不会存在边缘像素颜色缝隙
Repeat 重复模式:纹理采样时,会取相邻像素做差值计算而生成新的像素,所以存在明显的颜色缝隙
FilterMode过滤模式
Point(no filter)点过滤模式:纹理像素成为近似块
Bilinear 双线性过滤模式:相邻像素做模糊处理
Trilinear三线性过滤模式:会在不同的Mipmap层次间做blur处理
纹理压缩
基础计算
1字节 = 8bits
压缩格式
RGBA 16bit:每个像素占16位,即2个字节,内存大小1024*1024*2 = 2M
RGBA 32bit:每个像素占32位,即4个字节,内存大小1024*1024*4 = 4M
Android:
[POT] RGB ETC1 4bit:
大小:每个像素占4位,即0.5个字节,内存大小1024*1024*0.5 = 0.5M
限制:长宽必须相等、且是2的整数次幂、不支持透明通道、OpenGL ES 2.0标准的一部分
[NPOT] RGBA ETC2 8bit(RGBA Crunched ETC2)
大小:每个像素占8位,即1个字节,内存大小1024*1024*1 = 1M 携带透明通道
限制:对半透支持很好,但是长宽必须被4整除、只支持OpenGL ES 3.0及以上的Android手机(大概2013年以后的手机都支持)、在不被支持的设备上则会内部自动转成 RGBA32/ARGB32,扩大内存占用
IOS
[POT] RGBA PVRTC 4bit:
大小:每个像素占4位,即0.5个字节,内存大小1024*1024*0.5 = 0.5M
限制:长宽必须相等、且是2的整数次幂、压缩效果比较差,尤其是有透明通道的UI几乎是无法接受的
[NPOT] RGBA ASTC 4*4
大小:每个像素占8位,即1个字节,内存大小1024*1024*1 = 1M
限制:对半透支持很好,但是长宽必须被4整除(不符合规范的资源会在打包的时候,缺省回滚到32位不压缩的格式)、只支持苹果A8以后的设备Phone6及以上的机型,大概2014年后的手机都支持)
项目要求
细则
是否带Alpha
是:ETC2_RGBA8 / ASTC_RGBA_6X6
否:ETC2_RGB4 / ASTC_RGB_6x6
微调
高清UI纹理: 4x4
UI图集或角色3D纹理: 5x5
画质要求不高的粒子贴图: 6x6
工具
是否被4整除:tex.width%4 == 0 && tex.height%4 == 0
texWidth += (tex.width % 4 == 0) ? 0 : (4 - tex.width % 4)
texheight += (tex.height%4 == 0) ? 0 : (4 - tex.height % 4)
使用开源的 Freelmage.dll 第三方插件,重新创建新尺寸贴图
尺寸打图集约束相关
超过512不打图集
图集最大2048(4MB) TexturelmporterPlatformSettings.maxTextureSize