延遲着色
此條目沒有列出任何參考或來源。 (2011年4月19日) |
在電腦圖形領域,延遲着色(deferred shading)是一種在三維空間中着色的技術。這種着色的演算法把目標分成很多的小塊寫入中間緩衝儲存區,而後再合併。這種方法區別於直接把着色結果寫進顏色的幀數緩衝里。在目前的硬件中,傾向於使用多重的彩現目標去避免重複轉換向量點。一旦所有需要的緩衝建好,就直接被讀進一種着色演算法中,合併在一起從而得出最後的結果。 這樣,着色一個場景所需的計算和主記憶體的頻寬被減少到了這些可見的部分中,從而降低了着色深度的複雜性。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Deferred_rendering_pass_col.jpg/220px-Deferred_rendering_pass_col.jpg)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Deferred_rendering_pass_dep.jpg/220px-Deferred_rendering_pass_dep.jpg)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Deferred_rendering_pass_nor.jpg/220px-Deferred_rendering_pass_nor.jpg)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Deferred_rendering_pass_res.jpg/220px-Deferred_rendering_pass_res.jpg)
優勢
編輯延遲着色的主要優勢因為Z-buffer出現而有所減少,但是其他的一些優點還是毋庸質疑。比如提供了一種簡單的管理複雜光源的方法,去除了其他複雜的着色源的管理,讓彩現流程更加簡單。這些在開發軟件的過程中由開發者去決定的相對來說比較小的優勢,導致了無止境的爭論。
延遲着色的一個特別的用途在於推遲光照。彩現目標為了光照的着色,會呼叫一個G-buffer去儲存各種參數。通常儲存的數據是顏色,表面的法向和觀察的位置。無論在加光照的步驟里是不是需要這些數據,他們理論上是可以存起來的。
缺陷
編輯因為使用了多重的彩現目標,常佔用一個浮點,導致使用主記憶體的頻寬會比直接彩現的技術多。現代圖形硬件的數學計算比主記憶體的存取快。再加上在未來的硬件中,可能數學計算和主記憶體的表現會有更大的偏重, 這就導致了延遲着色技術可能不是一個長久的解決方案。
延遲着色的另一個重要的缺陷在於它不能計算透明。雖然這個問題在Z-buffer場景中是普遍存在的,一般會用延遲和排序的方法彩現場景中透明的部分。
延遲光照
編輯延遲光照(也稱為Light Pre-Pass)是對延遲着色的修改。此技術需要三步,而不是延遲着色的兩個。在第一次繪製場景幾何體時只逐像素輸出照明所需的屬性至G緩衝,螢幕空間「延遲」光照後僅輸出漫反射和高光反射的光照數據,因此必須進行第二次繪製以讀回光照數據並輸出最終的每像素着色結果。延遲照明的明顯優勢是G-Buffer的尺寸急劇減小,顯而易見的成本是需要繪製場景兩次,此外延遲照明中的延遲傳遞必須分別輸出漫反射和高光反射,而延遲着色僅需要輸出單個組合的輻射度。
由於G緩衝區尺寸的減小,這種技術可以部分克服延遲着色的一個嚴重缺點 - 多材料。另一個可以解決的問題是MSAA,因為可以不依賴MRT延遲光照可以在DirectX 9硬件上使用MSAA。