UnityShader開發之常見渲染路徑

2021-09-09 00:20:20 字數 1343 閱讀 5408

2. 渲染路徑

2.2. 延遲渲染

2.3 兩種模式的比較

光照估計是指從中獲取光照資訊,從而降低光照對紋理的影響。傳統的光照估計依賴於光源方向和法線方向的估計。

在vertex中計算光照顏色,每個頂點計算一次光照顏色,然後通過頂點在多邊形所覆蓋的區域對畫素的顏色進行線性插值。

在fragment中計算光照顏色,每個畫素都計算一次光照顏色。

曲面上的畫素值使用9維的球諧基函式進行線性表示,而這種光照模型只需要估計球諧基函式前面的權值,不需要光源的方向,大大簡化了光照的估計。

前向渲染是渲染物體的一種非常直接的方式,在場景中乙個乙個物體渲染過去,在計算深度的同時,也將顏色存入顏色緩衝中。

2.1.1原理
每進行一次完整的前向渲染,都需要渲染該物件的渲染圖元,並計算兩個緩衝區的資訊,乙個是顏色緩衝區,乙個是深度緩衝區。首先利用深度緩衝區還決定乙個片元是否可見,如果可見就更新顏色緩衝區中的顏色。

從原理中我們可以看出,如果要渲染乙個逐畫素光源,就需要執行多個pass,每個pass計算乙個逐畫素光源的光照結果,然後再幀緩衝中吧這些光照結果混合起來得到最終的顏色值。假設,場景中有n個物體,每個物體收到m個光源的影響,那麼要渲染整個場景一共需要n*m個pass。如果有大量逐畫素光照,那麼需要執行的pass數目也會很大。

延遲渲染是將著色計算延後進行處理的一種渲染方法,即先做深度檢測,將不需要的片元去除掉,再開始進行顏色的渲染。

2.2.1原理
延遲渲染主要包含了兩個pass。在第乙個pass中,我們不進行任何光照計算,而是僅僅計算那些片元是可見的,這主要是通過深度緩衝技術來實現,當發現乙個片元是可見的,我們就把他的相關資訊儲存到g快取區中。然後再第二個pass中,我們利用g緩衝區的各個片元資訊,例如表面法線、視角方向、漫反射係數等,進行真正的光照計算。

2.2.1缺點

1.不能處理半透明物體

2.不能支援真正的抗鋸齒

3.對顯示卡有一定要求

當場景中有n個物體,m個光源,那麼他們的複雜度對比為

渲染路徑

複雜度解釋

延遲渲染

o(n+m)

n個物體進行幾何緩衝計算,而後對每個光源根據幾何快取資料,於是加m

前向渲染

o(n*m)

每個物體都需要計算深度和光照,然後寫到顏色緩衝中,即n*m

Unity Shader之再談雜訊

對於雜訊其實我還有很多不懂的地方,比如random函式,比如雜訊的實際應用場景等等。於是在搜尋資料的時候我發現了兩個超超超牛b的 可以說是我這種想要去學習相關知識的人的福利 在這裡給自己標記一下同時也分享給大家 1.shadertoy創始人之一的奇淫巧計大集合 之前看shadertoy的時候,在驚嘆...

UnityShader之積雪效果

積雪效果是比較簡單的,只需要計算頂點法線方向和世界向上方向之間的點乘,將得到的值與預設的閥值比較,小於閥值為0,用這個值進行插值就ok了 1 shader myshader snowshader 紋理4 snownum snow num range 1,1 0 點乘閥值 5 snowintensit...

Unity Shader之Logo流光特效

遊戲開發中,經常會用到在封面對logo之類的進行流光特效,所以參考 unity技巧 logo閃光效果這篇文章修改了乙個細節。博主原來的 使用後,會發現 properties flashcolor flash color color 1,1,1,1 angle flash angle range 0,...