Shader - Pass (五)

                    Blending

这里写图片描述

当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕。他们是如何通过Blend命令的控制和已有的图像合并呢?

Syntax 语法

  • Blend Off: 关闭混合
  • Blend SrcFactor DstFactor:配置并启动混合。产生的颜色被乘以SrcFactor. 已存在于屏幕的颜色乘以DstFactor,并且两者将被叠加在一起。
  • Blend SrcFactor DstFactor, SrcFactorA DstFactorA:同上,但是使用不同的要素来混合alpha通道
  • BlendOp Min | Max | Sub | RevSub:不是添加混合颜色在一起,而是对它们做不同的操作。

Properties 属性

以下所有属性对SrcFactor或DstFactor都可用。Source指的是被计算的颜色,Destination是已经在屏幕上的颜色。

  1. One:值为1,使用此设置来让源或是目标颜色完全的通过。
  2. Zero:值为0,使用此设置来删除源或目标值。
  3. SrcColor:此阶段的值是乘以源颜色的值。
  4. SrcAlpha:此阶段的值是乘以源alpha的值。
  5. DstColor:此阶段的值是乘以帧缓冲区源颜色的值。
  6. DstAlpha:此阶段的值是乘以帧缓冲区源alpha的值。
  7. OneMinusSrcColor:此阶段的值是乘以(1 - source color)。
  8. OneMinusSrcAlpha:此阶段的值是乘以(1 - source alpha)。
  9. OneMinusDstColor:此阶段的值是乘以(1 - destination color)。
  10. OneMinusDstAlpha:此阶段的值是乘以(1 - destination alpha)。

以下是最常见的混合类型:

  • Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
  • Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
  • Blend One One // Additive
  • Blend One OneMinusDstColor // Soft Additive
  • Blend DstColor Zero // Multiplicative
  • Blend DstColor SrcColor // 2x Multiplicative

Example 示例
这里是一个着色器的小例子,添加一个纹理,无论是否已在屏幕上:

Shader "Simple Additive" {
    Properties {
        _MainTex ("Texture to blend", 2D) = "black" {}
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend One One
            SetTexture [_MainTex] { combine texture }
        }
    }
}

更复杂的一个例子,玻璃。这是一个two-pass着色器:

    第一个pass渲染光照、alpha混合纹理到屏幕上。Alpha通道决定的透明度。
    第二个pass渲染在alpha混合窗口顶部一个反射立方体贴图,使用附加透明度。
Shader "Glass" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Transparency (A)", 2D) = "white" {}
        _Reflections ("Base (RGB) Gloss (A)", Cube) = "skybox" { TexGen CubeReflect }
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend SrcAlpha OneMinusSrcAlpha
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_MainTex] {
                combine texture * primary double, texture * primary
            }
        }
        Pass {
            Blend One One
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_Reflections] {
                combine texture
                Matrix [_Reflection]
            }
        }
    }
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值