Blend混合命令

2019/09/11 shaderLab

Blend混合命令

当同时存在透明物体和不透明物体,首先渲染不透明物体,将不透明物体颜色写入颜色缓存,深度写入深度缓冲,然后渲染透明物体(关闭深度写入,开启深度测试),将透明物体的颜色与颜色缓冲中的颜色混合,得到正确结果。

UnityShaderLab提供了相应的Blend混合命令,用于指定后渲染产生的颜色如何与颜色缓存中的颜色进行混合。混合命令由Blend关键字,操作和因子组成,操作默认是加操作,下面给出 Blend 的常用语义:

Blend Off

​ 关闭混合

Blend SrcFactor DstFactor

​ 开启混合,SrcFactor 和 DstFactor 为混合因子(其实就是个系数),S是源颜色,D是目的颜色,混合后的颜色Color如下,其rgb和a值都使用同一套混合因子:

Blend SrcFacter DstFactor, SrcFactorA  DstFactorA

​ 同上,不过额外指定了透明通道的混合因子:

支持的一些混合因子

参数 描述
Zero Blend factor is (0, 0, 0, 0).
One Blend factor is (1, 1, 1, 1).
DstColor Blend factor is (Rd, Gd, Bd, Ad).
SrcColor Blend factor is (Rs, Gs, Bs, As).
OneMinusDstColor Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
SrcAlpha Blend factor is (As, As, As, As)
OneMinusSrcColor Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
DstAlpha Blend factor is (Ad, Ad, Ad, Ad).
OneMinusDstAlpha Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).
SrcAlphaSaturate Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad).
OneMinusSrcAlpha Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).

几种常见的混合类型:

//正常(Normal)
Blend SrcAlpha OneMinusSrcAlpha

//柔和相加(Soft Addtive)
Blend OneMinusDstAlpha One

//正片叠底(Multiply),即相乘
Blend DstColor Zero

//两倍相乘(2x Multiply)
Blend DstColor SrcColor

//变暗(Darken)
BlendOp Min
Blend One One

//变亮(Lighten)
BlendOp Max
Blend One One

//滤色(Screen)
Blend OneMinusDstColor One

//线性减淡(Linear Dodge)
Blend One One

Search

    Table of Contents