unity Shader前向渲染

2021-10-05 11:25:10 字數 2062 閱讀 1333

unity shader前向渲染記錄,先說原理,後附**

(1)前向渲染的原理:

兩個pass,乙個basepass主要負責:

乙個addpass主要負責:

(2)對光源處理方式分類:unity在渲染每乙個物體之前都會根據光源的強度,顏色,距離物體的遠近以及光源對該物體的影響程度對場景中的所有光源進行乙個重要度排序,然後根據排序的結果以及quality settings等將會決定這些光源的處理方式;

qualitysettings中定義個逐畫素光照的最大數量(雖然可以通過設定light的rendermode增加數量):如圖設定為最大4個逐畫素光源

(3)那麼,上圖中的「4」是如何計算和限制逐畫素光源數量的呢?如圖:

當設定為「notimportant」時,此光源肯定不為逐畫素光源。

(4)逐頂點光源的計算:

(5)關於pass內光照的計算的細節:

(6)開啟framedebug多嘗試修改檢視draw狀態:

感覺沒什麼好說的了,多動手測試,下面附上測試的shader**:

shader "unlit/001"

subshader

lod100 pass

cgprogram

#pragma multi_compile_fwdbase

#pragma vertex vert

#pragma fragment frag

#include

"unitycg.cginc"

#include

"lighting.cginc"

#include

"autolight.cginc"

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

;struct v2f

; fixed4 frag (v2f i)

: sv_target

endcg

} pass

blend

oneone

cgprogram

#pragma multi_compile_fwdadd

#pragma vertex vert

#pragma fragment frag

#include

"unitycg.cginc"

#include

"lighting.cginc"

#include

"autolight.cginc"

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

struct a2v

;struct v2f

; v2f vert

(a2v v)

fixed4 frag

(v2f i)

:sv_target

endcg}}}

Unity 前向渲染與延遲渲染

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

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

前向渲染和延遲渲染是兩種光照渲染模式。假設有1個光源和1000個具有光照反射的三角形在view coordinate沿著z軸正方形延伸擺放,法線與z軸平行,即所有三角形xy全相同,只有z不同,但是這裡增加乙個條件 擺放順序是無序的。從螢幕上其實你只能看到乙個帶光照的三角形,其他的都被擋住了。那麼前向...

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

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