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,带你从入门到精通。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,727评论 2 9
  • TF API数学计算tf...... :math(1)刚开始先给一个运行实例。tf是基于图(Graph)的计算系统...
    MachineLP阅读 3,432评论 0 1
  • 迈开步向前走,放轻松调心态,这是第一天上班的感觉,也是正式踏入职场的心得。做的事情很多都有相似之处,只不过换了内容...
    聂一一阅读 84评论 0 0
  • 2018年4月11日 星期三 多云 【故事】 丰子隔了五天才知道,祥子的车上出大事儿了! 连网上都有了,地市大点...
    木徒阅读 268评论 0 0
  • “宁修然,林亦枫要结婚了。”要挂断电话的时候,程念薇突然对宁修然来了这么一句。 那边的宁修然只是淡淡的“恩”了一声...
    苏锦言阅读 583评论 0 0