混合用于制作透明对象。
渲染图形时,执行所有着色器且应用所有纹理之后,将像素写入屏幕。混合 (Blend) 命令控制这些像素如何与已有像素混合。
以下属性对 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)。它是一个双通道着色器:
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] } } } }
Page last updated: 2013-06-28