混合

作者:追风剑情 发布于:2014-6-4 23:51 分类:Shader

混合是用来制作透明物体的。在所有着色器执行完毕,所有纹理都被应用,所有像素准备被呈现到屏幕之后,使用Blend命令来操作这些像素进行混合。

混合是将源色和目标色以某种方式混合生成特效的技术。混合常用来绘制透明或半透明的物体。混合操作只能在RGBA模式下进行,颜色索引模式下无法指定Alpha值。物体的绘制顺序会影响到OpenGL的混合处理。Blend常用语法如下所列。

Blend Off

关闭混合

Blend 源因子 目标因子

配置并开启混合。计算产生的颜色和源因子相乘。颜色缓冲中的颜色和目标因子相乘,然后两个颜色相加。

Blend 源因子 目标因子,源因子A目标因子A

源因子,目标因子和上面相同,但是源因子A,目标因子A这些因子使用alpha通道进行混合。

BlendOp 操作

不是将加入的颜色混合在一起,而是对它们做一些操作。主要操作命令有Min(取最小值),Max(取最大值),Sub(求和),RevSub

常用的混合因子(对源因子和目标因子都有效)如表所示。

混合因子

混合因子 说明
One 值为1,使用此设置来让源或是目标颜色完全地通过
Zero 值为0,使用此设置来删除源或目标值
SrcColor 此阶段的值是乘以源颜色的值
SrcAlpha 此阶段的值是乘以源alpha的值
DstColor
此阶段的值是乘以帧缓冲区目标颜色的值
DstAlpha 此阶段的值是乘以缓冲区目标alpha的值
OneMinusSrcColor 此阶段的值是乘以(1 - 源颜色)
OneMinusSrcAlpha 此阶段的值是乘以(1 - 源alpha)
OneMinusDstColor 此阶段的值是乘以(1 - 目标颜色)
OneMinusDstAlpha 此阶段的值是乘以(1 - 目标alpha)

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

Blend SrcAlpha OneMinusSrcAlpha //混合

Blend One One //相加混合

Blend One OneMinusDstColor //柔和相加混合

Blend DstColor Zero //相乘混合

Blend DstColor SrcColor //2倍相乘混合

下面的代码是一个能够渲染出玻璃特效的着色器代码:

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 {
      Tag { "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]
         }
      }
   }
}

标签: 混合

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号