• 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混合。效果是既有实体感觉,边缘也柔和。
  • 相关阅读:
    Nokia N78拍照最佳设置!
    摩托Milestone购机鉴别篇
    sdf
    js随笔
    jssip无法识别以数字开始的域
    ASP.NET页面生命周期与优化
    在SQLServer2005中使用全文搜索
    简析正则表达式
    《WCF编程》之错误
    《WCF编程》之实例管理
  • 原文地址:https://www.cnblogs.com/zdlbbg/p/4329242.html
Copyright © 2020-2023  润新知