混合操作(Blending)
混合操作最常見的用途便是用來制作透明物體、或者進行紋理混合。它是Shader渲染的最後一步
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXxUFRNBzZE90MNpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jNwgjMwEzMyIzMyATM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如上圖所示,正被渲染的像素經過頂點光照、頂點着色器、剔除和深度測試、霧效、Alpha測試等一系列操作之後,最後一步便是混合操作。這個時候計算結果即将被輸出到幀緩沖中。
而混合操作,就是管理如何将這些像素輸出到幀緩存中的一個過程。
混合操作有兩個對象:源和目标,是以也有兩個對應的因子,即源因子和目标因子
混合操作相關的句法
- Blend Off
- 關閉混合
- Blend SrcFactor DstFactor
- 基本的配置并啟動混合操作。對産生的顔色乘以SrcFactor。對已存在于螢幕的顔色乘以DstFactor,并且兩者将被疊加在一起。
- Blend SrcFactor DstFactor,SrcFactorA DstFactorA
- 同上,但是使用不同的要素來混合alpha通道,也就是有了4個操作對象
- BlendOp Add | Min | Max | Sub | RevSub
- Add——将源像素和目标像素相加
- Sub——用源像素減去目标像素
- RevSub——用目标像素減去源像素
- Min——取目标像素和源像素的較小者作為結果
- Max——取目标像素和源像素的較大者作為結果
混合因子(Blend factors)列舉
Blend SrcFactor DstFactor
以下所有屬性都可以作為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 One OneMinusDstColor
- 比較柔和的相加
- Blend DstColor Zero
- 乘法
- Blend DstColor SrcColor
- 2倍乘法