Shader筆記9 更複雜的光照 四種渲染路徑

2021-09-28 11:27:53 字數 2334 閱讀 2941

總結unity5.0版本之前,有3中渲染路徑:

設定整個專案的渲染路徑:edit -> project srtting -> player -> other setting -> rendering path 中選擇專案所需的渲染路徑

使用多個渲染路徑,可以讓攝像機覆蓋project setting中的設定

若當前顯示卡並不支援所選擇的渲染路徑,unity會自動使用更低一級的渲染路徑,比如:若乙個gpu不支援延遲渲染,則會使用前向渲染

lightmode標籤支援的渲染路徑設定選項

使用了渲染路徑,則使用unity提供的內建光照變數來訪問這些屬性,不然一些光照變數可能不會被正確賦值

原理渲染該物件的渲染圖元,計算兩個緩衝區的資訊:顏色緩衝區和深度緩衝區。

利用深度緩衝確定乙個片元是否可見,若可見就更新顏色緩衝區中的顏色值。

前向渲染路徑有3中處理光照(即照亮物體)的方式:逐頂點處理、逐畫素處理、球諧函式(sh)處理處理方式取決於型別和渲染模式:

在前向渲染中,當我們渲染乙個物體時,unity會根據場景中各個光源的設定以及這些光源對物體的影響程度(例如,距離該物體的遠近、光源強度等)對這些光源進行乙個重要度排序。

其中,一定數目的光源會按逐畫素的方式處理,然後最多有4個光源按逐頂點的方式處理,剩下的光源可以按sh方式處理。

unity 使用的判斷規則如下:

前向渲染可以使用的內建光照變數(lightmode為forwardbase或forwardadd)

前向渲染可以使用的內建光照函式

對硬體配置要求最少,運算效能最高,效果最差

不支援逐畫素才能得到的效果,比如陰影,法線對映,高精度的高光反射

只是使用了逐頂點的方式計算光照,是前向渲染路徑的乙個子集,在頂點照明渲染路徑實現的功能都可以在前向渲染路徑中完成

渲染了頂點照明渲染路徑,unity只會填充那些逐頂點相關的光源變數,不可以使用一些逐畫素光照變數

頂點照明渲染路徑通常在乙個pass中就可以完成對物體的渲染

頂點照明渲染路徑中可使用的內建變數

ps:1.乙個pass最多可以訪問到8個逐頂點光源,若影響該物體的光源數目小於8,那麼陣列中剩下的光源顏色會設定為黑色

2.一些變數也可以在前向渲染中使用,例如unity_lightcolor,不過這些變數陣列的維度和數值在不同渲染路徑中的值是不同的

頂點照明渲染路徑中可使用的內建函式

當場景中包含大量的實時光源時,前向渲染的效能會激素下降,重疊區域內每個物體要執行多個pass來計算不同的光源對物體的光照結果,最後還要在顏色快取中將結果混合起來得到最終的光照,很多計算實際上是重複的延遲渲染原理:

主要包含兩個pass

延遲渲染使用pass數目通常就是兩個,跟場景中包含的光源數目是沒有關係的

如果遊戲中使用了大量的實時光照,使用前向渲染會造成效能瓶頸的情況下,那麼可能希望選擇延遲渲染路徑,但這種路徑需要一定的硬體支援

延遲渲染路徑中每個光源都可以按逐畫素的方式處理

缺點

預設的g緩衝區,包含了以下幾個渲染紋理(render texture,rt)。

在第二個pass中計算光照時,預設情況下僅可以使用unity內建的standard光照明模型

延遲渲染路徑中可以使用的內建變數和函式

這些變數都可以在unitydeferredliabrary.cg.inc檔案中找到它們的宣告

四種渲染路徑(前向渲染路徑、延遲渲染路徑、遺留的延遲渲染路徑、頂點照明渲染路徑)需要根據遊戲發布的目標平台來選擇渲染路徑,如果當前顯示卡不支援所選渲染路徑,那麼unity會自動使用比其低一級的渲染路徑。

Shader筆記1 基礎光照 光照模型

光照模型 1.定義 光照模型就是乙個公式,使用這個公式來計算在某個點的光照效果 2.標準光照模型 在標準光照模型中,我們把進入攝像機的光分為下面四部分 1 自發光 2 高光反射 specular 平行光 pow max 0,cos 引數x 為平行光的反射光與視野方向的夾角 blinn光照模型和bli...

複雜的光照

渲染路徑主要用於和光源打交道,shader編寫中需要為pass指定渲染路徑,這樣unity才會明白程式設計師想要使用的渲染路徑,然後將光源和處理後的光照資訊放到這些資料裡,程式設計師才能在著色器中進行訪問。大多數情況下,乙個專案只使用一種渲染路徑,因此我們可以為整個專案設定渲染時的渲染路徑。在uni...

Phong光照模型的Shader實現

phong用到的是反射向量,計算反射向量的公式是 r 2 n dot n,l l 這個公式是根據向量的投影公式以及平行四邊形法則推導出來的 詳細步驟請看這篇文章,講的非常好 shader phong specular specular range 1,20 1 speccolor speccolor...