Unity3D教程宝典之Shader篇:第十二讲 Alpha测试

引言:本讲和下一讲主要讲Alpha即透明通道有关的内容。RGBA,其中最终在屏幕上显示的只有RGB即 红绿蓝组成的颜色,Alpha并没有任何颜色显示。A只是辅助颜色运算特别是多图层运算而已。例如在单图层的情况下(1,1,1,0.8)输出的是(1,1,1)*0.8即 浅灰色(0.8,0.8,0.8),和(0.8,0.8,0.8)是等价的.但是假如不再是单图层而背景为绿色(0,1,0,1)的时候,(0.8,0.8,0.8)就不知道怎么去运算了,而(1,1,1,0.8)知道。看不懂这段引言?没关系,往下看,当学完第五讲和第六讲后再回来看就自然能深刻理解了。
 
什么是通道:
通道是8位的灰度图像,能够显示256种灰度,用来表示颜色的RGBA值。R=Red红色,G=Green绿色,B=blue蓝色,A=alhpa透明值, 其中RGB为原色通道,A为透明通道。
在通道中,以白色代替透明表示要处理的部分(选择区域);以黑色表示不需处理的部分(非选择区域)
所有通道取值范围是 [0,255], 但是在Shader里取值范围是[0,1], 0和1分辨对应0和255
什么是Alpha通道:
定义:一般图形卡具有32位总线,附加的8位信号就被用来保存不可见的透明度信号以方便处理用,这就是Alpha通道。白色的alpha象素用以定义不透明的彩色象素,而黑色的alpha象素用以定义透明象素,黑白之间的灰阶用来定义半透明象素。
简而言之:Alpha通道取值同样为[0,255] 以及Shader[0,1], 值越小最透明,值最大越不透明。在Shader里即0为透明,什么都没有,编辑器显示为黑色。1则不透明,全部都显示,编辑器其显示为白色如下图。
技术分享

什么是Alpha Test:
Alpha Test ,中文就是透明度测试。简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。 AlphaTest语句通常位于Pass{}中的起始位置。
 
语法:
第一种: AlphaTest Off: 不测试,全渲染
第二种:Alpha 比较符 目标alpha值
其中目标alpha值取值范围是 0至1, 也可以用参数 ,如 AlphaTest [varName]。
 
比较符:(目标alpha值下面记作x)
Always  全渲染(任意x值)
Never   全不渲染
Greater  点的alpha值大于x时渲染
GEuqal   点的alpha值大于等于x时渲染
Less       点的alpha值小于x时渲染
LEqual    点的alpha值小于等于x时渲染
Equal  点的alpha值等于x时渲染
NotEqual  点的alpha值不等于x时渲染
 
例:
AlphaTest never  0      全不渲染(这个0可以是任意值,但必须填)
AlphaTest always 0      全渲染(这个0可以是任意值,但必须填)
AlphaTest off               全渲染
AlphaTest Greater 0.4  当alpha大于0.4渲染,   缺点是边缘过于锋利并且显示不完整,alpha小于0.4的部分被忽略掉了
Alpha Blend                 边缘柔和,但是中心也太柔和,没有实体的感觉
AlphaTest Greater 0.4 / AlphaTest LEqual 0.4 两个部分,大于0.4不混合,小于0.4混合。效果是既有实体感觉,边缘也柔和。
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。