• Unity中的CG编写Shader系列(Blend)


    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
            Blend DstColor    Zero                 //multiplicative
            Blend DstColor SrcColor                //2x multiplicative
            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]区间。

  • 相关阅读:
    C#变量初始化
    Mcrosoft中间语言的主要特征
    去除json数据的某些键值对
    ASP.NET MVC 之控制器与视图之间的数据传递
    ASP.NET MVC 路由进阶(之二)--自定义路由约束
    ASP.NET WEB API 初探
    Linux学习三部曲(之三)
    Linux学习三部曲(之二)
    Linux学习三部曲(之一)
    C# 3.0 特性之扩展方法
  • 原文地址:https://www.cnblogs.com/daxiaxiaohao/p/4059310.html
Copyright © 2020-2023  润新知