Choose your operating system:
Windows
macOS
Linux
实用表达式 节点是会对材质造成多种不同影响的节点,或许跟以往有很大不同。例如,GIReplace节点会使用您输入的给定值取代对象间接反射颜色,而线性插值节点有助于根据alpha输入混合两个纹理。下文将详细介绍UE4材质编辑器中提供的所有实用表达式节点。
AntialiasedTextureMask
抗锯齿纹理蒙版(AntialiasedTextureMask) 表达式允许您使用软(抗锯齿)过渡蒙版来创建材质。此蒙版可用来在两个复杂材质属性之间混合,或者使alpha混合材质淡出(适合与"软屏蔽"配合使用)。您只需指定在其中一个通道(红色、绿色、蓝色或alpha)中指定了蒙版的材质,在此表达式中设置所使用的通道,并指定比较值。假设该通道存储0(黑色)到1(白色)范围内的灰阶值,比较函数将定义产生的蒙版是应该为0还是1。此表达式是一个参数,这使 纹理(Texture) 属性可以由子材质实例覆盖。
项目 |
说明 |
|
---|---|---|
属性 |
||
阈值(Threshold) |
指定用作像素范围中的分界点的值。小于此值的像素范围值将变为黑色,大于此值的像素范围值将变为白色。 |
|
通道(Channel) |
指定要用作蒙版的纹理通道。 |
|
纹理(Texture) |
指定要使用的蒙版纹理。 |
|
Inputs |
||
UV |
接收要应用于纹理蒙版的纹理坐标。 |
伪代码:
Result = 1
if TextureLookup < Threshold then Result = 0
实际实现略微复杂,因为它会尝试根据实际像素范围来返回介于0与1之间的值,以消除锯齿。
示例(为了确保质量最佳,这个128x128的小纹理未进行压缩):
用作正常纹理(左上角),以及与说明的材质表达式配合使用(右下角):
这种技术最适合在进行放大时使用,并可作用于模糊的输入内容。压缩会导致质量大幅下降,因此,请尝试使用未经压缩的低分辨率纹理。
BlackBody
黑体(BlackBody) 表达式用来在材质中模拟 黑体辐射 。用户输入开氏温度,产生的颜色和强度可用来驱动"底色"(Base Color)和"自发光"(Emissive)值,以获得在物理上准确的结果。
BumpOffset
凹凸贴图偏移(BumpOffset) 是虚幻引擎4术语,就是通常所谓的"视差贴图"。BumpOffset表达式可以使材质产生深度错觉,而不需要额外的几何体。BumpOffset材质使用灰阶_高度贴图_来提供深度信息。高度贴图中的值越亮,材质的"凸出"效果越明显;当摄像机在表面上移动时,这些区域将产生视差(移位)。高度贴图中较暗的区域将显得"距离较远",其移位程度最小。
项目 |
说明 |
|
---|---|---|
属性 |
||
高度比(HeightRatio) |
从_高度贴图_中取得的深度的乘数。这个值越大,深度越极端。典型值的范围是0.02到0.1。 |
|
参考平面(ReferencePlane) |
指定纹理空间中要应用此效果的近似高度。值为0将使纹理完全离开表面,而值0.5(默认值)表示部分表面凸起而部分区域凹陷。 |
|
Inputs |
||
坐标(Coordinate) |
接收此表达式所要修改的基本纹理坐标。 |
|
高度(Height) |
接收要用作高度贴图的纹理(或值)。 |
|
高度比输入(HeightRatioInput) |
从_高度贴图_中取得的深度的乘数。这个值越大,深度越极端。典型值的范围是0.02到0.1。如果使用此输入,那么它将取代"高度比"(Height Ratio)属性中的任何值。 |
ConstantBiasScale
常量偏差比例(ConstantBiasScale) 表达式接收输入值,加上偏差值,然后乘以比例缩放系数并输出结果。例如,要将输入数据从[-1,1] 转换到[0,1],请使用偏差值1.0和比例缩放系数0.5。
项目 |
说明 |
|
---|---|---|
属性 |
||
偏差(Bias) |
指定要与输入相加的值。 |
|
比例(Scale) |
指定偏差结果的乘数。 |
DDX
DDX 表达式公开DDX导数计算,这是像素着色器计算中使用的一项GPU硬件功能。
DDY
DDY 表达式公开DDX导数计算,这是像素着色器计算中使用的一项GPU硬件功能。
DepthFade
深度消退(DepthFade) 表达式用来隐藏半透明对象与不透明对象相交时出现的不美观接缝。
项目 |
说明 |
|
---|---|---|
属性 |
||
消退距离(Fade Distance) |
这是应该发生消退的全局空间距离。未连接消退距离(FadeDistance)输入时,将使用此距离。 |
|
Inputs |
||
不透明(Opacity) |
接收深度消退前对象的现有不透明度。 |
|
消退距离(FadeDistance) |
这是应该发生消退的全局空间距离。 |
DepthOfFieldFunction
视野深度函数(DepthOfFieldFunction) 表达式使美工能够控制当视野深度使材质模糊时,材质所发生的情况。它输出介于0与1之间的值,其中0代表"清晰",而1代表"完全模糊"。例如,这对于在纹理的清晰版本与模糊版本之间进行插值非常有用。"深度"(Depth)输入允许您使用其他计算来覆盖场景视野深度计算所产生的现有结果。
Desaturation
去饱和度(Desaturation) 表达式对其输入进行去饱和度,即根据特定百分比将其输入的颜色转换为灰色阴影。
项目 |
说明 |
|
---|---|---|
属性 |
||
亮度系数(Luminance Factors) |
指定每个通道对去饱和度颜色的影响量。此属性确保在去饱和度之后,绿色比红色亮,而红色比蓝色亮。 |
|
Inputs |
||
小数(Fraction) |
指定要应用于输入的去饱和度数量。此百分比的范围是0.0(完全原始颜色,不去饱和度)到1.0(完全去饱和度)。 |
程序员需知:
定义去饱和度颜色`D
、输入颜色`I`和亮度系数`L
。输出将是`O = (1-百分比)*(D.dot(I)) + 百分比*I`
Distance
距离(Distance) 表达式计算两个点/颜色/位置/矢量之间的欧氏距离,并输出结果值。此表达式可作用于单分量、双分量、三分量和四分量矢量,但此表达式的两个输入必须具有相同数目的通道。
项目 |
说明 |
|
---|---|---|
Inputs |
||
A |
接收一个值,或接收任意长度的矢量。 |
|
B |
接收一个值,或接收任意长度的矢量。 |
伪代码:
Result = length (A - B)
低级HLSL代码:
float Result = sqrt (dot (A-B, A-B))
DistanceFieldGradient
距离场梯度(DistanceFieldGradient) 材质表达式节点进行规范化后,将输出对象在距离场中的X,Y,Z移动方向。 这使DistanceFieldGradient材质表达式节点非常适合于需要模拟液体流的材质。
必须在 项目设置(Project Settings) 的 渲染(Rendering) 下启用 生成网格体距离场(Generate Mesh Distance Fields) ,此表达式才能正确工作。
项目 |
说明 |
---|---|
位置(Position) |
如果未输入任何内容,那么默认为当前全局位置。 |
这里是在材质中使用 DistanceFieldGradient 材质表达式的示例。 在此示例中,请务必注意,DistanceFieldGradient首先进行规范化,然后输入到"蒙版通道"(Mask Channel)节点。 这样做的原因是,如果不首先对DistanceFieldGradient进行规范化,您将无法获得方向性数据。 为了方便在材质实例中进行RGB通道切换,添加了"蒙版通道"(Mask Channel)参数。
以下是作用中的DistanceFieldGradient示例。 下图显示启用各种RGB后DistanceFieldGradient将会使用的数据。
编号 |
说明 |
---|---|
1 |
启用R通道并禁用所有其他通道。 |
2 |
启用G通道并禁用所有其他通道。 |
3 |
启用B通道并禁用所有其他通道。 |
DistanceToNearestSurface
与最近表面的距离(DistanceToNearestSurface) 材质表达式节点允许材质对"全局距离场"关卡中的任何点进行取样。 这个材质表达式将输出从距离场到场景中最近遮挡体的带符号距离(以全局空间单位计)。
必须在 项目设置(Project Settings) 的 渲染(Rendering) 下启用 生成网格体距离场(Generate Mesh Distance Fields) ,此表达式才能正确工作。
项目 |
说明 |
---|---|
位置(Position) |
如果未输入任何内容,那么默认为当前全局位置。 |
以下是作用中的 DistanceToNearestSurface 材质表达式示例。
在此示例中,DistanceToNearestSurface输送到材质上的"不透明"(Opacity)输入,而该材质应用于放在关卡地板正上方的"静态网格"平面。 DistanceToNearestSurface的作用是告诉材质,"静态网格"平面仅从红色区域开始与场景中的其他"静态网格"相交。
FeatureLevelSwitch
功能级别开关(FeatureLevelSwitch) 节点允许您建立简化的材质,以用于功能不太强大的设备。
用法示例 :您可能有一个采用10个重叠纹理及复杂数学运算的材质,但仅将单个静态纹理用于移动设备(功能级别ES2)。
项目 |
说明 |
|
---|---|---|
Inputs |
||
默认值(Default) |
默认功能级别。 |
|
ES2 |
由OpenGL ES2的核心功能定义的功能级别。 |
|
ES3.1 |
由金属级设备的功能定义的功能级别。 |
|
SM4 |
由DX10 Shader Model 4的核心功能定义的功能级别。 |
|
SM5 |
由DX11 Shader Model 5的核心功能定义的功能级别。 |
Fresnel
菲涅尔(Fresnel) 表达式根据表面法线与摄像机方向的标量积来计算衰减。当表面法线正对着摄像机时,输出值为0。当表面法线垂直于摄像机时,输出值为1。结果限制在[0,1]范围内,以确保不会在中央产生任何负颜色。
项目 |
说明 |
|
---|---|---|
属性 |
||
指数(Exponent) |
指定输出值的衰减速度。值越大,意味着衰减越紧或越快。 |
|
基本反射小数(Base Reflect Fraction) |
指定从正对表面的方向查看表面时,镜面反射的小数。值为1将有效地禁用菲涅耳效果。 |
|
Inputs |
||
指数输入(ExponentIn) |
指定输出值的衰减速度。值越大,意味着衰减越紧或越快。如果使用此输入,那么值将始终取代"指数"(Exponent)属性值。 |
|
基本反射小数(Base Reflect Fraction) |
指定从正对表面的方向查看表面时,镜面反射的小数。值为1将有效地禁用菲涅耳效果。如果使用此输入,那么值将始终取代"指数"(Exponent)属性值。 |
|
法线(Normal) |
接收三通道矢量值,该值代表表面在全局空间中的法线。要查看应用于菲涅耳对象表面的法线贴图的结果,请将该法线贴图连接到材质的"法线"(Normal)输入,然后连接一个 PixelNormalWS 表达式到Fresnel上的此输入。如果未指定任何法线,那么将使用网格的切线法线。 |
GIReplace
GI 替换(GIReplace)
允许美工指定另一个表达式链(通常较为简单),以便在材质用于GI时使用。
用法示例 :光照系统静态GI和LPV动态GI使用此表达式。
项目 |
说明 |
|
---|---|---|
Inputs |
||
默认值(Default) |
默认GI。 |
|
静态间接(StaticIndirect) |
用于烘焙间接照明。 |
|
动态间接(DynamicIndirect) |
用于动态间接照明。 |
观察下图中的两个红色方块 - 其中一个反射为绿色(而非红色)。
使用新材质表现可获得此效果。
通常而言不需要设置完全不同的颜色,使用较深、较亮、或 细微的颜色调节即可。
LightmassReplace
光照系统替换(LightmassReplace) 表达式用来在编译材质以用于正常渲染用途时传递"实时"(Realtime)输入,并在导出材质到光照系统以用于全局照明时传递"光照系统"(Lightmass)输入。使用此表达式可以避免使用导出版本无法正确处理的材质表达式,例如"全局位置"(WorldPosition)。
项目 |
说明 |
|
---|---|---|
Inputs |
||
实时(Realtime) |
接收要传递以用于正常渲染的值。 |
|
光照系统(Lightmass) |
接收在导出材质到光照系统时要传递的值。 |
LinearInterpolate
线性插值(LinearInterpolate) 表达式根据用作蒙版的第三个输入值,在两个输入值之间进行混合。您可以将其想像成用于定义两个纹理之间的过渡效果的蒙版,例如Photoshop中的层蒙版。蒙版Alpha的强度确定从两个输入值获取颜色的比例。如果Alpha为0.0色,那么将使用第一个输入。如果Alpha为1.0,那么将使用第二个输入。如果Alpha介于0.0与1.0之间,那么输出是两个输入之间的混合。请记住,混合按通道进行。因此,如果Alpha为RGB颜色,那么Alpha的红色通道值定义A与B的红色通道之间的混合,而与Alpha的绿色通道 无关 ,该通道定义A与B的绿色通道之间的混合。
项目 |
说明 |
|
---|---|---|
属性 |
||
常量 A(Const A) |
映射到0.0的值。仅当未连接A输入时才使用。 |
|
常量B(Const B) |
映射到1.0的值。仅当未连接B输入时才使用。 |
|
常量Alpha(Const Alpha) |
接收要用作蒙版alpha的值。仅当未连接Alpha输入时才使用。 |
|
Inputs |
||
A |
接收映射到0.0的值。 |
|
B |
接收映射到1.0的值。 |
|
Alpha |
接收要用作蒙版alpha的值。 |
程序员需知: LinearInterpolate根据参数值Alpha在A与B之间执行按通道插值。
Noise
噪点(Noise) 表达式建立过程式噪点场,以使您能够控制其生成方式。
项目 |
说明 |
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
属性 |
||||||||||||||||||||||
比例(Scale) |
更改噪点单元的整体大小。数字越小,噪点越大。 |
|||||||||||||||||||||
质量(Quality) |
外观/性能设置。值越小,速度越快,但效果越差;值越大,速度越慢,但效果更好。 |
|||||||||||||||||||||
函数 |
|
|||||||||||||||||||||
干扰(Turbulence) |
启用"干扰"(Turbulence)后,每个噪点倍频只会在结果中增加绝对值。改变视觉特征,并且会塑造出类似于清晰的山脊形状 |
|||||||||||||||||||||
级别(Levels) |
不同范围要合并的不同噪点级数量乘以级别数量的计算成本。 |
|||||||||||||||||||||
最小输出(Output Min) |
噪点计算的最低值输出。 |
|||||||||||||||||||||
最大输出(Output Max) |
噪点计算的最高值输出。 |
|||||||||||||||||||||
级别范围(Level Scale) |
级别范围始终为活动状态,确定每个新倍频的范围变化量。 |
|||||||||||||||||||||
平铺(Tiling) |
对于支持该属性的噪点函数,允许噪点平铺。在将噪点烘焙到无缝包裹纹理时,该属性成本更高,但十分有用。 |
|||||||||||||||||||||
重复大小(Repeat Size) |
平铺时,噪点的重复频率。 |
|||||||||||||||||||||
Inputs |
||||||||||||||||||||||
位置(Position) |
允许通过 3D 矢量来调整纹理大小。 |
|||||||||||||||||||||
过滤宽度(FilterWidth) |
实际上,控制应用于噪点纹理的模糊量。 |
Previous Frame Switch
上一帧开关(Previous Frame Switch) 材质表达式使您能够支持材质中实现的复杂 顶点动画 生成正确的运动矢量,这样它们才能正确使用临时AA和动态模糊。
只有时间函数的材质无需修改即可使用,但是它们无法解释其他变量,如材质参数,因此可能会影响动画。Previous Frame Switch材质表达式使美术能够手动解决这类问题,例如,通过跟踪蓝图中这些参数的变化情况,这样他们就可以手动为世界场景位置偏移的帧之间的变化引起的运动矢量生成提供表达式。
必须在 项目设置(Project Settings) 的 渲染(Rendering) 下启用来自顶点变形的速度后,此表达式才能正确生效:
-
4.24及之前版本使用 来自顶点变形的精准速度(Accurate Velocities from Vertex Deformations)
-
4.25及之后版本使用 来自顶点变形的输出速度(Output velocities from vertex deformation)
项目 |
说明 |
---|---|
当前帧(Current Frame) |
用作起点参考的方向矢量。 |
上一帧(Previous Frame) |
用作要添加模糊量的XYZ参考的方向矢量。 |
下面是一个在材质中使用 Previous Frame Switch 材质表达式的示例。
在该示例中,Previous Frame Switch使用常量值通过"乘"(Multiply)节点控制方向模糊。
在该示例中,您可以看到该函数在Epic自家游戏(如《堡垒之夜》)中的使用效果,通过在屏幕上聚集的顶点动画控制动态模糊。 右侧动画使用Previous Frame Switch来添加一些动态模糊,而左侧动画则没有。
QualitySwitch
质量开关(QualitySwitch) 表达式允许根据引擎在不同质量级别之间的切换使用不同的表达式网络,例如在较低端的设备上使用较低的质量。
项目 |
说明 |
|
---|---|---|
Inputs |
||
默认值(Default) |
此输入用于针对默认视觉质量而设计的网络。 |
|
低(Low) |
此输入用于针对较低视觉质量而设计的网络。 |
|
高(High) |
此输入用于针对较高视觉质量而设计的网络。 |
RotateAboutAxis
绕轴旋转(RotateAboutAxis) 表达式在给定旋转轴、该轴上的某个点以及旋转角度的情况下,旋转三通道矢量输入。此表达式适合于使用"全局位置偏移"(WorldPositionOffset)产生质量优于简单剪切的动画。
项目 |
说明 |
|
---|---|---|
Inputs |
||
规范化旋转轴(NormalizedRotationAxis) |
接收一个规范化 (0-1) 矢量,它代表对象的旋转轴。 |
|
旋转角度(RotationAngle) |
旋转角度。值1表示完全360度旋转。 |
|
枢轴点(PivotPoint) |
接收代表枢轴点的三通道矢量,对象将绕着该枢轴点旋转。 |
|
位置(Position) |
接收代表对象位置的三通道矢量。创建RotateAboutAxis表达式时,将自动创建一个WorldPosition表达式并将其连接至此输入。 |
在以上示例中,预览平面将显示为绕着它的垂直轴旋转。
SphereMask
球体蒙版(SphereMask) 表达式根据距离计算来输出蒙版值。如果某一个输出是某个点的位置,而另一输入是具有某半径的球体的中心,那么蒙版值将是0(位于球体外部)和1(位于球体内部),并存在一定的过渡区域。此表达式可作用于单分量、双分量、三分量和四分量矢量。
项目 |
说明 |
|
---|---|---|
属性 |
||
衰减半径(Attenuation Radius) |
指定用于距离计算的半径。 |
|
硬度百分比(Hardness Percent) |
指定过渡区域大小。此项目类似于Photoshop的笔刷硬度值。0表示硬过渡,100表示最大化过渡区域(软过渡)。 |
|
Inputs |
||
A |
接收一个值,该值代表要检查的点的位置。 |
|
B |
接收一个值,该值代表球体中心。 |
薄半透明
薄半透明材质输出 表达式可在单通道中精准再现基于物理的半透明材质。它可用于创建 真正的 染色或彩色半透明材质并对光照和着色做出精准的反馈。
在创建染色玻璃材质时,需要白色的高光和染色的背景。它们都由基于物理的着色器在单通道中渲染,并能够表现从空气中反弹到玻璃内的光线,以及从玻璃内反弹到空气中的光线。
在材质细节面板中进行以下设置即可启用薄半透明材质输出:
-
混合模式(Blend Mode) :半透明
-
着色模型(Shading Model) :薄半透明
-
光照模式(Lighting Mode) :表面ForwardShading
Vector Noise
矢量噪点材质(Vector Noise Material)表达式添加了更多的三维或四维矢量噪点结果以在材质中使用。由于这些函数会产生运行时间开销,建议在使用它们开发外观之后,使用虚幻引擎4.13及其后续版本中引入的 绘制材料以渲染目标蓝图 功能将所有或部分计算烘焙到纹理中。这些材质表达式允许在最终资源的引擎中开发程序外观,从而提供了一种使用外部工具创建程序生成的纹理以应用于UE4中的资源的替代方法。在矢量噪点材质表达式(Vector Noise Material Expression)中,您将看到以下矢量噪点类型。
图像 |
选项 |
说明 |
---|---|---|
|
单元格噪点(Cellnoise) |
为三维网格中的每个对象返回随机颜色(即从应用于节点输入的数学下限运算)。对于给定位置,结果始终保持一致,因此可以提供一种可靠的方法来将随机性添加到材质中。该矢量噪点(Vector Noise)函数的计算非常便宜,因此没有必要为了性能而将它烘焙到纹理中。 |
|
Perlin三维噪点(Perlin 3D Noise) |
为三维网格中的每个对象返回随机颜色(即从应用于节点输入的数学下限运算)。对于给定位置,结果始终保持一致,因此可以提供一种可靠的方法来将随机性添加到材质中。该矢量噪点(Vector Noise)函数的计算非常便宜,因此没有必要为了性能而将它烘焙到纹理中。 |
|
Perlin梯度(Perlin Gradient) |
计算标量Perlin Simplex噪点的分析三维梯度。输出为四个信道,其中前三个(RGB)为梯度噪点,第四个(A)为标量噪点。该噪点类型对于表面上的凹凸或者流动贴图很有用。 |
|
Perlin梯度(Perlin Gradient) |
计算矢量Perlin Simplex噪点(又名旋度噪点)的分析三维旋度。输出为一个三维有向旋度矢量,它对流体或粒子流动很有用。 |
|
Voronoi |
计算与标量噪点材质节点相同的Voronoi噪点。标量Voronoi噪点在三维空间中散射种子点,并返回与相隔最近的一个种子点的距离。矢量噪点(Vector Noise)变体返回RGB中最近的种子点的位置,以及在A中与它相隔的距离。特别是与单元格噪点(Cellnoise)结合使用时,这可以允许每个Voronoi单元格执行一些随机行为。 |
下面是一个简单的石床材质,使用矢量噪点(Vector Noise)/Voronoi的距离分量,并结合矢量噪点(Vector Noise)/单元格噪点(Cellnoise),来调整一些表面凹凸并在缝隙和种子位置中混合苔藓,以更改每块岩石的颜色和凹凸高度。
正如普通的Perlin噪点一样,基于导数的Perlin旋度和Perlin梯度运算也可以按倍频添加在一起。对于更复杂表达式的导数,有必要计算表达式结果的梯度。为了帮助实现这一点,可以将要计算的表达式放入一个材质函数中,并将其与以下辅助节点一起使用。
选项 |
说明 |
---|---|
Prepare3DDeriv |
利用四面体图形中的位置偏移计算三维导数。在该函数产生的每个偏移位置计算同一个三维函数,然后将结果值输入Compute3DDeriv。 |
Compute3DDeriv |
利用四面体图形中的位置偏移计算三维导数。与Prepare3DDeriv一起使用。 |
GradFrom3DDeriv |
根据Prepare3DDeriv/Compute3DDeriv的结果计算三维梯度矢量。 |
CurlFrom3DDeriv |
根据Prepare3DDeriv/Compute3DDeriv的结果计算三维矢量场的旋度。 |
这些辅助材质函数使用四面体图形中间隔的基本表达式的四个求值来近似计算这些基于导数的运算。
您将在下面看到各种噪点函数的相关说明,这些函数可以在矢量噪点材质表达式(Vector Noise Material Expression)中找到。
项目 |
说明 |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
属性 |
|||||||||||||
函数 |
|
||||||||||||
质量(Quality) |
外观/性能设置。值越小,速度越快,但可能外观越差;值越大,速度越慢,但可能外观越好。 |
||||||||||||
平铺(Tiling) |
对于支持它的噪点函数,它允许平铺噪点。此函数使用成本较高,但在将噪点烘焙到无缝缠绕纹理时很有用。 |
||||||||||||
平铺大小(Tile Size) |
平铺时噪点应多久重复一次。对于Perlin噪点变体,平铺大小(Tile Size)必须是三的倍数。 |
||||||||||||
Inputs |
|||||||||||||
位置(Position) |
允许通过三维矢量来调整纹理大小。 |
-
单元格噪点(Cell Noise) 材质示例:
-
Perlin梯度(Perlin Gradient) 材质示例:
-
Voronoi 材质示例: