本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~
Shader实现效果并不一定可以用到项目里
需要进行一定的优化
常用优化如下:
1.精度优化(fixed/half/float)
float:坐标位置,纹理坐标
half:HDR颜色、方向向量
fixed:普通文理,颜色尽量用fixed
注意:实际的精度取决于目标平台和GPU
在PC,都是float。在移动端大部分都支持 half 和 float,很老的手机用fixed
2.能放顶点就不要放在片断着色器中
三角形,三个顶点,可能有几十个像素(计算量级不是一个级别)
坏处可能是效果不好
3.多Pass少用
多个Pass,会渲染多次,也不能进行合批
4.少用AlphaTest 和ColorMask
AlphaTest 就是 clip函数,在ios和使用PowerVR GPU的Android设备上性能很低
ColorMask,在ios和部分Android设备上性能低
5.NoScaleOffset
贴图在材质面板上不显示 tiling offset
同时shader也不做计算
6.DisableBatching,禁用批处理
Tags{ "DisableBatcing" = "true" }
如果顶点上的计算需要在模型的本地空间下进行,则需要开启,否则不要开启
注意:合批之后本地空间就不正确了
7.GrabPass,抓图
GrabPass{ "_GrabTex" }
smpler2D _GrabTex;
如果不指定贴图名称,则每个对象的 GrabPass每帧都会生成一次
有名称,所有对象在一帧内只会生成一次
8.SurfaceShader
能不用就不用,是unity的中间层
尽量去定点片断着色器
9.ShaderLOD
利用ShaderLOD 实现高中低配硬件的区分
10.Overdraw
Tags{ "RenderType" = "Transparent" }
自己写的材质开启 overdraw之后显示不到,需要加RenderType
RenderType本身没什么意义,不会影响渲染效果
就是把shader分类的效果
11.变体优化
变体数量直接影响shaderlab内存的占用,能少泽少
尽量不要去用standard材质,会产生大量的变体,自己定制修改一个