UE4 積雪效果(VertexNormalWS)
`VertexNormalWS`輸出模型頂點(diǎn)在全局空間的法線向量,可以作為 World Position 中的位置偏移進(jìn)行使用,也可以用于制作某些特殊貼圖。
直接將 VertexNormalWS 輸出到材質(zhì)的 Base Color,可以看到一個(gè)立文體向 X/Y/Z 軸正方向的三個(gè)面分別顯示為 Red/Yellow/Blue 三原色,對(duì)應(yīng)各個(gè)面的法線向量 (1,0,0)/(0,1,0)/(0,0,1),另外三個(gè)面處于各軸的負(fù)向,所以各分量都小于或等于 0,對(duì)于顏色輸入都等價(jià)為 0。如果是 Sphere,那么三個(gè)正向面的顏色將會(huì)是三原色漸變的效果,根據(jù)其各像素在所位置的法線決定。
兩個(gè)向量的點(diǎn)積是一個(gè)標(biāo)量,幾何含義就是一個(gè)向量在另一個(gè)向量上的投射長(zhǎng)度,所以,XY 平面上的兩個(gè)向量的點(diǎn)積就相當(dāng)于一個(gè)僅表現(xiàn) Z 軸方向上的高度蒙版。也就是說(shuō),假如山體模型的某個(gè)部分是平頂?shù)?,那么它的法線必定是指向 Z 軸正方向。那么,將頂點(diǎn)向量與向量(0,0,1)做 `DotProduct` 運(yùn)算,當(dāng)它們平行時(shí),也就是山體模型平頂部分就會(huì)得到最大值 1。而斜面部分,根據(jù)坡度不同,輸出的數(shù)字小于 0 ~ 1 之間。對(duì)于那些豎起的斷崖部分,幾乎與 Z 方向垂直,即 COSθ 輸出為 0。明白該原理之后,便可以進(jìn)行一些特殊效果的制作,例如積雪的材質(zhì),根據(jù)輸出值的強(qiáng)度,再結(jié)合 LinearInterpolate 或 HeightLerp 做插值,實(shí)現(xiàn)雪花與巖石材質(zhì)的覆蓋。
`CrossProduct` 叉積即矢量積,表達(dá)式計(jì)算兩個(gè)三通道矢量值,并輸出所產(chǎn)生的三通道矢量值。給定空間中的兩個(gè)矢量,矢量積是與兩個(gè)輸入都垂直的矢量。
`DotProduct` 向量點(diǎn)積表示標(biāo)量積,即一個(gè)矢量投射到另一個(gè)矢量上的長(zhǎng)度。許多技術(shù)使用此計(jì)算來(lái)計(jì)算衰減。點(diǎn)積要求兩個(gè)矢量輸入具有相同數(shù)目的通道。
點(diǎn)乘(Dot Product)的結(jié)果是數(shù)量積或標(biāo)量積(Scalar Product)。從幾何角度看,點(diǎn)積是兩個(gè)向量的長(zhǎng)度與它們夾角余弦的積,即 *a﹡b* 表示 *b* 在 *a* 上的投影。
根據(jù)余弦定理,向量點(diǎn)積定義如下,注意兩豎表示向量的模:
? ? a·b = |a|×|b|cosθ
判斷這兩個(gè)向量是否是同一方向,是否正交(也就是垂直)等方向關(guān)系,具體對(duì)應(yīng)關(guān)系為:
a·b > 0 夾角在 0° ~ 90° 之間;
?a·b = 0 正交,相互垂直;
?a·b < 0 方向基本相反,夾角在 90° ~ 180° 之間;
叉乘(Cross Product)又稱向量積(Vector Product)。幾何意義上,在空間中有兩個(gè)向量叉積運(yùn)算結(jié)果是一個(gè)向量,并且與這兩個(gè)向量都垂直,是這兩個(gè)向量所在平面的法線向量。使用右手定則確定其方向,食指為 *a* 指向正前方,中指為 *b* 指另一個(gè)角度,拇指為 *a×b* 并且與 a 和 *b* 的方向都垂直。計(jì)算機(jī)圖形學(xué)中,叉積常用于判斷一個(gè)物體是否在另外一個(gè)物體的左側(cè)或右側(cè)。
如果以向量 *a* 和 *b* 為邊構(gòu)成一個(gè)平行四邊形,那么這兩個(gè)向量外積的模長(zhǎng)與這個(gè)平行四邊形的面積相等。


視頻觀看:https://www.bilibili.com/video/BV1VL411g7RE/