天天看點

UnityShader 混合操作(Blending)

混合操作(Blending)

    混合操作最常見的用途便是用來制作透明物體、或者進行紋理混合。它是Shader渲染的最後一步

UnityShader 混合操作(Blending)

如上圖所示,正被渲染的像素經過頂點光照、頂點着色器、剔除和深度測試、霧效、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倍乘法

繼續閱讀