Shader Learing(Transparent Shader篇)
透明物体的写法:
一种是clip,写zwrite,好处是不会排序混乱,坏处是没法blend,即透明度测试,透明度测试不能实现半透,只会删除一些片元,看上去像镂空一些面。(解释:设定一个透明度的值,如a,当物体的透明度>a时,按透明处理,直接舍弃,当透明度<a时,按正常物体处理,及深度测试,深度写入,然后深度值要小的物体就被舍弃掉了,不会渲染,也就是透明物体之后的物体不会被渲染了)。
另一种就是blend,不写zwrite,这时候就完全依赖于排序,即透明度混合。(解释:必须先渲染不透明物体,再渲染透明物体,再进行深度测试,被不透明物体挡住的就不会被渲染,挡住不透明物体的,就能正确进行颜色的混合)。
如果你有一个物体里面的面片互相穿插,可以使用两个pass,一个写深度,另外一个做alpha blending。
渲染顺序Queue:
Background 1000 通常用这个队列渲染需要绘制在背景上的物体Geometry 2000 默认值;大部分物体在这个队列。不透明的物体也在这里
AlphaTest 2450 需要透明度测试物体使用的队列
Transparent 3000 在Geometry和AlphaTest渲染后,再从后往前渲染。透明度混合物体都该用
Overlay 4000 实现叠加效果[如镜头光晕]。任何需要最后渲染的,用这个。
自定义 x 用户可以定义任意值,比如"Queue"="Geometry+10"
RenderType[将Shader分类,用于Shader替换]:
Opaque 绝大部分不透明的物体都使用这个Transparent 绝大部分透明的物体、包括粒子特效都使用这个
TransparentCutout蒙皮透明着色器
Background 天空盒都使用这个