unity纹理基础概念:模型表面用来增加细节的位图图像。通常一个模型需要一张或者多张纹理。
纹理需要材质着色器映射到表面。或者烘焙生成。纹理可以放到模型,ui ,精灵,地图等。
纹理类型
- Default:默认的纹理类型格式(绝大多数选这个)
- Normal map:发现贴图,可以将颜色通道转换为实时发现贴图格式
- Editro Gui and Legacy Gui:在编辑器GUI控件上使用纹理请选择
- Sprite(2D and ui):在2D游戏中使用的精灵或者ugui使用的纹理
- Cursor:鼠标光标自定义纹理类型
- Cookie:用于光照Cookie纹理
- LightMap:光照贴图类型的纹理
- Single Channel:如果原始图片文件只有一个通道,选择这个。会节省资源
纹理大小
2的幂次方比如1024*1024 512*512 。但是不必要长宽一样,但是只要长宽符合2的幂次方即可。如果不是2的幂次方,unity也会根据当前纹理尺寸自动的计算出来,算出一个最小符合2的幂次方的一个尺寸,但是就是就会造成纹理的浪费。纹理的大小影响的是内存和显存的大小,gpu纹理采用 带宽等。
所以应该尽量遵循一下经验
- 不同平台,不同硬件选择不同的纹理大小。unity可以采用bundle变量设置多套资源,通过mipmap限制不同平台加载不同的level层级的贴图
- 根据纹理用途的不同选择不同的纹理加载方式。如流式纹理加载Texture Streaming,稀疏纹理,SparseTexture,虚拟纹理等方式
- 不能让美术通过增加纹理大小来增加细节,可以通过细节贴图DetailMap或增加高反差保留的方式
- 再不降低视觉效果的情况下尽量减少贴图大小
纹理颜色空间
SRGB空间处理和导出纹理
但是纹理不作用颜色信息的话,那就不要sRGB 如金属度贴图,粗糙度贴图或者发现贴图
纹理压缩
- 默认用PNG或TGA 。但是与专业比访问和采样速度慢无法通过GPU硬件加速,同时纹理数据大,占用内存较高。所以渲染中我们会采用一些硬件支持的纹理压缩格式,如ASTC,ETC,ETC2,DXT等
纹理图集
- 纹理图集是一系列小纹理图像的集合
- 优点:1.采用共同纹理图集的多个静态网格资源可以进行静态合批处理,减少DC
2.减少碎纹理,因为再一个图集中,可以通过压缩可以更有效的利用压缩,降低纹理的内存成本 - 缺点:美术需要合理规划等等。制作和修改成本高
纹理过滤
- NPF:临近点采样过滤最简单,计算量小的纹理过滤。但是再近距离观察,纹理会呈现块状
- Bilinear Filtering:双线性过滤会对临近像素采样并进行插值化处理,对纹理像素进行着色。双线性过滤让像素看起来更平滑,但近距离观察是,纹理会变的模糊
- TF:三线性过滤与BF相同部分外,还增加了Mipmap等级之间的采样差值混合,用来平滑过渡除Mipmap之间的明显变化
- AF:各向异性过滤可以改善纹理在倾斜角度下的视觉效果。更适用于地表纹理
纹理mipmap
简单理解为纹理的LOD
- 有点gpu不需要在远距离上对对象进行全分辨率纹理采样。提供纹理采样性能
- 同时解决原距离下采样导致噪点的问题,提高纹理渲染质量
- 缺点:mipmap纹理要生成低分辨率的副本,造成额外的内存开销