Shader渲染队列设置

发表于2018-01-23
评论0 5.1k浏览
Shader着色器的知识想要完全掌握很不容易,更多的还需要大家从实践中获得经验。本篇文章给大家介绍的是关于Alpha通道实现半透明材质的效果,让大家可以对Shader渲染队列设置有个清晰的认识:
有个Tag概念:子着色器使用标签来告诉渲染引擎期望何时和如何渲染对象。
首次接触到渲染队列这个概念,暂且直观理解吧。
关于Tag 是以键值对的形式,为标签赋值,主要有四种状态:

有四种预定义的渲染队列,在预定义队列之间还可以定义更多队列
1. Background - this render queue is rendered before any others. It is used for skyboxes and the like. 
后台 - 这个渲染队列在所有队列之前被渲染,被用于渲染天空盒之类的对象。
2. Geometry (default) - this is used for most objects. Opaque geometry uses this queue. 
几何体(缺省) - 这个队列被用于大多数对象。 不透明的几何体使用这个队列。
3. Transparent - this render queue is rendered after Geometry, in back-to-front order. Anything alpha-blended (i.e. shaders that don't write to depth buffer) should go here (glass, particle effects). 
透明 - 这个渲染队列在几何体队列之后被渲染,采用由后到前的次序。任何采用alpha混合的对象(不对深度缓冲产生写操作的着色器)应该在这里渲染(玻璃,粒子效果)
4. Overlay - this render queue is meant for overlay effects. Anything rendered last should go here (e.g. lens flares). 
覆盖 - 这个渲染队列被用于实现叠加效果。任何需要最后渲染的对象应该放置在此处。(如镜头光晕)

example:
 
     Tags { "RenderType"="Opaque" "Queue"="Transparent" }
表示使用这个材质的物体的渲染次序是在渲染透明物体时渲染。

更牛逼的是这个队列还支持自己设置的:
对于特殊的需要可以使用中间队列来满足。在Unity实现中每一个队列都被一个整数的索引值所代表。后台为1000,几何体为2000,透明为3000,叠加层为4000. 着色器可以自定义一个队列

Tags { "Queue" = "Geometry+1" }
这会使对象在所有不透明的对象渲染之后但却在所有透明物体前被渲染,该渲染队列的索引值为2001.当你希望某些对象总是在其他某些对象前被绘制的情况下,这种能力对你有用。例如,在大多数时候,透明的水总是应该在所有不透明的物体之后并在透明对象前被渲染。
IgnoreProjector tag 忽略投影 标签
如果设置忽略投影标签为"True",那么使用这个着色器的对象将不会被投影机所影响。对半透明的物体来说最有用处,因为没有对他们产生投影的好办法。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引