zoukankan      html  css  js  c++  java
  • Shaderlab blend

    http://www.cnblogs.com/daxiaxiaohao/p/4059310.html

    1.不透明度

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

    1.混合(blending)

    上一篇文章中的管道环节中的“逐帧操作”环节中的一项操作就是混合操作,可见混合操作是不可编程的固定功能环节。

    在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”。混合操作就是将源颜色与目标颜色以一些选项进行结合。

    既然是固定功能环节,那么这些选项我们只能选择,不能编写。

    我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:

    float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;

    Unity中的Shader 通过ShaderLab语法表达的混合操作过程为,例:

     

    Blend SrcAlpha OneMinusSrcAlpha        //alpha blending 正常模式(透明度混合)
            Blend One OneMinusSrcAlpha             //premultiplied alpha blending
            Blend One One                          //additive
            Blend SrcAlpha One                     //additive blending
            Blend OneMinusDstColor One             //soft additive 柔和相加(soft Additive) 
            Blend DstColor    Zero                 //multiplicative 正片叠底 (Multiply)相乘 
            Blend DstColor SrcColor                //2x multiplicative 两倍相乘 (2X Multiply) 
            Blend Zero SrcAlpha                    //multiplicative blending for attenuation by the fragment's alpha



    所以混合操作的基本语法为

    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]区间。

  • 相关阅读:
    PowerDesigner概念设计模型(CDM)中的3种实体关系
    基于Prototype 1.6.2 框架下的数据分页
    中国地区,北京54坐标系条带号的选
    C#中MessageBox的使用
    C#注册表的读,写,删除,查找 (转)
    C# Tostring() 格式大全 [转]
    Layer features in this layer set, ArcEngine图层标注源码 (转)
    判断点是否在多边形之内的方法
    C#导入Excel到Dataset和导出Excel到DataTable
    Server.MapPath方法的应用方法
  • 原文地址:https://www.cnblogs.com/nafio/p/9137214.html
Copyright © 2011-2022 走看看