[翻译]延迟着色(1)
延遲著色是一種對3d場景進行后期照明的技術,這種技術突破了以往渲染系統支持多重動態光源時,效率以及各種性能急劇下降的的限制。從而使得一個3d場景可以支持成百上千個動態光源的效果。
它的技術思路主要將3d場景的幾何光照信息(位置、法線、材質信息)渲染到render target上,把它們從世界的三維空間轉變成屏幕的顏色空間,作為光照計算時的輸入,接著,對每一個光源,使用這些信息輸入來進行計算生成一幀,然后把這樣的一幀(render target)合成到結果的幀緩存上,這樣當遍歷完所有的光源,計算就完畢了,幀緩存上的圖像就是最后的渲染結果。
概述:延遲著色的優勢
1.?它能讓你在繪制幾何圖形的時候不需要為任何光照方面的問題所擔憂。
2.?使用多個渲染流程將像素的多種格式,比如空間坐標,法線渲染到各自得目標緩沖中去。
3.?利用第2點中提到的渲染數據對像素進行著色計算,仿佛在2D圖形空間中進行繪制一樣。
傳統單通路光照(影響物體的所有光照在一個shader pass中完成)有哪些特點?
1.?光源數量極少的場景中傳統渲染方式能工作得很好,比如只有太陽光的野外場景。
2.?在光源很多的時候,非常難于對光照進行管理。
3.?由于所有光照都在一個shader里完成,所以shader指令數目一個不小心就超過了GPU限制。
傳統多通路光照(指每個光源對物體的影響是分開pass中完成的)有哪些特點?
1.?復雜度太高,計算完所有光照需要 物體數目 × 光源數目 個pass。
2.?不論是按物體,還是按光源進行分批都是相當麻煩的。
3.?理論上講,光源應該按它們的作用范圍對場景進行分割管理,但如果按多通路計算光照,動態光源將相當難處理。
延遲著色有哪些特點?
For each object:
????Render to multiple targets
For each light:
????Applylight as a 2D postprocess
1.?復雜度適中,需要物體數目 + 光源數目 個pass。
2.?易于分批計算。
3.?多個小范圍光源和一個大范圍光源計算量差不多(因為每象素影響光源數一樣)。
我們需要哪些渲染目標緩沖?
1.?我們需要如下幾何渲染結果:
???? ?-空間坐標
??????-法線數據
??????-材質參數(漫反射顏色,自發光顏色,高光顏色及高光衰減系數等)
2.延遲著色不是適用于需要特別多輸入參數的光照計算(比如球面調和函數的光照計算)。
?
“胖的”幀緩沖
各種幀緩沖的格式:
????–空間坐標?????????A32B32G32R32F
????–法線??????????????A16B16G16R16F
????–漫反射顏色??????A8R8G8B8
????–材質參數???????? A8R8G8B8
每個像素占用256字節,在不使用抗鋸齒的情況下,1024×768要占用24M的空間。目前現在的硬件也不支持多個不同格式的幀緩沖。
優化幀緩沖尺寸
?????–使用A2R10B10G10格式來存儲法線。
?????–可以利用調色板機制來存儲材質屬性,利用索引來取得所要的值。
?????–完全沒有必要用一個VECTOR3在存儲像素的空間位置,因為我們知道相機的空間位置,并且知道像素在屏幕空間中的坐標,這樣我們只需要還知道相機到像素的距離,就可以求得像素的空間3D坐標了。
我的幀緩存格式的選擇
?128 bits per pixel=12 meg @ 1024x768:
????–Z深度????????????????????????????? R32F
????–法線和散射???????????????????????A2R10G10B10
????–漫反射顏色 + 自發光顏色????A8R8G8B8
????–其他材質參數????????????????????A8R8G8B8
我的材質參數有:高光強度,高光系數,遮擋因子和陰影數量,我還使用了法線緩沖alpha通道中的2bit來控制次表面散射。
轉載于:https://www.cnblogs.com/lancidie/archive/2011/07/19/2110842.html
總結
以上是生活随笔為你收集整理的[翻译]延迟着色(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 出现Got error 28
- 下一篇: CentOS-6.0下安装配置Cacti