Deferred Rendering(二)G-Buffer的組織

先來看一張網上廣爲流傳的《殺戮地帶2》典型的Deferred Shading的G-Buffer組織:


這裏補充解釋下幾個點
G-Buffer還是太臃腫了:
  • MRT技術是有,但不代表其優。無論是AMD,還是NVida的優化文檔上都說了要儘量避免MRT這回事
  • 複雜的渲染方案必須需要對應着一大堆參數要塞進MRT中
  • 如果引擎中的物件渲染風格不一樣(比如RGame),必定需要額外的空間來存儲類似MaterialID這樣的東西,靈活性不夠
因此Deferred Lighting的思想被提了出來:
  • 對比deferred shading : deferred shading 是將所有的shading都移到deferred 階段進行
  • deferred lighting的本質:deferred lighting的deferred階段只進行lighting計算,從而和材質無關。
  • 最大好處:節省帶寬。
  • 現在的G-Buffer:normal--保存兩個float16分量;position--由深度重建而深度保存在depth texture所以這裏不佔用G-Buffer;specular factor。只需要一張RT足矣。
  • lighting pass的輸出: 累積的diffuse + 累計的specular 亮度(只能犧牲掉specular的顏色了)
  • 遺憾:最終的着色還是需要額外的pass,前一篇提到的“屏幕空間的、與幾何體複雜度無關的O( m + n) 的計算優勢”只能運用到lighting計算上。
總結:
  • Deferred shading : 伴隨着MRT有巨大的帶寬消耗,靈活性也不佳,發展前途不大;
  • Deferred lighting : 雖然只有光照計算是屏幕空間的,且相對Deferred shading每個物體多了1個pass;但節省帶寬且相當靈活,目前是各大引擎的上上選。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章