ShaderLab 语法:混合 (Blending)        

混合用于制作透明对象。

渲染图形时,执行所有着色器且应用所有纹理之后,将像素写入屏幕。混合 (Blend) 命令控制这些像素如何与已有像素混合。

语法

Blend Off
关闭混合
Blend SrcFactor DstFactor
配置和启用混合。生成的颜色乘以 SrcFactor。已在屏幕上的颜色乘以 DstFactor,然后两者相加。
Blend SrcFactor DstFactor, SrcFactorA DstFactorA
与上述操作相同,但是混合 alpha 通道要使用不同的因子
BlendOp Min | Max | Sub | RevSub
不将混合颜色相加,而是对它们进行不同的操作。

属性

以下属性对 SrcFactor 和 DstFactor 都有效。源颜色 (Source) 是指已计算的颜色,目标颜色 (Destination)指已显示在屏幕上的颜色。

One值为 1 - 用它可使源颜色或目标颜色完全显示出来。
Zero值为 0 - 用它可删除源颜色值或者目标颜色值。
SrcColor这个阶段的值乘以源颜色值。
SrcAlpha这个阶段的值乘以源 alpha 值。
DstColor这个阶段的值乘以帧缓存源颜色值。
DstAlpha这个阶段的值乘以帧缓存源 alpha 值。
OneMinusSrcColor这个阶段的值乘以(1 - 源颜色之间的值)。
OneMinusSrcAlpha这个阶段的值乘以(1 - 源颜色 alpha 之间的值)。
OneMinusDstColor这个阶段的值乘以(1 - 目标颜色之间的值)。
OneMinusDstAlpha这个阶段的值乘以(1 - 目标颜色 alpha 之间的值)。

详细信息

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

Blend SrcAlpha OneMinusSrcAlpha     // Alpha 混合Blend One One                       // 相加Blend OneMinusDstColor One          // 柔和相加Blend DstColor Zero                 // 相乘Blend DstColor SrcColor             // 2 倍相乘

示例

以下是一个小的示例着色器,它可以在已显示在屏幕上的任何东西上添加纹理:

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

下面是一个复杂的示例着色器,玻璃 (Glass)。它是一个双通道着色器:

  1. 第一个通道将一个光照、alpha 混合纹理渲染至屏幕。Alpha 通道决定透明度。

  2. 第二个通道使用附加透明度渲染 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]            }        }    }} 
,