Unity 之 Shader Blend 混合操作 – 八

  • Post author:
  • Post category:其他


Blend 混合操作

混合操作作用于在所有计算已经结束, 已经决定将当前计算结果输出到帧缓冲中是,如何输出到帧缓冲中,是直接替换原来的,还是一加一的混合。
混合操作有两个对象,源和目标
Blend混合总共有十种可选类型
One 值为1,使用此因子来让帧缓冲区源颜色或是目标颜色完全的通过。 
zero 值为0,使用此因子来删除帧缓冲区源颜色或目标颜色的值。 
SrcColor 使用此因子为将当前值乘以帧缓冲区源颜色的值 
SrcAlpha 使用此因子为将当前值乘以帧缓冲区源颜色Alpha的值。           
DstColor 使用此因子为将当前值乘以帧缓冲区目标颜色的值。 
DstAlpha 使用此因子为将当前值乘以帧缓冲区目标颜色Alpha分量的值。   
OneMinusSrcColor 使用此因子为将当前值乘以(1 -帧缓冲区源颜色值) 
OneMinusSrcAlpha 使用此因子为将当前值乘以(1 -帧缓冲区源颜色Alpha分量的值)         
OneMinusDstColor 使用此因子为将当前值乘以(1 –目标颜色值)    
OneMinusDstAlpha 使用此因子为将当前值乘以(1 –目标Alpha分量的值)

使用方法如:

Blend One Zero

Blend SrcAlpha One 等

在代码中运用如下

Shader "Custom/PassFive" {
    Properties {
        //定义一个贴图
        _MainTex ("Base (RGB)", 2D) = "white" {} 
    }
    SubShader 
    {       
        Tags {"RenderType" = "Opaque" "IGNOREPROJECTOR" = "TRUE" "QUEUE" = "Transparent"}
        LOD 200

        Pass
        {
            //AlphaTest Greater 0.6
            //AlphaTest Less 0.5
            //AlphaTest Greater 0.4
            //AlphaTest Less 0.9

            //Blend SrcAlpha OneMinusSrcAlpha
            Blend SrcColor OneMinusSrcColor     
//BlendOp Max
            //BlendOp Min
            //BlendOp Sub
            //BlendOp RevSub
            // 通过绑定固定通道来使用定点色
            BindChannels
            {
                Bind "Vertex", vertex     // 绑定定点
                Bind "Normal", normal     
                Bind "Color", color
                Bind "Texcoord", texcoord0
                Bind "Texcoord", texcoord1
            }

            //给材质设置 贴图 
            SetTexture [_MainTex] 
            {
                Combine texture * primary double
            }
        }
    } 
    FallBack "Diffuse"
}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

各种组合不一一测试,各种混合模式视情况而定

在Unity3.5版本之后又多了一个BlendOp选项,可以在通常的加操作之外执行Max,Min, Sub, 以及 RevSub这4种操作

用法如下

BlendOp Max

BlendOp Min

BlendOp Sub

BlendOp RevSub

加到Pass中即可

效果如下

这里写图片描述

这里写图片描述



版权声明:本文为LIQIANGEASTSUN原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。