3、数学运算节点:加减乘除、点积与叉积、Lerp插值、Clamp与Saturate

数学运算节点,是材质编辑器的灵魂。

很多人刚开始学材质,觉得连一堆数学节点很枯燥。我当年也一样,心想「我写个贴图不就行了?」结果做出来的材质要么死板,要么根本动不起来。后来我才明白——没有数学,材质就是一张死图。

这一章,咱们把最常用的数学节点讲透。加减乘除、点积叉积、Lerp、Clamp和Saturate。这些你玩熟了,材质就活了一半。

3.1 加减乘除:最基础,也最容易被忽略

加减乘除节点,在材质编辑器里叫 AddSubtractMultiplyDivide。它们接受两个输入,输出一个结果。

加法(Add):说白了就是把两个值叠在一起。比如你想让一个颜色变亮,直接加一个常数就行。我在做角色皮肤材质时,经常用加法把环境光和高光叠加起来,效果很自然。

减法(Subtract):用来做差值。比如你想让一个纹理从中心向外渐变,用 1 - UV.x 就能得到反向效果。嗯,这里要注意:减法结果可能是负数,后面通常要接一个 ClampSaturate

乘法(Multiply):这个用得最多。两个纹理叠加、控制强度、做遮罩,都靠它。我习惯把乘法当作「开关」——一个值乘以0,结果就是0;乘以1,原样输出。你想想看,是不是很灵活?

除法(Divide):用得少,但很关键。比如你想把UV坐标归一化到0~1范围,或者做透视效果,除法就派上用场了。不过要小心——除数为0时,材质会出问题。我踩过这个坑,后来每次用除法都会先检查输入。

核心要点:加减乘除是材质运算的基石。加法用于叠加,减法用于差值,乘法用于控制,除法用于归一化。记住这四个方向,你就不会乱。

3.2 点积与叉积:向量运算的利器

点积(Dot Product)和叉积(Cross Product),听起来很数学,其实在材质里特别好用。

点积:计算两个向量的夹角余弦值。结果在-1到1之间。1表示方向相同,-1表示方向相反,0表示垂直。

我在做水面反射时,用点积计算视线方向与法线的夹角,然后控制反射强度。效果非常真实。你想想看,一个简单的点积,就能模拟出「看水面时,角度越平反射越强」的物理现象。

叉积:生成一个垂直于两个输入向量的新向量。常用于计算法线、切线方向。

比如你有一个地形,想根据坡度生成遮罩。用叉积算出法线,再和世界坐标上方向做点积,就能得到「哪些地方是陡坡,哪些地方是平地」。我曾经用这个技巧做雪地材质——陡坡上雪少,平地上雪多,效果很自然。

小技巧:点积和叉积经常搭配使用。点积判断「是否朝向」,叉积计算「垂直方向」。两者结合,可以做很多高级效果,比如边缘光、菲涅尔效应。

3.3 Lerp插值:平滑过渡的魔法

Lerp(Linear Interpolation),线性插值。三个输入:A、B、Alpha。输出结果是 A 和 B 按 Alpha 比例混合。

Alpha=0时,输出A;Alpha=1时,输出B;Alpha=0.5时,输出A和B的中间值。

Lerp 是材质里最常用的混合节点。没有之一。

我做UI材质时,经常用Lerp做按钮的悬停效果——鼠标移上去,颜色从蓝色渐变到金色。只需要把Alpha连到一个时间节点,就能实现平滑过渡。

还有一个经典用法:用Lerp做「遮罩混合」。比如你有一个草地纹理和一个雪地纹理,用一张高度图作为Alpha,就能做出「雪从山顶覆盖到山脚」的效果。嗯,这里要注意:Alpha的值必须在0~1之间,否则会出现奇怪的拉伸。

避坑指南:我曾经在Lerp的Alpha输入上直接连了一个负数,结果材质直接变黑。后来我养成了习惯——所有Lerp的Alpha前面都加一个Saturate节点,确保值在0~1之间。

3.4 Clamp与Saturate:限制范围,防止溢出

Clamp(Clamp)和Saturate(Saturate)都是用来限制数值范围的。

Clamp:你可以自定义最小值和最大值。比如你想让一个值限制在0.2到0.8之间,就用Clamp。我在做HDR颜色映射时,经常用Clamp把过亮或过暗的部分拉回来,避免画面失真。

Saturate:是Clamp的简化版——固定限制在0到1之间。没有参数,直接连上去就行。

为什么需要Saturate?因为很多材质节点的输入都要求0~1范围。比如Lerp的Alpha、乘法后的结果、点积的输出……如果不加限制,超出范围的值会导致材质表现异常。

我个人的习惯是:所有可能超出0~1范围的数值,都先过一遍Saturate。这样做的好处是——材质更稳定,不容易出bug。你想想看,一个Saturate节点就能避免90%的材质问题,何乐而不为?

注意:Clamp和Saturate不是万能的。如果数值本身是负数,Saturate会直接变成0,可能会丢失信息。这时候要根据实际情况选择Clamp,保留你需要的范围。

3.5 实战组合:用数学节点做一个动态渐变

光说不练假把式。咱们来做一个简单的动态渐变效果,把今天学的节点都用上。

1. 用 Time 节点生成一个随时间变化的数值
2. 用 Sine 节点把数值变成 -1 到 1 的波浪
3. 用 Add 节点加上 1,变成 0 到 2
4. 用 Multiply 节点乘以 0.5,变成 0 到 1
5. 用 Saturate 节点确保范围在 0~1
6. 把这个值连到 Lerp 的 Alpha 上
7. Lerp 的 A 输入红色,B 输入蓝色
8. 输出到 Base Color

效果是什么?一个从红色到蓝色来回渐变的动态材质。你运行起来,颜色会像呼吸一样平滑变化。

这个例子虽然简单,但包含了加减乘除、Lerp、Saturate 的完整用法。你把这个练熟了,后面做复杂材质就轻松多了。

3.6 本章小结

数学运算节点,说白了就是材质的「语法」。加减乘除是单词,点积叉积是短语,Lerp是句子,Clamp和Saturate是标点符号。你把这些组合起来,就能写出漂亮的材质「文章」。

我建议你打开Unreal,把每个节点都拖出来试一遍。别怕出错——我当年也是从一堆乱连的节点里慢慢摸索出来的。记住:数学不会骗人,你连对了,效果就对了

下一章,咱们聊聊纹理采样和UV操作。到时候你会发现,今天学的数学节点,全都能用上。