2010-10-10 174 views
2

我有一個主要問題,一直在竊聽我一段時間。DirectX alpha混合(延遲渲染)

我的問題是我的遊戲使用延遲渲染引擎,這使得它很難做alpha混合。

我能想到解決這個問題的唯一方法是渲染場景(包括深度圖,法線貼圖和漫反射貼圖),而不需要任何具有alpha的對象。

然後,對於每個具有alpha分量紋理的多邊形,禁用z緩衝區並將其渲染出來,包括法線,深度和顏色,以及alpha值爲0的任何位置不向深度,法線和顏色緩衝區。對這兩個單獨的紋理執行照明計算/其他延遲效果,然後使用深度圖組合顏色緩衝區以檢查哪個像素是可見的。

這個想法非常昂貴(更不用說有一些嚴重缺陷),顯然應該只保留儘可能少的情況,這使得渲染森林區域成爲可能。但是,如果沒有更好的解決方案,我有一個問題。

當用directx做alpha混合時,是否有着色器/設備狀態可以設置,這樣我就可以避免在想要的時候寫入深度/標準/顏色緩衝區?問題是像素着色器必須輸出到指定的所有渲染目標,因此如果它設置爲輸出到3個渲染目標,它必須執行它,這將覆蓋該紋理中該紋理像素的先前顏色值。

如果沒有混合狀態允許我這樣做,這將意味着我將不得不復制正常,紋理和深度圖以保留場景,然後渲染到新的紋理,深度和法線貼圖,然後合併基於alpha和深度值的兩種紋理。

我想我真的想知道的是,如果在延遲渲染器中有一種簡單的可靠且可能便宜的方法來呈現alpha,

回答

1

在延遲渲染器中繪製透明幾何圖形的常用方法是在單獨的通道中繪製它們,但使用通常的向前渲染而不是延遲渲染。