UnityShader開發之透明與混合因子

1.渲染順序

        對於開發具有透明效果的Shader而言,渲染順序十分重要,爲了解決渲染順序的問題,Unity提供了渲染隊列:

        

名稱 描述
Background 這個渲染隊列會在任何其他隊列之前被渲染,我們通常使用該隊列來渲染那些需要繪製在背景上的物體
Geometry 默認的渲染隊列,大多數物體都是用這個隊列,不透明物體使用這個隊列
AlphaTest 需要透明度測試的物體使用這個隊列,在所有不透明物體渲染之後再渲染他們會更高效
Transparent 這個隊列中的物體會在所有Geometry和AlphaTest物體渲染後,再按從後往前的順序進行渲染,任何使用了透明度混合(例如關閉了深度寫入的Shader)的物體都應該使用該隊列
OverLay 該隊列用於實現一些疊加效果,任何需要在最後渲染的物體都應該使用該隊列。

 

2.透明度測試

        只要一個片元的透明度不滿足條件(通常是小於某個閾值),那麼它對應的片元就會被捨棄。被捨棄的片元將不會在進行任何處理,也不會對顏色緩衝產生任何影響;否則,就會按照普通的不透明物體的處理方式來處理它。

 

3.透明度混合

        它會使用當前片元的透明度作爲混合因子,與已經存儲在顏色緩衝中的顏色值進行混合,得到新的顏色,但是,透明度混合需要關閉深度寫入,這時的我們要非常小心物體的渲染順序。

        Blend語義:

語義 描述
Blend Off 關閉混合
Blend SrcFactor DstFactor 開啓混合,並設置混合因子,源顏色(該片元產生的顏色)會乘於SrcFactor,而目標顏色(已經存在於顏色緩存的顏色)會乘以DstFactor,然後把兩者相加後再存入顏色緩衝中
Blend SrcFactor DstFactor,SrcFactorA DstFactorA 和上面幾乎一樣,只是使用不同的因子來混合透明通道
BlendOp BlendOperation 並非是把源顏色和目標顏色簡單地加減後混合,而是使用BlendOperation來對他們進行其他操作

        混合因子:

參數 描述
One 因子爲 1
Zero 因子爲 0
SrcColor 因子爲源顏色值,當用於混合RGB通道的混合等式時,使用SrcColor的RGB分量作爲混合因子;當用於混合A的混合等式時,使用SrcColor的A分量作爲混合因子
SrcAlpha 因子爲源顏色的透明度值(A通道)
DstColor 因子爲目標顏色值。當用於混合RGB通道的混合等式時,使用DstColor的RGB分量作爲混合因子;當用於混合A的混合等式時,使用DstColor的A分量作爲混合因子
DstAlpha 因子爲目標顏色的透明度值(A通道)
OneMinusSrcColor 因子爲(1-源顏色)。當用於混合RGB通道的混合等式時,使用結果的的RGB分量作爲混合因子;當用於混合A的混合等式時,使用結果的A分量作爲混合因子
OneMinusSrcAlpha 因子爲(1-源顏色的透明度值)
OneMinusDstColor 因子爲(1-目標顏色)。當用於混合RGB通道的混合等式時,使用結果的的RGB分量作爲混合因子;當用於混合A的混合等式時,使用結果的A分量作爲混合因子
OneMinusDstAlpha 因子爲(1-目標顏色的透明度值)

        BlendOperation:

操作 描述
Add

將混合後的源顏色和目標顏色相加。默認的混合操作。使用的混合等式是:

O_{rgb}=SrcFactor *S_{rgb}+DstFactor *D_{rgb}

O_{a}=SrcFactorA *S_{a}+DstFactorA *D_{a}

Sub

將混合後的源顏色減去混合後的目標顏色。使用的混合等式是:

O_{rgb}=SrcFactor *S_{rgb}-DstFactor *D_{rgb}

O_{a}=SrcFactorA *S_{a}-DstFactorA *D_{a}

RevSub

將混合後的目標顏色減去混合後的源顏色。使用的混合等式是:

O_{rgb}=DstFactor *D_{rgb}-SrcFactor *S_{rgb}

O_{a}=DstFactorA *D_{a}-SrcFactorA *S_{a}

Min

使用源顏色和目標顏色中較小的值,是逐分量比較的,使用的混合等式爲:

O_{rgba}=(min(S_r,D_r),min(S_g,D_g),min(S_b,D_b),min(S_a,D_a))

Max O_{rgba}=(max(S_r,D_r),max(S_g,D_g),max(S_b,D_b),max(S_a,D_a))​​​​​​​

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章