渲染设置系列5——Blend

打回重写


混合模式 ——
决定如何将计算结果(片元)输出到帧缓冲。一般对计算产生的颜色、alpha来和其他东西进行混合
常用来绘制透明、半透明、镂空物体
源因子、目标因子
混合模式操作指令 说明
Blend Off 关闭混合(默认情况?是不是这个?)
Blend 源因子 目标因子 计算产生的颜色和源因子相乘,然后两个颜色相加
Blend 源因子 目标因子,源因子A 目标因子A 源因子和目标因子用于混合颜色值;
源因子A和目标因子A用于混合alpha值
BlendOp 操作命令 不是将加入的颜色混合在一起,而是对它们做其他操作。
主要命令有 Min、Max、Sub(求差)、RevSub(求反差)

猜测 ——

源颜色,应该是说计算得到的颜色值,还没存到帧缓冲区
目标颜色,应该是说帧缓冲区中的,片元的颜色值


源/目标混合因子 说明
One 值为1,用它可以使源颜色、目标颜色完全显示
Zero 值为0,用它可以删除源颜色、目标颜色
SrcColor 这个阶段的值乘以源颜色值
SrcAlpha
DstColor 这个阶段的值乘以帧缓存源颜色值
DstAlpha
OneMinusSrcColor 这个阶段的值乘以(1 - 源颜色的值)
OneMinusSrcAlpha
OneMinusDstColor 这个阶段的值乘以(1 - 目标颜色的值)
OneMinusDstAlpha

例子

Tags{ "Queue" = "Transparent" }
Blend SrcAlpha OneMinusSrcAlpha

//使物体的颜色乘以它的Alpha值,然后再和缓冲区目标颜色的值相混合,达到透明效果

一个球网,遮挡住后边的立方体。(大致上应该可以这么理解)

立方体因其 Queue 是 Geometry,先进行渲染,帧缓冲区中有它的颜色值,
然后才渲染 Queue 是 Transparent 的球网,球网是一个平面进行贴图,其中一些区域是 alpha = 0,所以要将其与帧缓冲中的颜色值进行混合(避免直接覆盖了它后边的物体)。

另外,如果不用混合,而是用 AlphaTest,那么估计会是直接将整个球网写入帧缓冲,所以见不到这个立方体。。。估计是这样的。。。

猜你喜欢

转载自blog.csdn.net/douniwan007009/article/details/79899554