UE4 积雪效果(VertexNormalWS)
`VertexNormalWS`输出模型顶点在全局空间的法线向量,可以作为 World Position 中的位置偏移进行使用,也可以用于制作某些特殊贴图。
直接将 VertexNormalWS 输出到材质的 Base Color,可以看到一个立文体向 X/Y/Z 轴正方向的三个面分别显示为 Red/Yellow/Blue 三原色,对应各个面的法线向量 (1,0,0)/(0,1,0)/(0,0,1),另外三个面处于各轴的负向,所以各分量都小于或等于 0,对于颜色输入都等价为 0。如果是 Sphere,那么三个正向面的颜色将会是三原色渐变的效果,根据其各像素在所位置的法线决定。
两个向量的点积是一个标量,几何含义就是一个向量在另一个向量上的投射长度,所以,XY 平面上的两个向量的点积就相当于一个仅表现 Z 轴方向上的高度蒙版。也就是说,假如山体模型的某个部分是平顶的,那么它的法线必定是指向 Z 轴正方向。那么,将顶点向量与向量(0,0,1)做 `DotProduct` 运算,当它们平行时,也就是山体模型平顶部分就会得到最大值 1。而斜面部分,根据坡度不同,输出的数字小于 0 ~ 1 之间。对于那些竖起的断崖部分,几乎与 Z 方向垂直,即 COSθ 输出为 0。明白该原理之后,便可以进行一些特殊效果的制作,例如积雪的材质,根据输出值的强度,再结合 LinearInterpolate 或 HeightLerp 做插值,实现雪花与岩石材质的覆盖。
`CrossProduct` 叉积即矢量积,表达式计算两个三通道矢量值,并输出所产生的三通道矢量值。给定空间中的两个矢量,矢量积是与两个输入都垂直的矢量。
`DotProduct` 向量点积表示标量积,即一个矢量投射到另一个矢量上的长度。许多技术使用此计算来计算衰减。点积要求两个矢量输入具有相同数目的通道。
点乘(Dot Product)的结果是数量积或标量积(Scalar Product)。从几何角度看,点积是两个向量的长度与它们夹角余弦的积,即 *a﹡b* 表示 *b* 在 *a* 上的投影。
根据余弦定理,向量点积定义如下,注意两竖表示向量的模:
a·b = |a|×|b|cosθ
判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:
a·b > 0 夹角在 0° ~ 90° 之间;
a·b = 0 正交,相互垂直;
a·b < 0 方向基本相反,夹角在 90° ~ 180° 之间;
叉乘(Cross Product)又称向量积(Vector Product)。几何意义上,在空间中有两个向量叉积运算结果是一个向量,并且与这两个向量都垂直,是这两个向量所在平面的法线向量。使用右手定则确定其方向,食指为 *a* 指向正前方,中指为 *b* 指另一个角度,拇指为 *a×b* 并且与 a 和 *b* 的方向都垂直。计算机图形学中,叉积常用于判断一个物体是否在另外一个物体的左侧或右侧。
如果以向量 *a* 和 *b* 为边构成一个平行四边形,那么这两个向量外积的模长与这个平行四边形的面积相等。

