混合

作者:追风剑情 发布于: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倍相乘混合

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

  1. Shader "Glass" {
  2. Properties {
  3. _Color ("Main Color", Color) = (1,1,1,1)
  4. _MainTex ("Base (RGB) Transparency (A)", 2D) = "white" { }
  5. //定义立方图纹理属性
  6. _Reflections ("Base (RGB) Gloss (A)", Cube) = "skybox" { TexGen CubeReflect }
  7. }
  8. SubShader {
  9. Tag { "Queue" = "Transparent" }//设置渲染队列为透明队列
  10. Pass {
  11. Blend SrcAlpha OneMinusSrcAlpha //设置混合模式
  12. Material {
  13. Diffuse [_Color] //设置漫反射光颜色
  14. }
  15. Lighting On //开启光照
  16. SetTexture [_MainTex] {
  17. combine texture * primary double, texture * primary
  18. }
  19. }
  20. Pass {
  21. Blend One One //设置混合模式
  22. Material {
  23. Diffuse [_Color]
  24. }
  25. Lighting On
  26. SetTexture [_Reflections] {//设置纹理应用
  27. combine texture
  28. Matrix [_Reflection]
  29. }
  30. }
  31. }
  32. }

标签: 混合

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号