上一篇講了TBDR的實現,本篇繼續講解deferred rendering層的一些重要改進。性能
原先deferred系統用的是VSM,如今切換到開銷更小的ESM。具體參見我以前的一篇文章。用ESM以後只須要一個通道,空間佔用減小,性能也有所提高。下個版本會進一步改爲支持打包到RGBA8的紋理,讓不支持浮點紋理的硬件也可使用ESM。編碼
KlayGE很早就引入了multi-resolution的概念,用來加速SIL的GI。但原先的MR、SIL和Deferred綁在了一塊兒。從上一版開始,MRSIL從Deferred獨立出來以後,這個版本繼續改進,把MR和SIL也分開了。如今MR能夠用於其餘地方,好比SSGI。本來SSVO也打算上MR,但後來來不及改了。spa
這個分離的思路是,MR層負責維護多層的分離和合並,而至於具體在每一層上作什麼操做,由使用MR層的組件決定。這麼一來,理論上甚至連Deferred均可以用MR來加速。code
去年,Gameloft的大牛凃鳴就提議過對於小物體應該在一些渲染的狀況下忽略掉,而且找到了快速計算AABB投影面積的方法。這個版本也做了這樣的改進,經過AABB的投影面積做判斷,小於一個threshold就不放入渲染隊列。這個threshold是以不影響可見效果來調整的。目前只有生成shadow map的時候threshold > 0,其餘時候仍是保守地設置爲0。隊列
在不少平臺上,窗口大小是不禁程序控制的。這個時候若是但願保持統一的輸出大小,就須要一個放縮。因此這個版本在流水線的末端增長了resize一步。前不久我也專門寫過一個介紹放縮的文章,裏面有關於resizer的細節。之後有可能進一步發展成支持dynamic resolution的放縮。遊戲
關於deferred的改進就講到這裏,下一篇將講高質量的地形渲染。get