現在很多動漫和好萊塢大片都必不可少的一種技術的有關3DMAX的后期技術:延遲著色。今天我在精英工程的CG動漫博客上面跟大家分享下有關的內容。延遲著色是一種對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的空間。目前現在的硬件也不支持多個不同格式的幀緩沖。
優化幀緩沖尺寸