渲染路徑

決定光照的實現方式,即當前渲染目標使用光照的

流程

渲染方式

前向渲染(Forward Rendering)

TA學習-前向渲染和延遲渲染

TA學習-前向渲染和延遲渲染

前向渲染流程

渲染每一幀時,每個頂點/片元都要執行一次片元著色器程式碼,這時需要將所有光照資訊傳遞到

片元著色器

。(頂點著色也在片元著色器中計算)

計算時所有光源都會考慮進去。即使距離很遠,影響很小也會計算,造成浪費。

正向渲染規則:

最亮的幾個光源被實現為畫素光照

最多4個光源被實現為頂點光照

剩下光源被實現為球諧光照

參考連結:鵝廠程式小哥:Real-Time Rendering筆記(6):正向渲染和延遲渲染

延遲渲染(Deffered Rendering)

TA學習-前向渲染和延遲渲染

解決

大量光照

渲染的方案。

先找到能看到的所有畫素,再去迭代光照,而不是迭代三角形做光照計算。

先把物體資訊繪製到G-Buffer(相當於一張RT)再進行計算。

TA學習-前向渲染和延遲渲染

延遲渲染流程

渲染過程拆分成兩個pass

第一個pass:幾何處理通路。

首先將場景渲染一次,獲取到待渲染物件的各自幾何資訊,儲存到G-Buffer。

由於有深度測試,最終寫入G-Buffer的都是

離攝像機最近

的片元的幾何屬性,這些片元必定要進行光照計算。

第二個pass:光照處理通路

遍歷所有G-Buffer中的位置、顏色、法線等引數,執行一次光照計算。光照計算相當於2D的光照後處理。

渲染透明物體:還是用前向渲染方式最後渲染透明的物體。

G-Buffer

指包含顏色、法線、世界空間座標等的緩衝區。

TA學習-前向渲染和延遲渲染

G-buffer(g-geometry)

unity urp不支援延遲渲染。(經評論修改,12。0版本的urp已經支援延遲渲染啦)

UE新建專案預設延遲渲染。

不同渲染路徑的特性

後處理方式不同。需要深度資訊進行後處理時,前向渲染需要單獨渲染一張深度圖;延遲渲染直接從G-buffer中的深度圖進行計算。

著色計算不同(shader)。延遲渲染光照計算統一在Lighting Pass裡計算,只能用一個光照模型,需要其它光照模型只能切換pass。

抗鋸齒方式不同。

不同渲染路徑的優劣

TA學習-前向渲染和延遲渲染

移動端最佳化

TA學習-前向渲染和延遲渲染

TBDR:分塊式延遲渲染。

第一個:

TA學習-前向渲染和延遲渲染

分塊渲染,減少頻寬瓶頸

第二個:透過做一些可見性測試減少Overdraw。

其它渲染路徑

延遲光照(Light-Pre-Pass/Deffered Lighting)

跟延遲渲染相比,用更少的Buffer資訊。

著色計算時用的是Forward,可以對每個物體使用不同shader渲染,支援多種光照模型。

Foward+(Tiled Forward Rendering 分塊正向渲染)

用分塊索引的方式,利用到深度和法線資訊拿到需要進行光照計算的片元,進行光照計算。

減少頻寬,支援多光源,強制需要一個preZ。

群組渲染 Clustered Rendering

分為Forward和Deffer兩種,頻寬相對減少,多光源下效率提升。

MSAA

MSAA在延遲渲染中的問題:畫素已經被光柵化,因此無法用更大的畫素來渲染。

PreZ/Z prepass和深度圖

待補充,之後有時間了再研究一下