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)。它是一个双通道着色器:
第一个通道将一个光照、alpha 混合纹理渲染至屏幕。Alpha 通道决定透明度。
第二个通道使用附加透明度渲染 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] } } }},