zoukankan      html  css  js  c++  java
  • 解读Unity中的CG编写Shader系列七(不透明度与混合)

    转自http://www.itnose.net/detail/6098539.html

    1.不透明度

    当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色到底以怎样的形式混合在一起最后输出到帧缓存中是我们现在首要讨论的内容。 
     

    1.混合(blending)

     
    上一篇文章中的管道环节中的“逐帧操作”环节中的一项操作就是混合操作,可见混合操作是不可编程的固定功能环节。
     
    在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”。混合操作就是将源颜色与目标颜色以一些选项进行结合。
     
    既然是固定功能环节,那么这些选项我们只能选择,不能编写。
     
    我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:
     
    float4 result = SrcFactor * fragment_output + DstFactor * pixel_color; 
     
     
    我还是用图形表达上面这个等式吧:
    unity,不透,解读,shader,混合0 
     
    Unity中的Shader 通过ShaderLab语法表达的混合操作过程为:
    Blend  SrcFactor  DstFactor

    其中这2个代号分别可以选择的选项如下表:

    选项代号

    与之等价的代码

    One

    float4(1.0)

    Zero

    float4(0.0)

    SrcColor

    fragment_output

    SrcAlpha

    float4(fragment_output.a)

    DstColor

    pixel_color

    DstAlpha

    float4(pixel_color.a)

    OneMinusSrcColor

    float4(1.0) - fragment_output

    OneMinusSrcAlpha

    float4(1.0 - fragment_output.a)

    OneMinusDstColor

    float4(1.0) - pixel_color

    OneMinusDstAlpha

    float4(1.0 - pixel_color.a)

    其中float4(1.0)的写法我们前面已经见过,等价于float4(1.0,1.0,1.0,1.0)
     
     
    并且其中所有向量的分量区间都是[0,1]区间。

    2.顺序无关的不透明度

     
     
     

    1.加法混合

  • 相关阅读:
    forward和redirect的区别
    转 jsp中 session的简单用法
    20_学生选课数据库SQL语句练习题1
    _学生选课数据库SQL语句练习题
    输入输出2
    接口提
    输入输出流3
    获取当前时间并显示在网页上
    简单的权限管理
    java关于时间
  • 原文地址:https://www.cnblogs.com/mrblue/p/4595994.html
Copyright © 2011-2022 走看看