UE4_虚幻引擎材质节点以及蓝图的学习
UE4_虚幻引擎材质节点以及蓝图的学习
🍉本笔记是我的UE材质节点学习笔记,随手写一下,我是菜鸡的水平,如果很厉害的大佬就可以跳过了哈!如有错误请及时指正!
🤩学习主要来自WTF is Material的章节,也就是来自Mathew Wadstein的tutorials~~~ 请有兴趣就去关注原作者!
🍅还有一些杂七杂八的从各种地方学的我应该会一同写在一起了,大部分也去ue的document查了一圈,拿了一些示例。我正在学习ue的路上,这个系列应该会持续更,有兴趣的想要一起学习的也可以关注我的更新!
✏️材质节点键盘快捷键不全的大全:
快捷键 | Node Name | 中文 |
---|---|---|
1 | constant | 一维向量 |
2 | constant2Vector | 二维向量 |
3 | constant3Vector | 三维向量 |
4 | constant4Vector | 四维向量 |
A | Add | 加法 |
M | multiply | 混合,乘法 |
D | divide | 除法 |
T | TextureSample | 纹理贴图 |
P | Panner | 坐标平移 |
U | TextureCoordinate | 纹理坐标 |
L | Lerp | 插值函数 |
I | if | 参数判断 |
C | comment | 备注说明 |
B | BumpOffset | 视差贴图 |
N | Normalize | 归一化函数 |
E | power | 幂 |
O | one-minus | 反向,反向颜色 |
✏️官方操作快捷键:
- 图来自网络
✏️Actor Position WS(vectors)
🍏【ActorPosition】:
对象坐标值,输出的是vector3,指这个actor在世界空间中的位置(已经赋予此材质的对象)。它的整体变化是以actor的坐标为基准。
- 下图是actorPosition的示例,图来自于YakSue的CSDN博客,链接在此。(如侵权请联系删除)
🍏【Object Position】:
与他比较相似的是 Object Position,输出对象bound的世界场景空间中心位置。它的变化则是以整体中心为基准。
- 下图是Object Position的示例,图来自于YakSue的CSDN博客。
🍏【Absolute World Position】:
Absolute World Position,表示在全局空间中的位置。
- 下图是Absolute World Position的示例,图来自于YakSue的CSDN博客。
✏️Add(math)
加法,常用于颜色亮暗的调节,或者使用于offset。
- 他所做的事情和数学一样,就是获取两个input并把他们values相加。如果使用多个通道传递,则每个通道分别相加。- 两个input的如果是多通道,那么通道必须数量相同;但是如给其中一个是单值常量则例外,单值浮点会与多通道每个通道相加并输出。
✏️AppendVector(math)
二维加法,将一个值加入(插入)到另一个值后端。允许你组合通道,比如你有一个二维向量,你可以通过append加入第三个向量。
- 要注意它和add是完全不同的,它并不是数值上的相加。
✏️Abs(math)
absolute value,绝对值;它没有参数,但是涵盖一个很简单的函数。这个函数是取input的绝对值。这意味着它通过去掉负号把负数变成正数,而正数和零保持不变
- 这个函数意味着它的output是没有负数的,大多数情况下使用于不想取到负值的情况下,将output的区间钳制在正数区间。
- 一般配合点积使用,确定两个向量之间的角度关系,计算它是平行,垂直,还是介于两者之间。通常,当您得到两个向量的点积时,该值在1.0(对于两个平行向量)与-1.0(对于两个完全相反的向量)之间进行插值,中间点0表示这两个向量是垂直的。当您取这个点积的绝对值时,正值保持不变,而负值通过去掉负号变成正数。因此,结果在0(对于垂直向量)和1.0(对于平行向量,无论向量指向相同还是相反的方向)之间进行插值。这只是告诉您这两个向量距离正交有多远。
✏️BlackBody(utility)
黑体,用来在材质中模拟黑体辐射,运用开尔文温度,产生颜色和轻度来驱动basecolor和emissive,获得物理上准确的结果
✏️BumpOffset(function)
高度视差,就是所谓的视差贴图。凹凸贴图偏移表达式可以使材质产生深度错觉,而不需要额外的几何体。凹凸贴图偏移材质使用灰阶高度贴图来提供深度信息。
- 它有三个input:
- coordinate
- height(一般情况下这个通道是必须的,需要一张灰度图,越黑代表距离越远,越白距离越近。)
- heightRatioInput(这个建议较小的数值,否则扭曲和拉伸会较为严重)
✏️Camera Position WS(vectors)
相机坐标值,会输出一个三通道向量值,该值表示摄像机在世界场景空间中的位置.
- 看如下案例,相机位置如果高于物体位置,呈现白色;如果低于物体位置,呈现黑色。
✏️Clamp(math)
范围限定;接受一个或多个值,并将它们约束到由最小值和最大值定义的指定范围内。如果最小值为0.0,最大值为0.5,则意味着结果值永远不会小于0.0,且永远不会大于0.5。
- 有三个input
- clamp mode(可以设定只有 max或只有 min)
- Min Default
- Max Default
- 它保证数值不会大于你自定义的max,也不会小于你自定义的min。
✏️Component Mask(math)
相当于参数提取,它允许你从输入中挑选某个通道子集(R、G、B和/或A)并输出。
- 下图示例: 如果ComponentMask的输入是(0.2,0.4,1.0)和G通道,输出将是(0.4)。如果是颜色向量,最终效果就是一个40%的明亮灰度值。
✏️Constant Bias Scale(math)
允许你按比例调整参数,它有两个参数,运算规则是:先加bias的数值,后与scale数值相乘。
✏️Constant类型(constant)
constant实际上有一堆,分别是constant,constant2vector,constant3vector,constant4vector,他们都输出常量,只是通道数量不一样。他们按通道的个数分别是输出RGBA或者XYZW。
✏️Cross Product(math)
叉积,计算两个三通道向量值输入的交叉乘积,并输出产生的三通道向量值。假定空间中有两个向量,则交叉乘积是一个同时垂直于两个输入的向量。计算方式与数学上面的叉积没有区别。
- CrossProduct常用于计算垂直于另外两个方向的方向。
✏️Custom Rotator(texturing)
自定义旋转,它会提供一个center,然后你可以实际运用这个center去定义不同的点,来进行旋转。
- 它有三个input
- UVs
- Rotation Center(这实际就是设置中心的地方)
- Roataton Angle(0-1的区间,360度)
✏️Depth Fade(texturing)
深度消退,用来隐藏半透明对象与不透明对象相交时出现的不美观接缝,起到柔化边缘相交处的接缝的作用。
- 注意选择合适的fade distance。
- depth fade在制作地形,植被时候可以用来改善相交处的接缝。
✏️Depth of Field Funtion(Utility)
景深运算,根据景深设置你所要取的区间。
- 0代表in focus;1代表out of focus
- 可以使用它作为on 和 off;比如距离近的时候使用高分辨率的贴图之类的,使用dof function来判断是不是in focus。
✏️Desaturation(color)
去饱和度,对input进行饱和度去除,即根据特定百分比将其输入的颜色转换为灰色阴影
- 它有两个input
- Luminance Factors(指定每个通道对去饱和度颜色的影响量。此属性确保在去饱和度之后,绿色比红色亮,而红色比蓝色亮。)
- Fraction (指定要应用于输入的去饱和度数量。此百分比的范围是0.0(完全原始颜色,不去饱和度)到1.0(完全去饱和度)。)
✏️Diamond Gradient(miscellaneous)
钻石型渐变图案。可以通过调整fall off 得到不同程度的衰减效果。
✏️Distance(math)
距离计算,计算两个点/颜色/位置/矢量之间的欧氏距离,并输出结果值。此表达式可作用于单分量、双分量、三分量和四分量矢量,但此表达式的两个输入必须具有相同数目的通道。
- 可以理解为:Result = length (A - B)
✏️Divide(math)
除法,取两个输入,将第一个输入除以第二个输入,并输出值。
- 两个输入必须有相同数量的值,但其中一个值是单个浮点值时例外。在这种情况下,将多通道输入的每个通道除以单个浮点值,并将结果存储在输出值的单独通道中。
- 如果使用多个通道传递值,每个通道将单独相除。
- 如果除数在任何通道内都介于0和0.00001之间,则将其提升至0.00001。如果除数在任何通道内都介于0和-0.00001之间,则将其降低至-0.00001。这避免了出现除以零的错误可能性。但是,这也意味着通道的输出值可能非常大。
✏️Dot Product(math)
点积,点积可以描述为一个向量投影到另一个向量上的长度,也可以描述为两个向量之间的余弦乘以它们的幅值。许多技术使用这种算法来计算衰减。DotProduct要求两个向量输入具有相同数量的通道。
✏️Feature Level Switch(math)
特征等级切换,此节点允许你你使用相同的材质,但是可以基于不同的shader level去显示不同的东西,多用于设置材质用于不同设备时。
- 举个例子来看,如下图,我们的preview Rendering Level是不同的;这个材质节点的作用就是当你有这样一些feature level的时候,它的inputs提供的选项允许你去自行设置先要输出的内容,如果它没有特殊被设置,那就会自行使用default。
- 他必须使用一个default,否则无法工作。
- 你可以通过此设置更轻量的东西去到移动端设备。
✏️Floor and Ceil(math)
Floor,舍去小数部分,向下取整。比如0.2向下舍入取整就是0.0;(0.2,1.6)向下舍入到(0.0, 1.0)。
Ceil,舍去小数部分,向上取整。比如0.2向上舍入取整就是1.0;(0.2,1.6)向上舍入到(1.0,2.0)。
- 这两个节点可以理解为做相同的事情,但是结果相反,就像min和max一样。
- 他们的名字也可以看出floor是向下,ceil则是向上。
✏️FMod(math)
除不尽的取取余数。也就是返回两个input的除法运算的浮点余数,第一个input可以是任何数,第二个input通常不为0(被除数不为0)
- 它的常见的用例是制作一种材质,使其亮度上升到最大值,然后在下一帧中立即下降到最小值,然后再次开始向最大值攀升。
- 如下图示例,FMod采用0到1的UV级数,并将其转换为绿色通道中X轴上每0.2个UV单元一次的重复循环。
✏️Frac(math)
fractional,取小数;输入input,此节点返回input的小数部分。输出值将从0到1不等。
- 举例来说:(0.2)的小数部分是(0.2)。(-0.2)的小数部分是(0.8)。(0.0,1.6,1.0)的小数部分是(0.0,0.6,0.0)。
- 如下图示例,Frac节点将时间转换为一系列重复的0 - 1级数序列,导致颜色(通过Lerp)从绿色变为红色,然后返回绿色,无限重复。
✏️Fresnel(utility)
菲涅尔,根据表面法线与摄像机方向的标量积来计算衰减。当表面法线正对着摄像机时,输出值为0。当表面法线垂直于摄像机时,输出值为1。结果限制在[0,1]范围内,以确保不会在中央产生任何负颜色。
- 它有两个属性:
- Exponent(指定输出值的衰减速度。值越大,意味着衰减越紧或越快。)
- Base Reflect Fraction(指定从正对表面的方向查看表面时,镜面反射的小数。值为1将有效地禁用菲涅耳效果。)
- 它有三个inputs:
- ExponentIn (指定输出值的衰减速度。如果使用此输入,那么值将始终取代”指数”(Exponent)属性值。)
- Base Reflect Fraction(如果使用此输入,那么值将始终取代”指数”(Exponent)属性值。)
- Normal(该值代表表面在全局空间中的法线。要查看应用于菲涅耳对象表面的法线贴图的结果,请将该法线贴图连接到材质的”法线”(Normal)输入,然后连接一个PixelNormalWS 表达式到Fresnel上的此输入。如果未指定任何法线,那么将使用网格的切线法线。)
✏️Generated Band(miscellaneous)
条形图案;允许我们生成一个条状的图案,可以调整宽度,锐度(可以为负),偏移,方向(横向纵向)等等。
✏️Generated Offest Bands(miscellaneous)
局部重复条形图案,参数使用与Generated Band几乎无差别,但有一个叫做band的额外参数;这使我们得到一对band(实际上在band这个参数为1,其他参数保持默认的时候,我们得到的是两对白色的band),而不是单个band。
- 此时compare参数可以调整band之间的间距,为0时两两之间互相成对的band的间距最远,为1时最近。
- 详细看图对比。
✏️GIReplace(utility)
全局光照替换;这个节点可以为材质提供在全局照明下产生不同间接反射效果的方式。它允许指定一个定值来取代间接反射颜色。
- 它有三个inputs:
- Default
- StaticIndirect
- DynamicIndirect
✏️If(math)
判断;比较两个输入,然后根据比较的结果传递其他三个输入值中的一个。两个比较的输入都必须是单一浮点值。
- 如下图示例,if接受一个高度图,并根据高度是低于还是高于0.2的值来输出红色或绿色。
✏️Interface Previewing Property(材质details)
修改预览网络,可以自定义材质节点编辑器中的预览mesh。
✏️Lightmess Property(材质details)
Lightmess,你可以理解为它是static light system。它创建具有复杂光交互作用的光照图,例如区域阴影和漫反射。它用于预计算具有固定和静态运动性的光源的照明贡献部分。
- 你可以使用 cast shadow as masked或不使用它;它们的效果不同。
- 如下图所示,左边是不勾选cast shadow as masked,阴影为绿色;右边是勾选此属性,半透明物体会使用遮罩,阴影为黑色,使它得到清晰的阴影以及轮廓;
- diffuse boost,材质漫反射对静态光照影响量的增加和提升,更高的数值会更清晰明亮。(记住是static lighting的情况,而不是realtime,所有的光照都经过bake。)
- Export Resolution Scale,导出该材质属性时的分辨率乘数。在需要详细信息时应增大此数值(计算时间也会增加)。
✏️Lightmess Replace(utility)
光照系统替换, 有两个inputs,来确定使用realtime(接收要传递以用于正常渲染的值)和使用lightmass(接收在导出材质到光照系统时要传递的值)时的输出效果。它可以避免使用导出版本无法正确处理的材质表达式,例如WorldPosition。
- 下图示例设置lightmass的情况
✏️Linear Gradient(Gradient)
线性渐变;函数使用 UV 通道 0 在 U 或 V 方向上产生线性渐变,其中,方向取决于所使用的输出。
✏️Linear Interpolate(utility)
就是Lerp,线性插值;用作蒙版的第三个输入值,在两个输入值之间进行混合;蒙版Alpha(相当于a与b之间的mask)的强度确定从两个输入值获取颜色的比例。
- 如果Alpha为0.0色,那么将使用第一个输入。如果Alpha为1.0,那么将使用第二个输入。如果Alpha介于0.0与1.0之间,那么输出是两个输入之间的混合。
- 请记住,混合按通道进行。因此,如果Alpha为RGB颜色,那么Alpha的红色通道值定义A与B的红色通道之间的混合,而与Alpha的绿色通道 无关,该通道定义A与B的绿色通道之间的混合。
✏️Min and Max(math)
Max ,最大值;有两个输入,输出其中较大的一个。结果类似于Photoshop中的 变亮 图层混合模式。
Min , 最小值;有两个输入,输出其中较小的一个。结果类似于Photoshop中的 变暗 图层混合模式。
✏️Mobile Property(材质属性界面,details)
移动平台;多用于节约性能以便于移动端使用
- Use Full Precision ,强制此材质在像素着色器中使用全(highp)精度。它的处理速度比默认设置(mediump)慢,但可用于解决与精度相关的渲染错误。此设置对不支持高精度的旧版移动设备无效。
- Use Lightmap Directionality,此属性将使用光照图方向性和逐像素法线。如果禁用此属性,光照图中的光照将是平面的,但开销更低。
- (左侧Fully Rough off,Use Lightmap Directionality on。右侧效果Fully Rough on,Use Lightmap Directionality off)
✏️Multiply(math)
乘法;数学计算的相乘。作为叠加来使用结果类似于Photoshop中的 正片叠底 图层混合模式的结果。
- 两个输入必须有相同数量的值,但其中一个值是单个浮点值时例外。在这种情况下,将多通道输入的每个通道乘以单个浮点值,并将结果存储在输出值的单独通道中。
- E4中的材质不限于[0,1]。如果颜色/值大于1,Multiply会使颜色变亮。
- Multiply常用于使颜色/纹理变亮或变暗,或用于操作纹理UV。
✏️Noise(math)
噪点,噪波; 它有很多可以设置的参数。
- 【它的参数】:
- Scale(更改噪点单元的整体大小。数字越小,噪点越大。)
- Quality(外观/性能设置。值越小,速度越快,但效果越差;值越大,速度越慢,但效果更好。)
- function(噪波类型)
- Simplex
- Gradient
- Fast Gradient
- Value
- Voronoi
- Turbulence(启用”干扰”(Turbulence)后,每个噪点倍频只会在结果中增加绝对值。改变视觉特征,并且会塑造出类似于清晰的山脊形状)
- Levels(不同范围要合并的不同噪点级数量乘以级别数量的计算成本。)
- Output Min
- Output Max
- Level Scale
- Tiling
- Repeat Size
- 【它的input】:
- Position(允许通过 3D 矢量来调整纹理大小)
- FilterWidth(实际上,控制应用于噪点纹理的模糊量)
✏️Normalize(math)
归一化;归一化向量(也称”单位向量”)的整体长度为1.0。这意味着输入的每个分量都除以向量的总大小(长度)。
- 通过Normalize传递(0,2,0)或(0,0.2,0)都将输出(0,1,0)。通过Normalize传递(0,1,-1)将输出(0, 0.707, -0.707)。全零向量是唯一的例外,它不会改变。
- 计算如下:先计算出长度d,再用每一个分量与长度d相除(x/d,y/d,z/d),得到相应的归一化向量。
✏️Object Orientation(coordinates)
输出object的世界场景向上向量(up)。换言之,对象的局部正z轴正指向此方向。
✏️Object Position WS(coordinates)
输出对象边界的世界场景空间中心位置。它的变化则是以整体中心为基准。
- 这对于为植物创建球形照明很有用。
✏️Object Radius(coordinates)
输出给定对象以 Unreal 单位计的半径值。系统会对比例缩放加以考虑,并且对于每个对象,结果可能是唯一的。
- 比如可以根据radius调整贴图的tile来适配场景,而不会因为它等比增加或减少而导致贴图错误。
✏️One-Minus(math)
反向,反色;接受输入值”X”并输出”1 - X”。
-当输入的颜色在[0,1]范围内时,OneMinus的效果与我们通常所说的”反色”是一样的,也就是说,OneMinus返回的是添加到输入时会产生白色的互补色。
✏️Packed Textures
打包,合并贴图;可以将metallic和roughness等灰度图合并到一起,分别放在rgb的相应通道中使用,以得到更好的性能(相比于多张分开的贴图)。
✏️Panner(coordinates)
平移,输出可用于创建平移(或移动)纹理的 UV 纹理坐标。
- 示例:调整speed使其变化
✏️Parameter Collection(材质参数集合)
材质参数集合,是虚幻内部的一个item,属于一种资产。
它允许你在里面放置参数,并且可以跨越多种材质来使用它,可以一次性将这个全局性数据导入多个材质,并且允许你同时控制调整这个参数。
- 它还有助于设置关卡中的效果,例如雪量、破坏程度、湿度等。如果不使用材质参数集合,你需要在关卡的不同材质实例中单独设置许多材质参数。
- 设置好后,可以去材质节点版面调用它。
- 它的使用方法官方文档,链接在此
✏️Parameters(convert to Parameters)
转为参数;它更多是指特定节点上的切换,允许他们在实例(instance)材质被使用。
基本上通俗的理解就是:转化原材质的参数,在复制后的代理材质也会拥有原材质一样的功能,可以被修改和实时调整,而不需要取重新打开材质版面修改再重新编译材质。
✏️Physical Material(物理材质)
物理材质,用于定义物理对象在与世界场景动态交互时的响应。
物理材质非常容易使用。创建一个物理材质将提供一组默认值,这与应用于所有物理对象的默认物理材质相同。
✏️Pixel Depth(Depth)
像素深度,输出当前所渲染像素的深度,即该像素与摄像机之间的距离。
- 此表达式支持正数,不支持负数。这是因为在现代硬件上,渲染器依赖于保守深度优化来维持良好的性能。这就带来了额外的一点好处:如果深度可以 远离 摄像机,硬件深度抑制(hardware depth rejection)可以通过顶点着色器输出重复使用。否则,如果允许像素深度偏移 移向 摄像机,就可能导致对象戳穿一切,这样无论像素是否使用像素深度偏移进行遮挡,像素着色器都会处理这些像素。
- 在此示例中,已将材质网络应用于地板。请注意当地板后退 2048 个以上单位时,线性插值在两种颜色之间是如何进行混合的。使用了 Power(幂)表达式来加强这两种颜色之间的对比,并产生更有意义的视觉效果。
✏️Pixel Normal WS(Coordinates)
根据当前法线输出向量数据,该数据表示像素所面对的方向。它在世界空间中,逐像素给出对应结果。
- 在此示例中,PixelNormalWS被输入到底色(Base Color)中。请注意,法线贴图用于给出逐像素结果。
✏️Post Processing Material Property(后期材质)
后期材质,后期处理材质使你能够设置与后期处理一起使用的材质,以创建破坏的视觉屏幕效果、区域类型效果或 只能通过后置处理材质才能实现的游戏整体外观。
- 将材质设置为post process时,它的属性栏就会被激活。材质只能使用 自发光颜色(Emissive Color) 输出新颜色。此外,你还可以定义在后期处理过程中应在何处应用此通道, 如果有多个通道,则应按什么顺序处理(优先级)
✏️Power(math)
幂,N次方;它接收两个输入:基值(Base)和指数(Exp)。它将基值提高到指数的幂,并输出结果。换句话说,它返回 Base 乘以自身 Exp 次。
- 示例:当底数为0.5且指数为2.0时,幂为0.25。
✏️Property
材质属性;材质版面details可以具体调整材质的各种属性。
- 它有很详细的官方文档,链接在此
- 官方文档中,它的每一个属性以及下拉菜单都有详细介绍。
✏️quality switch(utility)
质量开关;通过调整质量设置,来切换引擎质量的显示,来配合硬件的性能,适配对应相应的画质表现。允许设置low,mid,high。
允许根据引擎在不同质量级别之间的切换使用不同的网络,例如在较低端的设备上使用较低的质量。
✏️Radial Gradient Exponential(Gradient)
指数径向渐变;函数使用 UV 通道 0 来产生径向渐变,同时允许用户调整半径和中心点偏移。
✏️Rotate About Axis(utility)
绕轴旋转,给定旋转轴、该轴上的某个点以及旋转角度的情况下,旋转三通道矢量输入。此表达式适合于使用”全局位置偏移”(WorldPositionOffset)产生简单剪切的动画。
- 示例:预览平面将显示为绕着它的垂直轴旋转。
✏️Rotator(coordinate)
旋转,以双通道向量值形式输出 UV 纹理坐标,该向量值可用来创建旋转纹理。
✏️screen Position(coordinate)
屏幕位置,输出当前所渲染像素的屏幕空间位置。
✏️sin和cosine(math)
常见使用用途是输出某种有规律的waves。
sine,正弦。表示输入范围和[-1, 1]的输出范围上反复输出正弦波的值。它与Cosine表达式的输出之间的区别是输出波形被四分之一的周期所抵消,这意味着”Cos(X)”等于”Sin(X + 0.25)”。
sine最常用于通过将一个 时间(Time) 表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:
、
cosine, 余弦;表示在[0, 1]的输入范围和[-1, 1]的输出范围上反复输出余弦波的值。
cosine最常用于通过将一个 时间 表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:
✏️sphere mask(utility)
球体蒙版;根据距离计算来输出蒙版值。
如果某一个输出是某个点的位置,而另一输入是具有某半径的球体的中心,那么蒙版值将是0(位于球体外部)和1(位于球体内部),并存在一定的过渡区域。此表达式可作用于单分量、双分量、三分量和四分量矢量。
- 示例:当摄像机距离预览对象超过256个单位时,该对象将平滑地渐变为黑色。
✏️square Root(math)
平方根;。如果应用于向量,则每个分量将分别处理。输出的也是一个数学结果。
- 对于0到1范围内的纹理,这会降低图像的对比度。例如,在下面的校准纹理中,深色值会变得更亮,白色值会向灰色转变。
✏️substract(math)
减法;接受两个输入,将第一个输入减去第二个输入,然后输出差值。
- 两个输入必须有相同数量的值,但其中一个值是单个常量值时例外。在这种情况下,将多通道输入的每个通道减去常量值,并将结果存储在输出值的单独通道中。
- 示例:0.5与0.2相减得0.3;(0.2,-0.4,0.6)与(0.1,0.1,1.0)相减得(0.1,-0.5,-0.4);(0.2,0.4,1.0)与0.2相减得(0.0,0.2,0.8)。
- Subtract可以用来加深颜色和偏移UV。
✏️swizzle(miscellaneous)
通道扰乱,主要作用是flip原来的x和y,比如xyz会变成yxz。
✏️Time(constant)
时间;用来向材质(例如,Panner(平移)、Cosine(余弦) 或其他时间相关操作)添加经历时间。代表时间流逝,但是会不断更新。
- 它有两个参数:
- Ignore Pause(如果为 true,那么时间将一直推进,即使游戏暂停也是这样。)
- Period (如果为 true,那么这将是时间回绕前经过的时间量。针对移动材质,这将以全精度在 CPU 上执行周期计算,而在 GPU 上,将以半精度运行(处理长度超过一分钟的周期时,可能会产生问题))
- 上图中说明的网络将创建一个随时间推移而变化的材质,从而连贯地展现白色与黑色之间的正弦曲线过渡。如果启用了时间段,那么将时间段设置为 0 会有效地停止过渡,而设置为 1 相当于时间段为 false。设置接近于 0 的数值将使材质更迅速地变化。
✏️Translucency Property
半透明属性;
最终颜色 = 源颜色 不透明度 + 目标颜色 (1 - 不透明度)。此混合模式与动态光照 不 兼容。
- 需要确保 screnn space reflcetions 为true,开启后支持半透明材质的屏幕空间反射。
- 并且根据场景需求选择Translucency lighting mode,这可以控制半透明(Translucency)在该材质中使用的光照模式。下拉菜单越往下开销越大。
- 材质属性详细查看document,链接在此
✏️Translucency self shadowing Property
半透明自投影;半透明自身阴影是一种获得体积光照半透明对象(例如烟柱或蒸汽柱)的好方法。自投影分为两个主要部分:自身阴影密度(Self Shadow Density)和第二自身阴影密度(Second Self Shadow Density)。这两个部分的存在为变化提供了可能。你可以单独定义各个部分的密度,并使用它们之间的差异在整个自身阴影中获得你需要的模式。
- 在translucent mode下使用,需要有一个base color
- 材质属性详细查看document,链接在此
✏️Tesselation Property
曲面细分;增加了额外的几何,用于添加更多物理细节。
- Flat Tessellation,曲面细分的简单形式。此模式会在不平滑网格体的前提下添加更多三角形。
- PN Triangles,使用基于样条的简单曲面细分,这种曲面细分虽然开销更高,但细节表现效果更佳。
- 官方文档链接在此
✏️Texture Coordinate(coordinate)
纹理坐标;双通道,输出uv纹理坐标,改变uv平铺。
- 如需访问网格体的第二个 UV 通道,请创建一个 TextureCoordinate(纹理坐标)节点,将其”坐标索引”(CoordinateIndex)设置为 1(0 表示第一个通道,1 表示第二个通道,等等),并将其连接到 TextureSample(纹理取样)节点的 UV 输入。
✏️Texture sample(texture)
纹理贴图,输出input的纹理颜色,一般就是2d贴图为主
- UVs,接收UV纹理坐标,以用于纹理。如果没有任何值输入到UV,那么将使用材质所应用到的网格体的纹理坐标
- **DDX(UVs)**,接收UV输入的DDX以用于各向异性过滤。默认情况下,硬件自动执行此过滤,并且速度更快。但是在某些情况下,可能需要使用DDX材质表达式显式地设置此项目,以避免延迟贴花的2x2像素块瑕疵之类的瑕疵。仅当 Mip值模式(MipValueMode) = 导数(Derivative) 时才可用。
- **DDY(UVs)**,接收UV输入的DDY以用于各向异性过滤,这与DDX(UV)接收UV输入的DDX相同。
✏️value step(gradient)
值阶;接收现有的纹理通道或渐变,并根据用户的输入来输出纯黑白色图像。结果是一个蒙版,它代表与输入值相等的渐变部分。
✏️vector to radial value(miscellaneous)
矢量到径向值;将”矢量 2”矢量转换为角度,或者将 UV 坐标数据转换为径向坐标。对于矢量,角度将在一个通道中输出,而矢量长度在另一通道中输出。
- Radial Coordinates(返回输入的径向坐标,对于矢量,角度将在一个通道中输出,而距离在另一通道中输出。)
- Vector Converted to Angle(返回输入矢量的角度,返回径向梯度)
- Linear Distance(返回输入矢量的线性长度,对于 UV,输出距离的径向梯度。)
✏️vertex Normal WS(coordinate)
世界场景空间顶点法线;它只能用于在顶点着色器中执行的材质输入,例如WorldPositionOffset。
该表达式对于设置网格体增大或缩小很有用
- 如上示例,小球每个顶点的法线会在各自法线方向上移动,会随着正弦运动按比例放大和缩小。
✏️view size(coordinate)
视图大小;表达式输出一个 2D 向量,以给出当前视图的大小(以像素为单位)。这对于使材质根据当前屏幕分辨率产生各种变化来说非常有用。
- 如示例,按照视图比例,来变换颜色。
✏️world position(coordinate)
全局位置,输出当前像素在全局空间中的位置。
- 常见用法是确定从摄像机到像素的径向距离,而不是像 PixelDepth(像素深度)那样确定正交距离。WorldPosition(全局位置)也可用作纹理坐标,并让不相关的网格在它们彼此邻近时进行纹理坐标匹配。以下是使用 WorldPosition.xy 对纹理进行二维贴图的基本示例:
wtf is material 全篇到这里就结束了,这一遍看的很粗略,不过收益很多!还会持续学习!