ShadeGraph教程之节点详解5:Math Nodes

本文首发于洪流学堂微信公众号。
洪流学堂,学Unity快人几步

洪流学堂公众号回复节点,获取ShaderGraph节点详解PDF文件(带目录)。

本文基于ShaderGraph 1.1.9 版本。

Math Nodes 数学节点

Math节点中包含了各种数学运算。

Advanced

Absolute 绝对值

返回输入值的绝对值。

Exponential 指数

输入值为In,输出值是Base的In次幂。Base可以通过下拉框选择2或者e。

如Base选择Base2,输入In为3,那么输出Out = 2 ^ 3 = 8

Length 模长

返回一个向量的模长,即向量的长度。例如三维向量的模长计算公式为:

Log 对数

输入值为In,输出值以Base为底,In的对数。Base可以通过下拉框选择2、10或者e。

Modulo 模数

输入为A和B,输出Out = A % B
例如A是10,B是3,那么10 % 3 = 1

Negate 相反数

输入为In,输出为Out = -1 x In

Normalize 单位化

单位化输入的向量,即向量的方向不变,但是模长为1。
如下图所示,| v | 代表向量v的模长,u即为单位化后的向量。

Posterize 色调分离

色调分离是指一幅图像原本是由紧紧相邻的渐变色阶构成,被数种突然的颜色转变所代替。这一种突然的转变,亦称作“跳阶”。

更多详细内容参见:https://en.wikipedia.org/wiki/Posterization

Steps值越低,色阶越少,分离现象越严重。Steps越高,和原图的差别越小。

Out = floor(In / (1 / Steps)) * (1 / Steps)

Reciprocal 倒数

输入为In,输出Out = 1 / In

Reciprocal Square Root 平方根倒数

输入为In,输出Out = 1 / In^0.5

Basic 基本运算符

Add 加法

输出Out = 输入A + 输入B

Divide 除法

输出Out = 输入A / 输入B

Multiply 乘法

输出Out = 输入A * 输入B

Power 幂

输出Out = 输入A ^ 输入B

Square Root 平方根

输出Out = 输入In ^ 0.5

Subtract 减法

输出Out = 输入A - 输入B

Derivative 导数

DDX

返回屏幕空间中输入In在X轴上的偏导数。这个节点只能用于像素着色器阶段。

DDXY

返回屏幕空间中输入In在X轴和Y轴上的偏导数的和。这个节点只能用于像素着色器阶段。

Out = abs(ddx(In)) + abs(ddy(In))

DDY

返回屏幕空间中输入In在Y轴上的偏导数。这个节点只能用于像素着色器阶段。

Interpolation 插值

image.png

Lerp 线性插值

根据输入A、B和T进行线性插值。T的值会被Clamp到[0, 1]。
公式是:Out = (1-T)*A + T*B

Inverse Lerp 反向线性插值

根据输入A、B和T求出线性插值的系数。这个操作是Lerp的反向操作。
公式是: Out = (T - A)/(B - A)

Smoothstep 平滑阶梯

如果输入In在Edge1和Edge2之间,则返回Hermite插值(https://baike.baidu.com/item/%E5%9F%83%E5%B0%94%E7%B1%B3%E7%89%B9%E6%8F%92%E5%80%BC/8113661)。如果In小于Edge1,则返回0,如果In大于Edge2,则返回1。

这个节点类似于Lerp节点,但有两个显着差异。第一,此节点返回值介于0和1之间,而Lerp返回值介于输入的A和B之间。第二,该节点使用平滑的Hermite插值而不是线性插值。Hermite插值在开始加速并在最后减速。这对创建自然的动画,淡入淡出和其他转换非常有用。

Matrix 矩阵

Matrix Construct 构造矩阵

根据输入的向量构造矩阵。下拉框可以选择Row或Column。
选择Row时,每个向量代表矩阵的每一行。
选择Column时,每个向量代表矩阵的每一列。M0代表第一列,M1代表第二列……

Matrix Determinant 矩阵行列式

返回该矩阵的行列式。

Matrix Split 分割矩阵

将矩阵按行或列分割成向量。

Matrix Transpose 矩阵转置

image.png

返回矩阵的转置。

Range 范围

Clamp

如果输入In介于A、B之间返回In;若输入In小于Min,返回Min;若大于Max,返回Max

Fraction 取小数部分

返回输入In的小数部分。比如输入3.14则返回0.14。

Maximum 最大值

返回两个值的最大值,如果是多维向量则取每个维度的最大值

Minimum 最小值

返回两个值的最小值,如果是多维向量则取每个维度的最小值

One Minus 1减去

输出Out = 1 - 输入In

Random Range 范围随机

根据输入Seed返回一个伪随机数值,介于输入Min和Max之间。

虽然输入种子中的相同值总是会导致相同的输出值,但输出值本身为随机值。Input Seed是一个Vector 2值,方便根据UV输入生成一个随机数,但对于大多数情况,Vector 1输入就足够了。

Remap 重映射

根据输入In在InMinMax中的插值,计算输出。
比如输入In为0,InMinMax时(-10,10),那么In在InMinMax的位置就是0.5,如果OutMinMax为(0,10),那么输出Out就是5

公式为:Out = OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x)

Saturate

将输入In Clamp到[0, 1]

Round 四舍五入

Ceiling 向上取整

比如输入5.4,则返回6
比如输入6,则返回6

Floor 向下取整

比如输入5.4,则返回5
比如输入6,则返回6

Round 四舍五入

比如输入5.5,则返回6
比如输入5.4,则返回5

Sign 正负符号

小于0返回-1
等于0返回0
大于0返回1

Step 阶梯

如果输入In大于等于输入Edge,返回1,否则返回0

Truncate 截取(舍弃小数)

比如输入5.5,则返回5.0
比如输入5.4,则返回5.0

Trigonometry 三角函数

Arccosine 反余弦arccos

输入应该在[-1, 1]

Arcsine 反正弦arcsin

输入应该是-Pi/2 到 Pi/2

Arctangent 反正切arctan

输入应该是-Pi/2 到 Pi/2

Arctangent2 即Atan2

数学含义见:https://baike.baidu.com/item/atan2/10931300

Cosine 余弦cos

Degrees To Radians 角度转弧度

比如输入360,输出PI
比如输入60,输出PI/6

Hyperbolic Cosine 双曲余弦cosh

公式

Hyperbolic Sine 双曲正弦sinh

Hyperbolic Tangent 双曲正切tanh

Radians To Degrees 弧度转角度

比如输入PI/6,输出60

Sine 正弦sin

Tangent 正切tan

Vector 向量

Cross Product 叉乘

返回输入A和B的值的叉乘。两个向量的叉乘的结果是一个垂直于两个输入向量的第三个向量。结果的大小等于两个输入向量的模,乘以输入向量之间角度的正弦值,如上图。可以使用“左手法则”确定结果向量的方向。

叉乘法与左手法则
左手展平,四指并拢,拇指与四指呈90度夹角。让第一个矢量的箭头刺向左掌心,并使四指指根到指尖方向与第二个矢量指向相同,拇指指根到指尖的方向就是第三个矢量的方向。

Distance 距离

返回两个向量的欧式距离
详见:https://en.wikipedia.org/wiki/Signed_distance_function

Dot Product 点乘

Fresnel Effect 菲涅尔效应

菲涅耳效应是基于视角的不同对表面反射率的影响,接近掠射角度时会反射更多光线。菲涅耳效应节点通过计算表面法线和视角方向之间的角度。该角度越宽,返回值越大。这种效果通常用于实现边缘照明,这在许多特效中很常见。

Out = pow((1.0 - saturate(dot(normalize(Normal), normalize(ViewDir)))), Power)

Projection 投影

将输入A投射到向量B上,返回投射后的向量。具体数学含义见Rejection中的图片。

Out = B * dot(A, B) / dot(B, B)

Rejection

如上图所示,a1是a投影到b上的向量。a2是a在b上的rejection向量。

小结

本文讲解了ShaderGraph众多Node中的Math Nodes。你可以收藏本文作为一个工具库。
其他Node的详解,关注洪流学堂公众号第一时间获取。

洪流学堂公众号回复节点,获取ShaderGraph节点详解PDF文件(带目录)。

你有没有饱受shader折磨的同学?你可以把今天的内容分享给他,或许你能帮到他。



《郑洪智的Unity2018课》,倾尽我8年的开发经验,结合最新的Unity2018,带你从入门到精通。

你可能感兴趣的:(ShadeGraph教程之节点详解5:Math Nodes)