Unity3D

来源:互联网 发布:浏览器缺少java插件 编辑:程序博客网 时间:2024/06/06 15:48

混合是如何实现的?

当片元着色器产生一个颜色时,可以选择与颜色缓存中的颜色进行混合。混合与两个操作数有关系:源颜色(Source Color)和目标颜色(Destination Color)。

  • 源颜色,用S表示,指的是片元着色器产生的颜色
  • 目标颜色,用D表示,指的是从颜色缓冲区中读取的颜色值。
  • 对他们进行混合后得到的输出颜色,用O表示,它会重写入到颜色缓冲中。

混合中的源颜色、目标颜色、输出颜色都包含RGBA四个通道的值。

混合等式

想要混合源颜色S和目标颜色D,得到输出颜色O需要使用混合等式(Blend Equation),而且每次混合需要两个等式,其中一个用于混合RGB通道,另一个用于混合Alhpa(A)通道。

由于需要两个等式混合(一个用于混合RGB通道,另一个用于混合Alpha通道),并且每个等式需要两个因子(一个用于和源颜色相乘,另一个用于和目标颜色相乘),所以一共有四个因子。

ShaderLab中设置混合因子的命令

命令 描述 Blend SrcFactor DstFactor 开启混合,并设置混合因子。 源颜色会乘以SrcFactor,而目标颜色会乘以DstFactor,然后把两者相加再存入颜色缓冲区中。 Blend SrcFactor DstFactor, SrcFactorA DstFactorA 和上面一样,只是使用不同的因子来混合透明通道

在第一种情况下的命令,仅提供了两个因子,这意味着使用相同的混合因子来混合RGB通道和Alpha通道,即此时SrcFactorA等于SrcFactor,而DstFactorA等于DstFactor。

混合公式:

Orgb=SrcFactorSrgb+DstFactorDrgb

Oa=SrcFactorASa+DstFactorADa

可以作为混合因子的参数

参数 描述 One 因子为1 Zero 因子为0 SrcColor 因子为源颜色。当用于混合RGB的混合等式时,使用SrcColor的RGB分量作为混合因子;当用于混合Alpha的混合等式时,使用SrcColor的A分量作为混合因子 SrcAlpha 因子源颜色的透明度值(Alpha通道) DstColor 因子为源颜色值。当用于混合RGB通道的混合等式时,使用DstColor的RGB分量作为混合因子;当用于混合Alpha通道的混合等式时,使用DstColor分量作为混合因子。 DstAlpha 因子为目标颜色的透明度值(Alpha通道)