我有一個主要問題,一直在竊聽我一段時間。DirectX alpha混合(延遲渲染)
我的問題是我的遊戲使用延遲渲染引擎,這使得它很難做alpha混合。
我能想到解決這個問題的唯一方法是渲染場景(包括深度圖,法線貼圖和漫反射貼圖),而不需要任何具有alpha的對象。
然後,對於每個具有alpha分量紋理的多邊形,禁用z緩衝區並將其渲染出來,包括法線,深度和顏色,以及alpha值爲0的任何位置不向深度,法線和顏色緩衝區。對這兩個單獨的紋理執行照明計算/其他延遲效果,然後使用深度圖組合顏色緩衝區以檢查哪個像素是可見的。
這個想法非常昂貴(更不用說有一些嚴重缺陷),顯然應該只保留儘可能少的情況,這使得渲染森林區域成爲可能。但是,如果沒有更好的解決方案,我有一個問題。
當用directx做alpha混合時,是否有着色器/設備狀態可以設置,這樣我就可以避免在想要的時候寫入深度/標準/顏色緩衝區?問題是像素着色器必須輸出到指定的所有渲染目標,因此如果它設置爲輸出到3個渲染目標,它必須執行它,這將覆蓋該紋理中該紋理像素的先前顏色值。
如果沒有混合狀態允許我這樣做,這將意味着我將不得不復制正常,紋理和深度圖以保留場景,然後渲染到新的紋理,深度和法線貼圖,然後合併基於alpha和深度值的兩種紋理。
我想我真的想知道的是,如果在延遲渲染器中有一種簡單的可靠且可能便宜的方法來呈現alpha,