Unity Shader(五) Tags

SubShader Tags

SubShader中的Tags必须放置于SubShader中的Tags内,具体参数有以下这些:

  • Queue

渲染队列,指定对象什么时候渲染,每个队列其实都是利用一个整数进行索引的。

有以下取值:

  • Background

值为1000,此队列的对象最先进行渲染。

  • Geometry

Queue的默认值,值为2000,通常用于不透明对象,比如场景中的物件与角色等。

  • AlphaTest

值为2450,要么完全透明要么完全不透明,多用于利用贴图来实现边缘透明的效果,也就是美术常说的透贴。

  • Transparent

值为3000,常用于半透明对象,渲染时从后往前进行渲染,建议需要混合的对象放入此队列。

  • Overlay

值为4000,此渲染队列用于叠加效果。最后渲染的东西应该放在这里(例如镜头光晕等)。

 

写法示例:

Tags{ "Queue" = "Geometry" }

那是不是只有以上这些固定化的渲染队列了呢?

当然不是,我们还有一种方式可以自定义渲染队列:

Tags{ "Queue" = "Geometry+1" }

如上所示,可以通过在值后加数字的形式来进行重新指定渲染队列。

渲染队列直接影响性能中的重复绘制,合理的队列可极大的提升渲染效率。在Unity中,渲染队列小于2500的对象都被认为是不透明的物体,(如“Background”,“Geometry”,“AlphaTest”),这些物体是从前往后绘制的,而使用其他的队列(如“Transparent”,“Overlay”)的物体则是从后往前绘制的。这意味着,我们需要尽可能地把物体的队列设置为不透明物体的渲染队列,而尽量避免重复绘制。

RenderType

自带的值有以下这些:

  • Opaque

  • Transparent

  • TransparentCutout

  • Background

  • Overlay

  • TreeOpaque

  • TreeTransparentCutout

  • TreeBillboard

  • Grass

  • GrassBillboard

这些名称实际上只是一种内部的约定,用来区别这个Shader要渲染的对象是属于什么类别的,你可以想像成是我们把各种不同的物体进行分类一样。当然你也可以改成自定义的名称,这样并不会影响到Shader的效果。

那既然没有什么效果影响,那RenderType又有什么作用呢?

它的作用是可以利用Camera.SetReplacementShader来更改最终的渲染效果。先说下这条语句的语法:

camera.SetReplacementShader (EffectShader, Tag);
这是Unity的脚本API,需要在C#脚本中进行调用。
其中EffectShader是我们需要渲染的Shader,Tag是用来筛选渲染对象用的。

具体按以下规则执行:

  1. 使用SetReplacementShader("shaderA",""),这里Tag为空,表示全部物体Shader都替换成shaderA进行渲染。

  2. SetReplacementShader("shaderA","RenderType"),由于这里Tag为"RenderType",所以先查看场景中的shader中是否有RenderType参数,如果有,再看RenderType中的值是否与shaderA中的RenderType值相等,相等则使用shaderA渲染,否则就不渲染(Game视图什么也没有)。

  3. 关于Tag参数并不局限于RenderType,我们同样可以使用SetReplacementShader("shaderA","IgnoreProjector")或是其他任何参数如:SetReplacementShader("shaderA","ABC")等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EvanXZ

各位大佬 多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值