前言

Unity中Shader优化通用规则


一、精度优化

1、三种精度 fixed / half / float

2、位置坐标、物理坐标类使用float

3、HDR颜色、方向向量使用half

4、普通纹理、颜色类使用 fixed

5、实际上,使用的精度取决于 平台 和 GPU

6、现在桌面级GPU都是直接采用 float , Shader中的 fixed / half / float最后都是用的 float

7、现代移动端GPU大多仅支持 half 与 float ,所以能用 half 的就用 half

8、fiixed用于较旧的移动 GPU


二、能放顶点着色器的不要放片段着色器中

在这里插入图片描述


三、多Pass少用

一个SubShader内如果含有多个Pass(不包含Unity中特殊使用的),则会渲染多次,同时将不能进行合批


四、小心使用 AlphaTest 和 ColorMask

AlphaTest :透明测试

但是,使用 AlphaTest 是避免不了的。
因为,有很多地方用到 : 树叶透光、草地、网格围栏、渔网袜效果等。不可能通过建模实现,因为比较消耗性能

ColorMask输出颜色通道


五、NoScaleOffset :不开启 Tilling 和 Offset面板

[NoScaleOffset][Normal]_NormalTex(“NormalTex”,2D) = “bump” {}


六、DisableBatching :不动态合批

Tags{“DisableBatching” = “true”}

同时影响 动态合批 与 静态合批
如果顶点上的计算需要模型本地空间下进行,则需要开启,否则最好不要开启

Unity中合批分为静态合批 和 动态合批

动态合批:

在这里插入图片描述

//在Tags{}中添加 DisableBatching设置
Tags { “RenderType”=“Opaque” “DisableBatching” = “false”}

在这里插入图片描述

//在Tags{}中添加 DisableBatching 的设置
Tags { “RenderType”=“Opaque” “DisableBatching” = “true”}

在这里插入图片描述

在这里插入图片描述

静态合批:

在没运行时,重复上面步骤,就可以看出


七、GrabPass 抓取屏幕

1、方式一:

GrabPass{}
sampler2D _GrabTexture;

2、方式二:

GrabPass{“_GrabTex”}
sampler2D _GrabTex;


八、Surface Shader :表面着色器

Surface Shader 是Unity提供给一些不是专门写Shader的人使用的,有很多的Bug

能不用就不用 Surface Shader(表面着色器)尽量使用 vertex / fragment(顶点片元着色器)


九、ShaderLOD :配置分级

LOD 600


十、Overdraw :同一个像素渲染多次

//可以在Shader中使用这个标签查看 Overdraw 高不高
Tags{“RenderType” = “Transparent”}

RenderType
用来区别这个Shader要渲染对象是属于什么类别的,你可以想像成是我们把各种不同的物体我们需要类型来进行分类一样。
当然你也可以根据需要改成自定义的名称,这样并不会影响到Shader的效果
此Tag多用于摄像机替换材质功能(Camera.SetReplacementShader)。

在这里插入图片描述

在这里插入图片描述


十一、变体优化

原文地址:https://blog.csdn.net/qq_51603875/article/details/134684443

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11339.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注