GPU Gems1 - 15 逐像素光照的可见性管理
這章講到了可見性在逐像素渲染光照場景中的作用,也考慮如何使用可見性減少必須渲染的批次數(shù)量,從而改善性能。
假設(shè)一個非常簡單的場景,一個房間,因為房間的不同部位是不同的材質(zhì),所以將其分為8個batch,另外在房間中還有3個不同的模型,每個模型又分成兩個batch,房間里還有3個光源。
對于此場景,為了建立場景的深度值和應(yīng)用環(huán)境或發(fā)射光照,必須將所有的batch渲染一次,即 8 + 3*2 = 14.針對每個光源,為陰影要渲染一次,為真實的光照再渲染一次,因此這個簡單場景所需的總批次為:14?+? 14 * 3 + 14 * 3 = 98.
如下偽代碼說明在一個場景中必須渲染的批次數(shù):
For each visible objectFor each pass in the ambient shaderFor each visible batch in the objectRender batch For each visible lightFor each visible shadow casterFor each pass in the shadow shaderFor each shadow batch in the objectRender batchFor each lit visible objectFor each pass in the light shaderFor each visible batch in the objectRender batch正如偽代碼所述,為了減少批次數(shù),可以進行一些與非可見性相關(guān)的優(yōu)化。最應(yīng)該優(yōu)化的是渲染每個光照所必須的通道數(shù)。批次數(shù)隨通道數(shù)線性增加,因此,我們應(yīng)該最小化受限于CPU的游戲通道數(shù)。
我們可以使用可見性來減少批數(shù)。其中,為了減少批次,各個部分(可見部分、光源部分、光照部分、陰影部分)的集合分開討論并生成。
- 可見集合:由攝像機的視點可見的所有物體組成,定義為V。
- 光源集合:由光源位置作為視點出發(fā),光源可見物體的集合L。
- 照明集合:V和L的交集I,即既在攝像機可見,又能接收到光源光照。
- 陰影集合:L的一個子集S,它包括向可見區(qū)投射陰影的所有物體。如下圖所示,V視椎外的shadow Caster投射的陰影確在V中,這個shadow caster就屬于集合S
?
對于集合S如何確定,本文介紹了convex hull(光源的凸包)如何計算,如下圖所示:
可見性不僅能有效改善CPU的性能,也同樣可以改善GPU的性能。對模板體執(zhí)行逐像素光照時,填充率的消耗(模板體的填充或多次渲染大的物體)很快就變成了瓶頸,但可以使用剪切矩形(scissor rectangle)限制顯卡渲染的面積,解決此問題。(這段沒太看懂)
逐像素的照明需要大量的批次數(shù)和極高的填充率,所以要減少渲染的物體數(shù)和它們影響的屏幕面積。而使用這章中介紹的標(biāo)準(zhǔn)可見性算法和技術(shù),可以充分改善運行性能。
總結(jié)
以上是生活随笔為你收集整理的GPU Gems1 - 15 逐像素光照的可见性管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bndtools教程
- 下一篇: AD smart pdf 中文丢失