UE4基础材质节点

本文参考虚幻引擎文档,几乎所有图片都来自官方文档数学表达式 | 虚幻引擎文档 (unrealengine.com)https://docs.unrealengine.com/4.27/zh-CN/RenderingAndGraphics/Materials/ExpressionReference/Math/#linearinterpolate

会由基础到复杂对每个对象尽可能地进行说明,且不进行分类,因还在学习的关系,暂时不涉及全面,其中掺杂个人理解

Constant 一维向量 快捷键1(按住加左键) 输出单个浮点值,可连接到任何输入,而不必考虑该输入所需的通道数。例如,如果您将一个常量连接到需要 3 个矢量的输入,那么该常量值将用于全部 3 个元素

Constant2vector 二维矢量 2 理解为两个一维向量,常用于修改纹理坐标(贴图U和V方向)(加法才能改变纹理坐标)

Constant3vector 三维向量 3 理解成RGB,常用于修改纹理颜色(乘法)(改颜色每个通道需取值0到1)参考同上

Constant4vector 四维向量 4 理解成RGBA,加了个alpha通道

ComponentMask(分量蒙版)(遮罩)

理解成只显示某个通道,如果输入是单个常量值,在这种情况下,会将单个值传递到每个通道

Abs(absolute 绝对值)

Abs一般与Dot(点积)配合使用,以确定两个向量之间的角度关系:它们是平行,垂直,还是介于两者之间。通常,当得到两个向量的点积时,该值在1.0(对于两个平行向量)与-1.0(对于两个完全相反的向量)之间进行插值,中间点0表示这两个向量是垂直的。当取这个点积的绝对值时,正值保持不变,而负值通过去掉负号变成正数。因此,结果在0(对于垂直向量)和1.0(对于平行向量,无论向量指向相同还是相反的方向)之间进行插值,这是告诉这两个向量距离正交有多远

线性插值(LinearInterpolate) 表达式根据用作蒙版的第三个输入值,在两个输入值之间进行混合。您可以将其想像成用于定义两个纹理之间的过渡效果的蒙版,例如Photoshop中的层蒙版。蒙版Alpha的强度确定从两个输入值获取颜色的比例。如果Alpha为0.0色,那么将使用第一个输入。如果Alpha为1.0,那么将使用第二个输入。如果Alpha介于0.0与1.0之间,那么输出是两个输入之间的混合。请记住,混合按通道进行。因此,如果Alpha为RGB颜色,那么Alpha的红色通道值定义A与B的红色通道之间的混合,而与Alpha的绿色通道 无关,该通道定义A与B的绿色通道之间的混合

程序员需知:LinearInterpolate根据参数值Alpha在A与B之间执行按通道插值

Add(加法)

接受两个输入,将它们相加并输出结果

如果使用多个通道传递值,每个通道将分别添加。例如,如果将RGB颜色值传递给每个输入,则将第一个输入的R通道添加到第二个输入的R通道中,结果存储在输出的R通道中;将第一个输入的G通道添加到第二个输入的G通道中,结果存储在输出的G通道中,以此类推。

两个输入必须有相同数量的值,但其中一个值是单个常量值时例外。在这种情况下,将多通道输入的每个通道添加到单个浮点值,并将结果存储在输出值的单独通道中

上图是为了方便理解官方摆的图

Add常用于使颜色变亮/变暗(加正负值)或偏移UV纹理坐标(参考二维向量那里) 

Subtract(减法)

接受两个输入,将第一个输入减去第二个输入,然后输出差值。

如果使用多个通道传递值,每个通道将分别相减。例如,如果将RGB颜色值传递给每个输入,则将第一个输入的R通道减去第二个输入的R通道,结果存储在输出的R通道中;将第一个输入的G通道减去第二个输入的G通道,结果存储在输出的G通道中,以此类推。

两个输入必须有相同数量的值,但其中一个值是单个常量值时例外。在这种情况下,将多通道输入的每个通道减去常量值,并将结果存储在输出值的单独通道中

Mutiply(乘法)

接受两个输入,将它们相乘,然后输出结果。当您将颜色值作为输入传递时,结果类似于Photoshop中的 正片叠底 图层混合模式的结果。

如果使用多个通道传递值,每个通道将分别相乘。例如,如果将RGB颜色值传递给每个输入,则将第一个输入的R通道乘以第二个输入的R通道中,结果存储在输出的R通道中;将第一个输入的G通道乘以第二个输入的G通道中,结果存储在输出的G通道中,以此类推。

两个输入必须有相同数量的值,但其中一个值是单个浮点值时例外。在这种情况下,将多通道输入的每个通道乘以单个浮点值,并将结果存储在输出值的单独通道中

Divide(除法)

取两个输入,将第一个输入除以第二个输入,并输出值。

如果使用多个通道传递值,每个通道将单独相除。例如,如果将RGB颜色值传递给每个输入,则将第一个输入的R通道除以第二个输入的R通道中,结果存储在输出的R通道中;将第一个输入的G通道除以第二个输入的G通道中,结果存储在输出的G通道中,以此类推。

两个输入必须有相同数量的值,但其中一个值是单个浮点值时例外。在这种情况下,将多通道输入的每个通道除以单个浮点值,并将结果存储在输出值的单独通道中

       如果除数在任何通道内都介于0和0.00001之间,则将其提升至0.00001。如果除数在任何通道内都介于0和-0.00001之间,则将其降低至-0.00001。这避免了出现除以零的错误可能性。但是,这也意味着通道的输出值可能非常大。

SquareRoot (平方根)

表达式输出输入值的平方根。如果应用于矢量,则每个分量将分别处理

Appendvector(追加矢量)

允许将通道组合在一起,以创建通道数比原始矢量更多的矢量。例如,可以使用两个常量值并进行追加,以建立双通道值。这有助于将单个纹理中的通道重新排序,或者将多个灰阶纹理组合成一个 RGB 彩色纹理

A

接收作为追加目标的值。

B

接收要追加的值。

Fmod

输出两个输入的除法运算的浮点余数。被除数(输入"A")可以是任何值,但负被除数将导致负结果。除数(第二个输入)不应为零,因为这意味着要除以零,但是除数是负数还是正数并不会影响结果。它的常见的用例是制作一种材质,使其亮度上升到最大值,然后在下一帧中立即下降到最小值,然后再次开始向最大值攀升。

在上图中,FMod采用0到1的UV级数,并将其转换为绿色通道中X轴上每0.2个UV单元一次的重复循环

Round(舍四进五)

将输入值舍入为最接近的整数。如果输入值的小数部分为0.5或更大,则将输出值向上舍入。否则将输出值向下舍入

Ceil(ceiling(天花板))

接受值,将它们向  舍入到下一个整数,并输出结果

Floor(地板)

接受值,将它们向  舍入到上一个整数,并输出结果

Frac(fraction(小数))

接受值并输出这些值的小数部分。换句话说,对于输入值"X",结果是"X - X的整数部分"。输出值将从0到1不等

官方举的很有趣的例子。Frac节点将时间转换为一系列重复的0 - 1级数序列,导致颜色(通过Lerp)从绿色变为红色,然后返回绿色,无限重复

Logarithm2(log2)

节点返回输入值的以2为底的对数。也就是说,如果取一个基数为2的值,并将其提高到该表达式返回的数字的幂,就会得到输入值。仅对该表达式使用正的输入值

Logarithm10(log10)

节点返回输入值的以10为底的对数,也称为公共对数。也就是说,如果取一个基数为10的值,并将其提高到该表达式返回的数字的幂,就会得到输入值。仅对该表达式使用正的输入值

Normalize

表达式计算并输出其输入的归一化值。归一化矢量(也称"单位矢量")的整体长度为1.0。这意味着输入的每个分量都除以矢量的总大小(长度)

没有必要对插入到法线材质输出中的表达式进行归一化

Saturate 

节点将值限定在0与1之间。小于0的值被提升到0;大于1的值降低为1;0到1之间(包括0和1在内)的值保持不变。在大多数现代图形硬件上,Saturate的指令成本几乎是免费的,所以您可以在任何时候使用该节点来将输入或输出值限制在0到1之间,而不影响您的材质的性能

Sign

节点指示数字输入是负数、正数还是恰好为0

  • 如果输入为负数,该节点输出-1。

  • 如果输入恰好为0,该节点输出0。

  • 如果输入为正数,该节点输出1

Truncate(删节)

丢弃小数部分而保留整数部分来截断值

Clamp(限制)

接受一个或多个值,并将它们约束到由最小值和最大值定义的指定范围内。如果最小值为0.0,最大值为0.5,则意味着结果值永远不会小于0.0,且永远不会大于0.5

Max(最大值)

接受两个输入,并输出其中较高的一个。

当您使用该节点和颜色输入时,结果类似于Photoshop中的 变亮 图层混合模式

Min(最小值)

接受两个输入,输出两个输入中较小的一个。

当您使用该节点和颜色输入时,结果类似于使用Photoshop中的 变暗 图层混合模式

Oneminus(1-x反向)

接受输入值"X"并输出"1 - X"。此操作逐通道执行

Power(幂)

接收两个输入:基值(Base)和指数(Exp)。它将基值提高到指数的幂,并输出结果。换句话说,它返回 Base 乘以自身 Exp 次

用来调对比度

Desaturation(去饱和度)

对其输入进行去饱和,即根据特定百分比将其输入的颜色转换为灰色阴影

亮度系数(Luminance Factors)

指定每个通道对去饱和颜色的影响量。此属性用于控制,在去饱和之后,绿色比红色亮,而红色比蓝色亮。

小数(Fraction)

指定要应用于输入的去饱和量。此百分比的范围为0.0(完全原始颜色,不去饱和)到1.0(完全去饱和)

程序员需知:定义去饱和颜色 D、输入颜色 I 和亮度系数 L。输出将为 O = (1 - 百分比)*( D.dot( I )) + 百分比 * I

理解成饱和度就行

Time(时间)(大概是2通道矢量)

用来向材质(例如Panner(平移)或Cosine(余弦)或其他时间相关操作)添加经历时间

忽略暂停(Ignore Pause)

如果为 true,那么时间将一直推进,即使游戏暂停也是这样

周期(Period)

如果为 true,那么这将是时间回绕前经过的时间量。针对移动材质,这将以全精度在 CPU 上执行周期计算,而在 GPU 上,将以半精度运行(处理长度超过一分钟的周期时,可能会产生问题)。

上图将创建一个随时间推移而变化的材质,从而连贯地展现白色与黑色之间的正弦曲线过渡。如果启用了时间段,那么将时间段设置为 0 会有效地停止过渡,而设置为 1 相当于时间段为 false。设置接近于 0 的数值将使材质更迅速地变化(上图之所以*0.5再+0.5是为了不让颜色输出产生负值)

Cosine(余弦)

注:反余弦arccosine(反余弦同反正弦、反正切一样都是一种成本高昂的运算,且不会被指令数所反映。使用Arccossinefast作为更快但不太精确的替代方案)

表达式在[0, 1]的输入范围和[-1, 1]的输出范围上反复输出余弦波的值。此表达式最常用于通过将一个时间表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:

Sine(正弦)

表达式在[0, 1]的输入范围和[-1, 1]的输出范围上反复输出正弦波的值。它与Cosine表达式的输出之间的区别是输出波形被四分之一的周期所抵消,这意味着"Cos(X)"等于"Sin(X + 0.25)"。此表达式最常用于通过将一个时间表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:

Tangent(正切)

输出指定值的正切值

Dotproduct(点积)

为一个矢量投影到另一个矢量上的长度,也可以描述为两个矢量之间的余弦乘以它们的幅值。许多技术使用这种算法来计算衰减。DotProduct要求两个矢量输入具有相同数量的通道

A

接受一个值或任意长度的矢量。

B

接受一个值或具有与 A 相同长度的矢量。

cemera vector为摄像机对象

reflection vector为反射向量

CrossProduct(矢量积)

表达式计算两个三通道矢量值输入的交叉乘积,并输出产生的三通道矢量值。假定空间中有两个矢量,则交叉乘积是一个同时垂直于两个输入的矢量

If

表达式比较两个输入,然后根据比较的结果传递其他三个输入值中的一个。两个比较的输入都必须是单一浮点值

A

接受单个浮点值。

B

接受单个浮点值。

A > B

接受如果A的值大于B的值时要输出的值。

A = B

接受如果A的值等于B的值时要输出的值。

A < B

接受如果A的值小于B的值时要输出的值。

Depthfade(深度消退)

用来隐藏半透明对象与不透明对象相交时出现的不美观接缝

(输出)消退距离(Fade Distance)

这是应该发生消退的全局空间距离。未连接 FadeDistance(FadeDistance)输入时,将使用此距离。

输入

不透明(Opacity)

接收深度消退前对象的现有不透明度。

FadeDistance(消退距离)

这是应该发生消退的全局空间距离。

改边缘的节点

首选:Dither Temporal AA

用来虚化边缘使得模型之间接缝不是那么明显(连接到像素深度消退)

其次Depth Fade

处理半透明与不透明之间接缝的淡入淡出

半透明材质才能用

(这里直接找的网图例子)

Switch Param(交换开关)

true(1) 和false(0)

材质参数集(在调整体参数时→多个材质要用到该参数、要改定序器时用→定序器里可以通过材质参数集设定出材质的变化)

设置好所需要的材质参数集后(标量,矢量用颜色),把材质参数集拖进材质页面,在材质页面左下角细节选择该参数集

地形

远处地形可以用world creator软件做,近处一般都是摆

材质里如何混合各种贴图?

1.直接写进地形材质里,通过高度计算(地形材质用,山体高度)

2.写进layerblend里,给上权重层后通过笔刷刷(地形材质用,慢慢刷)

3.顶点绘制,通过顶点颜色来控制附近显示(用混合材质写,通过quixel mixer获得混合材质,但会受到模型点个数的影响——点少则过渡极其生硬,点多则效果OK)

自动化地貌材质

方法一

最终效果例子

Mat Layer Blend_Standard

基础材质为横着法线的那个材质(岩石)

顶层材质为竖着法线的那个材质(草地)

alpha连高度

 计算某个轴(蓝色为Z轴),归一化(使值为0到1),锐化,矢量积,线性插值

右边连材质属性(使用材质属性引脚,而不是常规引脚)

Layer Blend

加地形不同材质的绘制(通过给地形绘制里权重来实现地形的变化)

一层一层纹理给到材质通过权重混合到layerblend

如例子中的河床和草地

貌似只能在不是岩石的地方刷

Make Material Attributes=一开始最基础的基础颜色粗糙度金属度不啦不啦的

怎么用别人的地形

导出他的高度图文件,拷贝他的材质和权重层文件,创建地形,从文件导入高度图,用他的材质,地形绘制里赋予权重层文件(根据高度的不同会导致地形的不同变化,所以最好是移自己的东西而不是移动地形)


顶点动画

通过模型顶点位置上的偏移(生成顶点动画纹理记录信息)来形成材质上的动画

材质上就可以运动形成动画,通过顶点位移纹理信息就能用

用3dmax的点缓存和UE4里的顶点动画插件写出来

MS_VertexAnimationTools_MorphTargets(MaxScript?不太确定_顶点动画工具_变形目标)

Morph Animation

控制动画播放速率

用TimeWithSpeedVariable连接,通过其中的Speed控制动画播放速率

Morph Normal(T2d)

连接顶点动画的UV的顶点动画贴图纹理的UV

Morph Texture(T2d)

 顶点动画贴图纹理

Number of Morph Targets(S)

动画的帧数,一维变量连接

World Position Offset

连接到世界场景位置偏移

顶点动画和骨骼动画的区别

骨骼动画是模型动画中的一种,当前有两种模型动画的方式:顶点动画和骨骼动画。在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。

顶点动画中,每帧动画其实就是模型特定姿态的一个“快照”。通过在帧之间插值的方法,引擎可以得到平滑的动画效果

骨骼动画比顶点动画要求更高的处理器性能,但同时它也具有更多的优点,骨骼动画可以更容易、更快捷地创建。不同的骨骼动画可以被结合到一起——比如,模型可以转动头部、射击并且同时也在走路。一些引擎可以实时操纵单个骨骼,这样就可以和环境更加准确地进行交互——模型可以俯身并向某个方向观察或射击,或者从地上的某个地方捡起一个东西。多数引擎支持顶点动画,但不是所有的引擎都支持骨骼动画

(百度百科)

Custom rotate

自定义旋转

UV连Texcord

旋转角度连一维向量 0原值到1(360度)

0.25(逆时针90)

0.5(180)

0.75(270)

VectorToRadialValue

IF

A>B

A=B

A<B

猜你喜欢

转载自blog.csdn.net/hoppingg/article/details/123297164