2019-12-7 深度寫(xiě)入下的半透明效果/混合命令
之前的透明度混合是存在bug的,因?yàn)殛P(guān)閉了深度寫(xiě)入(ZWrite) ,所有模型自身會(huì)對(duì)自身產(chǎn)生透明效果(即視野內(nèi)模型的重復(fù)處, 如下)

而解決它的方法就是使用兩個(gè)Pass,一個(gè)是正常的關(guān)閉深度寫(xiě)入的AlphaBlend,另一個(gè)則是開(kāi)啟深度寫(xiě)入并但是不輸出顏色, 它的目的僅僅是為了把該模型的深度值寫(xiě)入深度緩沖之中;而之后的Pass就可以按照像素級(jí)別的深度排序結(jié)果進(jìn)行透明渲染。

開(kāi)啟深度寫(xiě)入后的Alpha混合就不會(huì)出現(xiàn)物體自身對(duì)自身的透明了。
ColorMask的意義在于,它之后的值代表著顏色通道的掩碼(R,G,B,A),而當(dāng)它之后的數(shù)字為0時(shí),則該P(yáng)ass不會(huì)寫(xiě)入任何顏色通道,也不會(huì)輸入任何顏色。
混合命令
只需要理解這一個(gè)公式
O(輸出)= SrcFactor(源顏色的混合因子)* S (source color源顏色) + DstFactor(目標(biāo)顏色/緩沖區(qū)顏色的混合因子)* D(destination color 目標(biāo)顏色/緩沖區(qū)顏色)
O.a的輸入輸出同理,只是a代表的是alpha值而已。
即 輸出等于輸入顏色乘輸入混合因子 加上 目標(biāo)顏色乘輸出混合因子
而這些混合因子只是一個(gè)參數(shù),它可以是one zero srcColor SrcAlpha等等等等
混合語(yǔ)句真正在代碼中的實(shí)現(xiàn):
Blend SrcFactor DstFactor SrcFatcotA DstFactorA
例如:
Blend SrcAlpha OneMinusSrcAlpha, One Zero
其中
SrcAlpha:源顏色的混合因子
OneMinusSrcAlpha:目標(biāo)顏色的混合因子
One:源a值的混合因子
Zero:目標(biāo)a值的混合因子
該命令代表混合后輸出的顏色的透明度為源顏色的透明度
然而,混合命令除了默認(rèn)的Add操作之外,還可以指定其他的操作,例如Sub,RevSub(混合后的源顏色減去混合后的目標(biāo)顏色),Max,Min等等。
雙面渲染效果
兩種效果下實(shí)現(xiàn)實(shí)現(xiàn)
第一種是在Alpha測(cè)試下,關(guān)閉Cull(剔除)功能,即渲染雙面。

可以直接得到不透明物體的內(nèi)部渲染效果

另一種是在Alpha混合下,這個(gè)情況下由于關(guān)閉了ZWrite,所以無(wú)法使用單獨(dú)關(guān)閉Cull的方法。
解決方法是使用另一個(gè)Pass,分別剔除前面Cull Front,剔除后面 Cull Back
這樣得到了渲染了雙面的效果。
