前向渲染和延遲渲染的區別

2022-06-18 09:15:11 字數 912 閱讀 7303

前向渲染和延遲渲染是兩種光照渲染模式。

假設有1個光源和1000個具有光照反射的三角形在view coordinate沿著z軸正方形延伸擺放,法線與z軸平行,即所有三角形xy全相同,只有z不同,但是這裡增加乙個條件:擺放順序是無序的。

從螢幕上其實你只能看到乙個帶光照的三角形,其他的都被擋住了。

那麼前向渲染會這樣做:

遍歷1000個三角形片元

進行深度檢測,沒通過的忽略

通過檢測的進行光照計算

更新幀緩衝區

返回1繼續直到遍歷結束

由於上面的要求是無序擺放,那麼如果運氣差一點 1000次深度檢測全部都能通過,那麼光照會計算1000次,可是因為只能看見最上面的,那麼999次光照計算都是多餘的。如果光源越多第三步的重複次數越多,整體複雜度也會越高。

延遲渲染引入了gbuffer,它會這樣做:

遍歷1000個三角形片元

進行深度檢測,沒通過的忽略

通過的將座標、光照等資訊寫入gbuffer

返回1繼續直到遍歷結束

遍歷gbuffer

利用gbuffer中的資料進行光照計算

更新幀緩衝區

返回5繼續直到遍歷結束

延遲渲染先把可以顯示在螢幕上的畫素點的相關引數儲存下來,然後只進行了一次光照計算就實現了最終效果。這樣大大節約了光照計算複雜度。每增加乙個光源,只會增加一次整體的光照計算。所以延遲渲染的好處顯而易見了。

然而,世間無完美之事,gbuffer只能給螢幕上的每乙個點儲存乙份光照資料,但是如果這些三角形都是半透明的怎麼辦?

無解–# blend已廢。

由於gbuffer存的都是畫素值,無法體現出每個畫素對應的原始模型,那麼多重取樣抗鋸齒功能也無法實現。三角形可能還好點,畫圓就悲劇了。

所以如果各位大哥對blend混合和抗鋸齒有要求,那麼gbuffer可能就不太適合了。

Unity 前向渲染與延遲渲染

只要在攝像機設定下就可以了 由於我設定了9盞燈光,而unity buildin只支援4盞,所以顯示的燈光是錯誤的 由上圖可見 unity前向渲染的順序是 先做深度圖,我猜是為了做深度剔除,深度測試,避免重複繪製,然後在renderloop裡對每個物體進行光照法線計算 天空盒透明物體 後效貌似延遲渲染...

Unity中的前向渲染路徑和延遲渲染路徑

渲染路徑核心 光照處理。unity中光照 逐頂點 逐畫素 球諧光照。逐畫素光照 按照每個畫素的顏色被計算,看起來比較平滑 逐頂點光照 每個頂點上做光照,其他地方插值,效果粗糙。但是逐畫素光照中,每個光源會使每個光源光照範圍內的物體增加乙個渲染批次。延遲渲染可以解決逐畫素光照對光源造成的效能影響。延遲...

unity Shader前向渲染

unity shader前向渲染記錄,先說原理,後附 1 前向渲染的原理 兩個pass,乙個basepass主要負責 乙個addpass主要負責 2 對光源處理方式分類 unity在渲染每乙個物體之前都會根據光源的強度,顏色,距離物體的遠近以及光源對該物體的影響程度對場景中的所有光源進行乙個重要度排...