Tags
Tags是SubShader的一部分,我们可以通过在Tags中添加不同的标签,来告诉引擎物体的渲染顺序和渲染方式. Tags可以写在Subshader或者Pass中,具体格式为Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
,在一个Tags中可以使用多个不同的标签,标签之间以空格区分开,不能使用,
进行分隔.
标签基本上都是以键值对的方式存在的.根据Tags出现的位置的不同(使用方式不同),区分为 SubShader Tags 和 Pass Tags.在这两种不同的Tags中,使用的标签也会存在差异.
SubShader Tags
SubShader Tags 就是直接写在SbuShader中的Tags.这种Tags中的标签确定了改SubShader的渲染顺序和其他一些参数.在SubShader Tags中不仅可以使用unity预设的标签,和可以使用自定义的标签,可以使用Material.GetTag
函数来查询这些标签.
SubShader Tags 常用标签
◆ Queue
可以使用该标签来确定对象的绘制顺序,unity预置了5个值.
● Background
● Geometry (默认值)
● AlphaTest
● Transparent
● Overlay
◆ RenderType
可以使用该标签将shader区分到几个预定义的组中,一般用来标记物体,区分物体的渲染顺序
◆ DisableBatching
该标签在某些(对象空间顶点变形)shader中不起作用,原因在于使用批处理会将所有的几何体转换到世界空间中,会丢失物体空间.存在3个值.
● True
● False (默认值)
● LODFading
◆ ForceNoShadowCasting
控制对象是否投射阴影,一般使用在透明物体且不需要阴影的物体上.存在2个值
● True
● False(默认值)
◆ IgnoreProjector
控制对象是否接受阴影,一般用在半透明物体上.存在2个值
● True
● False(默认值)
◆ CanUseSpriteAtlas
表示没看懂是干什么的
◆ PreviewType
设置预览模型
Pass Tags
Pass Tags 就是写在Pass中的Tags.这种Tags中的标签控制了Pass在渲染管线中的作用.常用标签
Pass Tags 常用标签
◆ LightMode
定义了Pass使用的照明方式.主要存在11种不同的方式
● Always
● ForwardBase
● ForwardAdd
● Deferred
● ShadowCaster
● MotionVectors
● PrepassBase
● PrepassFinal
● Vertex
● VertexLMRGBM
● VertexLM
◆ PassFlags
使用此标签可以让Pass更改渲染管线中数据传递的方式.存在的值
● OnlyDirectional 在ForwardBase中使用时,该标签可以让其仅将主管员和光照探针数据传递到着色器中.
◆ RequireOptions
使用此标签可以让Pass仅在满足特定的外部条件是才会使用该Pass.存在的值
● SoftVegetation
Alpha Test
在片元着色器工作完成之后,渲染管线会进行这一步操作(Alpha Test).
在这一步的操作中,主要是根据两个物体的是否是透明物体,来决定最终的颜色混合,简单的说,如果有两个物体A,B参与到这一步中,假定A距离摄像机更近,并对B物体有遮挡,进行到此的时候,如果A是不透明物体,那么就会在对应的像素中,A所在的像素将会完全被A占用,如果A为半透明物体,则保留下A,B的信息,进入到下一步的融合操作中.
感觉渲染管线在历经磨难,到这里的时候,才终于知道哪些需要被绘制到屏幕上,哪些不能被看见,就果断舍弃了.
Blend
经过了Alpha Test 的所有信息,还无法直接进入到像素的绘制层面,还需要经过这最后一步的操作--融合.
这一步的操作主要是针对带有透明信息的物体的操作,假设有A,B两个物体.假定A距离摄像机更近,并对B物体有遮挡.此时A为半透明物体,那么就需要根据设定的融合方式,对A,B两个物体遮挡部分的像素颜色进行最终的融合处理.
Blend接受两个输入,一般称呼为SrcFactor与DstFactor,SrcFactor表示的是我们当前正在处理片元着色器刚刚处理完成,而DstFactor则来自于Color Buffer中.粗俗的说,这个Color Buffer就是存储这像素颜色的一个数组.存储这对应每一个像素的颜色.于此类似的还有Depth Buffer.
Unity已经封装好了一些关于Blend常用的操作.我们可以通过一些简单的语句,来开启或者关闭Blend的操作(为了渲染的实效性,默认是关闭Blend操作的,毕竟现实中大部分物体都是不透明的,uniyt基于Tag中关于RenderType的描述,会对这一步进行一些优化处理).
◆ 语句
● Blend Off 关闭Blend(默认)
● Blend SrcFactor DstFactor 配置并开启Blend, 融合方式为 SrcColor * SrcFactor (常见的颜色融合方式,前景色 * 透明值 + 背景色 * (1 - 透明值))
● Blend SrcFactor DstFactor, SrcFactorA DstFactorA 与上诉方式一样,只是采用不同的混合因子来进行融合.
BlendOp Op 以其他的方式代替两种混合颜色相加的操作.
● BlendOp OpColor, OpAlpha 与上述一样,只是替代的操作不限于颜色,还包括透明度.