Forward框架的逆袭:解析Forward+渲染
AMD在7900系列顯卡發(fā)布的時(shí)候同時(shí)推出了Leo demo, 并說明它不是用近年流行的Deferred框架渲染完成,而是用到了一種叫Forward+的框架。這個(gè)框架不需要Deferred的大帶寬要求,卻仍能 實(shí)時(shí)渲染上千光源。EG2012上有篇新paper叫做Forward+: Bringing Deferred Lighting to the Next Level,講述的就是這個(gè)方法。但目前作者還沒有放出該論文的全文,這里我只能通過只言片語(yǔ)和AMD的文檔來解析這個(gè)神奇的Forward+。
Tiled-based Deferred Shading
在進(jìn)入正題之前,我們先回顧一下Intel在SIGGRAPH Courses 2010里提到的Tiled-based Deferred Shading。它的算法框架是:
在原先的deferred框架下,每個(gè)light需要畫一個(gè)light volume,以決定它會(huì)影響到哪些pixel(也就是light culling)。而用tiled based的方法,只需要一個(gè)pass就可以對(duì)所有的光源進(jìn)行求交。如果用了AMD在Mecha demo中用到的OIT方法,還可以做一個(gè)per-tile linked list,直接把light序列存在鏈表里。
Forward+ Rendering
有了Tiled-based Deferred Shading的基礎(chǔ),理解Forward+就變得簡(jiǎn)單多了。Forward+ Rendering和Tiled-based Deferred Shading的關(guān)系就好比原先的Forward Shading和Deferred Shading,所以我們可以照貓畫虎一次:
從這里可以看出,前兩步與Tiled-based deferred shading大同小異,但只需要Z-Buffer,而不需要很消耗帶寬的G-Buffer(G-Buffer最小也要32bit color + 32bit depth)。第三步是完全一樣的。第四部由于用了forward,可以有forward的各種好處:
- 復(fù)雜材質(zhì)
- 支持硬件AA(雖然我一直認(rèn)為硬件AA多算了很多東西,是一種巨大的浪費(fèi))
- 帶寬利用率高
- 支持透明物體
由于light已經(jīng)在步驟3中cache了,所以也可以不像傳統(tǒng)的forward那樣,把材質(zhì)和光源攪在一起。加上shader中動(dòng)態(tài)分支的能力, 不難實(shí)現(xiàn)類似deferred那樣的巨量光源支持。由于帶寬省了很多,Forward+的速度能比Deferred快。在原paper里的性能比較足以說 明這個(gè)問題。
另一個(gè)有趣的地方是透明物體的渲染。雖然我在KlayGE中用Deep G-Buffer的方法解決了純Deferred下透明物體的渲染。 正如很多讀者指出的,這么做所帶來的帶寬翻倍在很大程度上拖慢了整個(gè)系統(tǒng)。在Forward+中,第一步生成Z-prepass的時(shí)候,可以采用雙Z- Buffer的辦法,一個(gè)放不透明物體的Z,另一個(gè)放透明物體的Z。在第二步計(jì)算tile bounding box的時(shí)候,不管透不透明都放在一起計(jì)算一個(gè)總的bounding box。后面步驟不變,就能原生支持透明物體。
由于有了Z-Buffer,其他原先對(duì)Deferred有利的效果,比如GI、SSR,都可以直接應(yīng)用。SSAO、SSVO之類的方法,如果需要考慮pixel normal,就需要適當(dāng)?shù)男薷牟拍軕?yīng)用上。
在AMD的demo中,步驟2和3是用compute shader實(shí)現(xiàn)的。而在Tiled-based Forward Rendering這篇blog中,他完全用PS實(shí)現(xiàn)了per-tile linked list,但仍然需要D3D11的UAV特性。所以Forward+還沒法再D3D11之前的硬件上實(shí)現(xiàn)。
總結(jié)
所謂三十年河?xùn)|三十年河西,作為Forward框架的新發(fā)展,Forward+給我們提供了一個(gè)新思路。這樣的競(jìng)爭(zhēng)性發(fā)展總比所有資源都投到一方、忽視另一方要好。
從貢獻(xiàn)程度來看,最有突破性的其實(shí)不是Forward部分,其實(shí)是Tiled-based。Forward+只能算作Tiled-based Deferred Shading的“Forward化”。順便說一下,很多移動(dòng)平臺(tái)的GPU在硬件上支持Tiled-based Rendering(TBR),也是利用它來最大化計(jì)算相關(guān)性和帶寬利用率。不支持TBR的Tegra就吃虧許多了。
轉(zhuǎn)載于:https://www.cnblogs.com/gongminmin/archive/2012/04/22/2464982.html
總結(jié)
以上是生活随笔為你收集整理的Forward框架的逆袭:解析Forward+渲染的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下连接smb服务器
- 下一篇: java断言assert