12.三個輸入數(shù)據(jù)節(jié)點(diǎn)

目的
認(rèn)識三個輸入節(jié)點(diǎn)
PixelNormalWS 和VertexNormalWS區(qū)別
自己寫一個基礎(chǔ)的Half-Lanbert和Phong光照模型
三個輸入節(jié)點(diǎn)
輸入節(jié)點(diǎn)

Camera Vector | 攝像機(jī)向量
攝像機(jī)向量我們也稱之為觀察方向 (V)
使用攝像機(jī)位置減去像素位置就可以計算出攝像機(jī)角度,他們是一樣的。
UE5給我們封裝好的攝像機(jī)向量。

PixelNormalWS | 法線向量
輸入像素法線,稱之為法線向量(N)

為什么不使用**VertexNormalWS,**后面有介紹二者區(qū)別
LightVector | 光照向量
這個節(jié)點(diǎn)是獲取光照方向向量,簡稱 V

因?yàn)閁E5使用的是Defferred Shading(延遲渲染),UE5官方文檔建議我們不要使用,我們計算漫反射需要調(diào)用到怎么辦?

參考資料 前向渲染與延遲渲染 - 知乎 (zhihu.com)

問題1 PixelNormalWS 和VertexNormalWS區(qū)別
7. Position位置節(jié)點(diǎn) - 嗶哩嗶哩 (bilibili.com)
上面介紹了各個位置信息,其中就有這兩個節(jié)點(diǎn)



前者計算法線貼圖對法線方向的改變,后者只計算模型上點(diǎn)的法線方向。會忽略法線貼圖。
這兩個節(jié)點(diǎn)都是和法線有關(guān),我們稱之為法線向量(N)
測試
使用我們上面創(chuàng)建的Fresnel效果
PixelNormalWS

同樣都有法線貼圖,VertexNormalWS只會使用模型頂點(diǎn)法線


擴(kuò)展 UE5給我提高了獲取場景光照方向的節(jié)點(diǎn),這里是自定義獲取方法。 后面會單獨(dú)介紹這個節(jié)點(diǎn)
計算光照模型
上面說到我們在材質(zhì)編輯器無法獲取光照方向,UE5提供給我們另一套解決方案。
創(chuàng)建一個藍(lán)圖里面增加一個平行光,在獲取平行光的位置傳入材質(zhì)里。
思路
創(chuàng)建一個藍(lán)圖Actor

增加光源組件,我這里增加的是平行光。

拖到場景中,關(guān)閉默認(rèn)的場景光

下一步就是創(chuàng)建材質(zhì),我們前簡單了解一下Phong 和Half-Lanbert 光照模型。
Half-Lanbert 光照模型
半蘭伯特和蘭伯特相比,只是將法線向量與光照方向向量的點(diǎn)乘結(jié)果用一種更好的方式區(qū)間轉(zhuǎn)化到了(0,1)區(qū)間:

法線方向(N)我們的節(jié)點(diǎn),光照方向我們拿不到前使用一個向量代替。
公式
UE5實(shí)現(xiàn)Half-Lanbert 光照模型
創(chuàng)建一個材質(zhì),設(shè)置無光照

創(chuàng)建一個向量代替光照,我們等等使用藍(lán)圖獲取光照方向。

帶入公式就可以了,

帶入公式,輸出,就可以看到效果。
繼續(xù)下一部分。
Phong光照模型
簡單介紹一下,蘭伯特光照模型,已經(jīng)獲取到了法線向量(N),光照向量(L),
Phong 光照模型 是計算觀察方向(V)和反射方向(R) 這倆個向量。計算出高光的強(qiáng)弱。

Phong光照模型中主要的部分就是對高光的計算
公式 ? I(spcular) = pow(max(0,dot(R,V)), gloss)
V 就是觀察方向,R是反射方向, 現(xiàn)在沒有反射方向(R)
URP | Phong 和 Blinn-Phong光照光照模型 - 嗶哩嗶哩 (bilibili.com)
UE5 實(shí)現(xiàn)Phong光照模型
在上面那個材質(zhì)的基礎(chǔ)上,求出R反射方向,R為燈光對P點(diǎn)的鏡面反射方向向量(R指代Reflection)

我們的目標(biāo)就是通過已知的N向量和L向量 求解R向量,獲得反射的方向。

我們先將L向量 乘以 -1,那么,根據(jù)反射定律可知, -L向量在水平方向的分量和R向量必然相等。
只要在-L向量上加兩次,L向量在N向量上的投影向量,就可以獲得R向量。
公式

套用高光公式

高光效果就實(shí)現(xiàn)了,

現(xiàn)在我們都計算完成,使用Add 把倆個疊加起來。

擴(kuò)展 我們現(xiàn)在的光照向量是創(chuàng)建的一個向量節(jié)點(diǎn)固定的,下面獲取場景光照數(shù)據(jù)。
我們創(chuàng)建一個材質(zhì)參數(shù)集,創(chuàng)建這個是方便藍(lán)圖里計算出光照信息傳到材質(zhì)里。
材質(zhì)里實(shí)時調(diào)用。
技術(shù)準(zhǔn)備
材質(zhì)參數(shù)集

有倆個一個是表量,一個是向量,我們這里創(chuàng)建向量。

命名 lightPos(光照位置)
打開一開始創(chuàng)建的藍(lán)圖,把平行光拖到Construction Script 里
藍(lán)圖里創(chuàng)建一個Set Vector Parameter Value 節(jié)點(diǎn) ?把光照填進(jìn)去保存。

材質(zhì)關(guān)聯(lián)燈光
把材質(zhì)向量集拖到材質(zhì)里,

在左邊設(shè)置創(chuàng)建的變量。

使用攝像機(jī)位置減去模型本身的位置,就計算出光照向量(L)

替換所有的L

創(chuàng)建材質(zhì)實(shí)例,指定到場景球體上。

效果完成。
總結(jié)
這個過程使用到了CameraVector ?(相機(jī)向量 V)和法線方向(N),也隨便實(shí)現(xiàn)了光照向量(L)的輸入計算。

對高光計算加深理解,怎么求出反射向量。

材質(zhì)參數(shù)集的使用,這次是使用藍(lán)圖計算出結(jié)果傳入到材質(zhì)。

渲染方式,UE5是使用延遲渲染。那我們有沒有簡單的方法獲取到場景燈光。
