Unity2018 Shader Graph 學習筆記(三) 使用Fresnel Effect實現邊緣光

這篇文章主要講述在ShaderGraph中FresnelEffect節點在3d視覺效果中的常見使用場景。

  1. 用於一些光滑程度較高的物體判斷物體表面反射的強度,例如延伸的湖面,我們會感覺到腳下的水面是能看清楚折射出來的水底的內容,而遠處的水面更多反射了天空的顏色。
  2. 用於實現角色或者一些特效的邊緣光效果,這個效果通常和Bloom(泛光)後處理特效結合使用,能夠產生一些炫酷的效果。

使用了菲涅爾反射的水面,圖片選自http://gad.qq.com/article/detail/21855

角色造型的邊緣光

我們先來看一下FresnelEffect這個節點所包含的參數,以及這些參數的意義。

FresnelEffect節點

Fresnel節點包含了三個輸入,分別是表面法線的方向,表面視角的方向以及一個浮點數。計算公式如下Out = pow((1.0 - saturate(dot(normalize(Normal), normalize(ViewDir)))), Power)

表面view和normal的方向示意圖

這個公式可以看出來,隨著法線和視角方向夾角的增大,我們得到的結果也是越來越大的,這樣我們容易得到一個漸變的材質。因此對於一個球形的模型,應用了FresnelEffect的效果就是看上去變成了一個漸變的空心圓形。所有邊界上的點都趨向於view與normal夾角為90°,中心的夾角趨向0°。在結合一個指數函數,放大漸變的效果。

球形模型的FresnelEffect

對於一個複雜的網格,得到的效果也是類似的。就如同我們的角色造型一樣。

那麼下面我們就可以嘗試將這樣一個邊緣光效果加到我們實際的角色渲染上了。

首先,創建一個FresnelNode並且直接連接到輸出中,初步調整一下指數的值。

Power = 1.0

power = 2.0

我們選取一個比較合適的值,暫且認為是2.0。

創建一個顏色屬性,用來控制邊緣光的顏色,作用在FresnelEffect的結果上。

對DiffuseMap進行採樣,得到正常的輸出。

將邊緣光的結果和正常採樣的結果進行相加處理,得到帶邊緣光的效果。

最後再適當調整FresnelEffect的power值,來得到一個比較好的效果。


推薦閱讀:

Constant Buffer的高效使用,讓你碼出質量
Unity2018 Shader Graph 學習筆記(七) 使用法線擾動的基礎水面的實現

TAG:Unity遊戲引擎 | 著色器 | shader |