游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:791

当前位置:游戏蛮牛 技术专区 教程分享

查看: 386|回复: 4

[自学总结] ShadeGraph教程之节点详解5:Math Nodes

[复制链接]  [移动端链接]
2初来乍到
125/150

44

主题

46

帖子

125

积分

Rank: 2Rank: 2

UID
24181
好友
0
蛮牛币
396
威望
0
注册时间
2014-5-7
在线时间
46 小时
最后登录
2018-10-18
发表于 2018-6-5 10:21:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本文首发于洪流学堂微信公众号。转载请注明。
获取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折磨的同学?你可以把今天的内容分享给他,或许你能帮到他。



回复

使用道具 举报

2初来乍到
139/150
排名
25854
昨日变化
14

0

主题

48

帖子

139

积分

Rank: 2Rank: 2

UID
53132
好友
0
蛮牛币
202
威望
0
注册时间
2014-11-4
在线时间
77 小时
最后登录
2018-9-23
发表于 2018-6-5 12:02:28 | 显示全部楼层
thanks!thanks!

回复

使用道具 举报

排名
17974
昨日变化
12

0

主题

20

帖子

87

积分

Rank: 2Rank: 2

UID
210644
好友
0
蛮牛币
211
威望
0
注册时间
2017-3-8
在线时间
36 小时
最后登录
2018-10-15
发表于 2018-6-5 18:50:12 | 显示全部楼层
感谢。。。分享。。。。

回复

使用道具 举报

7日久生情
2039/5000
排名
751
昨日变化
1

4

主题

285

帖子

2039

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
37672
好友
6
蛮牛币
1977
威望
0
注册时间
2014-8-2
在线时间
566 小时
最后登录
2018-10-14

蛮牛译员

发表于 2018-6-12 09:24:15 | 显示全部楼层
ShadeGraph教程之节点详解5:Math Nodes [修改]

回复 支持 反对

使用道具 举报

4四处流浪
370/500
排名
7644
昨日变化
3

2

主题

87

帖子

370

积分

Rank: 4

UID
277901
好友
0
蛮牛币
1095
威望
0
注册时间
2018-4-19
在线时间
119 小时
最后登录
2018-10-13
发表于 2018-8-7 15:14:36 | 显示全部楼层
66666666666

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表