UE4材质系统

1.基于物理的材质(转自官方文档)

在材质系统的"基于物理(Physically Based Materials)"方面,只有 4 个您需要熟悉的不同属性。它们是:
底色(Base Color)
粗糙度(Roughness)
金属色(Metallic)
高光(Specular)

底色
底色(Base Color) 定义材质的整体颜色。它接收 Vector3 (RGB) 值,并且每个通道都自动限制在 0 与 1 之间。
如果是从现实世界获得的,那么这是使用偏振滤光器拍摄时获得的颜色 (偏振在校准时会消除非金属材质的镜面反射)。

image.png

对于非金属材质测得的底色值(仅限强度):

材质 底色强度
木炭 0.02
新鲜沥青 0.02
老化沥青 0.08
裸露土壤 0.13
绿色草地 0.21
沙漠沙子 0.36
新鲜混凝土 0.51
海冰 0.56
新鲜雪 0.81

针对金属测得的底色:

材质 底色 (R, G, B)
(0.560, 0.570, 0.580)
(0.972, 0.960, 0.915)
(0.913, 0.921, 0.925)
(1.000, 0.766, 0.336)
(0.955, 0.637, 0.538)
(0.550, 0.556, 0.554)
(0.660, 0.609, 0.526)
(0.542, 0.497, 0.449)
(0.662, 0.655, 0.634)
(0.672, 0.637, 0.585)

粗糙度

粗糙度(Roughness)输入控制材质表面的粗糙或平滑程度。与平滑的材质相比,粗糙的材质将向更多方向散射所反射的光线。 这决定了反射的模糊或清晰度(或者镜面反射高光的广度或密集度)。 粗糙度 0(平滑)是镜面反射,而粗糙度 1(粗糙)是漫射(或无光)表面。

粗糙度从0到1(非金属)
粗糙度从0到1(金属)

金属色

金属色(Metallic)输入控制表面在多大程度上"像金属"。非金属的金属色(Metallic)值为 0, 金属的金属色(Metallic)值为 1。对于纯表面,例如纯金属、纯石头、 纯塑料等等,此值将是 0 或 1,而不是任何介于它们之间的值。创建受腐蚀、落满灰尘或生锈金属之类的混合表面时, 您可能会发现需要 介于 0 与 1 之间的值。

金属色从0到1

高光

在编辑 非金属 表面材质时,您有时可能希望调整它反射光线的能力,尤其是它的 高光 属性。 要更新材质的高光度,需输入介于0(无反射)和1(全反射)之间的标量数值。注意,材质的默认高光值为0.5

对于漫射度非常大的材质,您可能倾向于将此值设置为零。请忍住,不要这样做!所有材质 都具有镜面反射,请参阅此帖子以获取示例 [5]
对于漫射度非常大的材质,您真正想做的是 使它们粗糙

一般而言,通过修改"高光"(Specular),可添加轻微的吸着现象或小比例的遮蔽,例如在法线贴图中表示的裂缝。有时,将这些现象称为腔洞。 比例较小的几何体,尤其是仅存在于高多边形中且并入法线贴图的细节,不会被渲染器的实时阴影拾取。为了捕获这种遮蔽,我们生成腔洞贴图, 这通常是追踪距离非常短的 AO 贴图。此贴图先乘以最终的底色,然后输出并乘以 0.5(镜面反射默认值)以作为镜面反射输出。 即,BaseColor = Cavity×OldBaseColor,Specular = Cavity×0.5。

对于高级使用,这可用来控制折射率 (IOR)。我们发现对于 99% 的材质,这并非必要。以下是基于实测 IOR 的镜面反射值。

实测镜面反射值:

材质 镜面反射
玻璃 0.5
塑料 0.5
石英 0.570
0.224
0.255
牛奶 0.277
皮肤 0.35
实测材质示例

顶部:木炭、新鲜混凝土、老化沥青。底部:铜、铁、金、铝、银、镍、钛


材质混合模式

"不透明"(Opaque)
"遮罩"(Masked) : 遮罩没有镜面反射
"半透明"(Translucent)
"叠加型"(Additive)
"调制"(Modulate)


"调制"(Modulate)混合模式无非将材质的值与背景的像素相乘。这种行为与Photoshop中的正片叠底模式混合模式非常类似。


"叠加型"(Additive)混合模式无非获取材质的像素,并将其与背景的像素相加。这与Photoshop中的线性减淡(添加)混合模式非常相似。这表示不会进行暗化;因为所有像素值都添加到一起,因此黑色将直接渲染为透明。这种混合方式适合于各种特殊效果,例如火焰、蒸汽或全息图。

与"半透明"(Translucent)混合方式相同,这种混合方式不支持镜面反射(即,反射)。这种混合的叠加型性质可能意味着您不会以任何方式使用这种混合,但您可以使用上文中"半透明"(Translucent)小节中所示的"立方体贴图"方法来模拟类似于反射的效果。


使用半透明材质时,一个重要的注意事项是它们目前不支持镜面反射。这意味着您在表面上不会看到任何反射。但是,可使用立方体贴图 通过类似于以下的网络来模拟此类反射:


不透明遮罩(Opacity Mask) 类似于不透明度(Opacity),但仅在使用遮罩(Masked)混合模式时可用。与不透明度(Opacity)一样,它的值在0.0到1.0之间,但与不透明度(Opacity) 不同 的是,结果中看不到不同深浅的灰色。 在遮罩模式下时,材质要么完全可见,要么完全不可见。当你需要可以定义复杂实心表面(如铁丝网、链环围栏等等)的材质时,它将成为一种理想的解决方案。不透明部分仍将遵循光照。

你可以使用基础材质节点上的 不透明度遮罩剪切值(Opacity Mask Clip Value) 属性来控制剪切发生点。欲知更多详情,请参阅材质混合模式文档


不透明蒙板剪辑值(Opacity Mask Clip Value)
我们在之前已了解到 Masked BlendMode (蒙板混合模式)仅有完全不透明或完全透明的像素。您可以把灰度贴图或贴图中的单通道作为蒙板来使用。Clip Value (剪辑值)可以让您设置一个阀值,以控制像素何时为不透明或何时为透明。对于拥有细长部分的贴图,这些区域会随着mipmap将白色从图像或通道中去除而在一定距离内消失,您可以通过调整 Clip Value (剪辑值)来调整该现象发生的时间点。


材质界面操作
在材质预览界面,按住 L 键并拖动鼠标可以旋转光照方向


转自
材质表达式 是 UE4 中的构建块,用来创建功能完整的材质。每一个材质表达式都是独立的黑匣,它输出一个或多个特定值的集合,或者对一个或多个输入执行单一操作,然后输出该操作的结果。一个材质表达式节点包含以下5部分:

1、说明 - 所有材质表达式都具有公共的 说明(Desc)属性。在此属性中输入的文本将显示在材质编辑器中,它位于工作空间中表达式的正上方。它可用于任何用途,但通常是一种保留关于表达式用途或功能的简短备注的好方法。

2、标题栏 - 显示材质表达式名称或材质表达式属性的相关信息。

3、输入 - 这些链接用于接收材质表达式所要使用的值。

4、预览 - 显示材质表达式的输出值的预览。启用实时更新后,预览将自动更新。您可使用空格进行手动更新。

5、输出 - 这些链接用于输出材质表达式操作的结果。

某些材质表达式是参数,这意味着它们的值可在包含该参数的基本材质的材质实例中修改(在某些情况下,可在运行时进行动态修改)。您应通过 参数名称(Parameter Name)属性对这些表达式指定唯一的名称,以便在材质实例中识别特定参数时使用。如果类型相同的两个参数在同一材质中具有相同的名称,那么系统会假定它们是同一个参数。在材质实例中更改此参数的值时,将在材质中同时更改这两个参数表达式的值。在基本材质中,还将设置此参数的默认值。这将是此参数在材质实例中具有的值,除非它在该材质实例中被覆盖并修改。

材质表达式有很多类型,本次介绍 数学表达式。

Add(加)表达式接收两个输入,将其相加,然后输出结果。这个加法运算按通道执行,这意味着输入的 R 通道、G 通道和 B 通道等等将分别相加。两个输入必须具有相同数目的通道,除非其中之一是单个常量值。常量可以添加到具有任意数目输入的矢量。

232120ombnwnfbh99k1ww1

示例:对 0.2 和 0.4 执行 Add(加)的结果是 0.6;对 (0.2,-0.4,0.6) 和 (0.1,0.5,1.0) 执行 Add(加)的结果是 (0.3,0.1,1.6);对 (0.2,-0.4,0.6) 和 1.0 执行 Add(加)的结果是 (1.2,0.6,1.6)

用法示例:Add(加)通常用来使颜色变亮/变暗,或者使 UV 纹理坐标偏移。

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

示例:对 0.2 和 0.4 执行追加的结果是 (0.2,0.4);对 (0.2,0.4) 和 (1.6) 执行追加的结果是 (0.2,0.4,1.6)。

Subtract(减)节点接收两个输入,从第一个输入中减去第二个输入,然后输出它们的差。减法按通道进行,即,第一个输入的 R 通道将减去第二个输入的 R 通道,第一个输入的 G 通道将减去第二个输入的 G 通道,依此类推。除非第二个输入是单个常量值,否则两个输入必须具有相同数目的通道。常量可以从具有任意数目输入的矢量中减去。

示例:对 0.5 和 0.2 执行 Subtract(减)的结果是 0.3;对 (0.2,-0.4,0.6) 和 (0.1,0.1,1.0) 执行 Subtract(减)的结果是 (0.1,-0.5,-0.4);对 (0.2,0.4,1.0) 和 0.2 执行 Subtract(减)的结果是 (0.0,0.2,0.8)。

用法示例:Subtract(减)可用来使颜色变暗以及使 UV 偏移。

Multiply(乘)表达式接收两个输入,将其相乘,然后输出结果。类似于 Photoshop 的多层混合。乘法按通道进行,即,第一个输入的 R 通道将乘以第二个输入的 R 通道,第一个输入的 G 通道将乘以第二个输入的 G 通道,依此类推。除非其中一个值是单个浮点值,否则两个输入必须具有相同数目的值。

示例:对 0.4 和 0.5 执行 Multiply(乘)的结果是 0.2;对 (0.2,-0.4,0.6) 和 (0.0,2.0,1.0) 执行 Multiply(乘)的结果是 (0.0,-0.8,0.6);对 (0.2,-0.4,0.6) 和 0.5 执行 Multiply(乘)的结果是 (0.1,-0.2,0.3)。

用法示例:Multiply(乘)通常用来使颜色/纹理变亮或变暗。

Divide(除)表达式接收两个输入,并输出第一个输入除以第二个输入的结果。除法按通道进行,即,第一个输入的 R 通道将除以第二个输入的 R 通道,第一个输入的 G 通道将除以第二个输入的 G 通道,依此类推。除非除数是单个浮点值,否则两个输入必须具有相同数目的值。切勿以零作除数。

示例:当 A=(1.0,0.5,-0.4) 且 B=(2.0,2.0,4.0) 时,Divide(除)的输出为 (0.5,0.25,-0.1)。

OneMinus(一减)表达式接收一个输入值,并输出“一减去该值”。此运算按通道执行。

示例:对 0.4 执行 OneMinus(一减)的结果是 0.6;对 (0.2,0.5,1.0) 执行 OneMinus(一减)的结果是 (0.8,0.5,0.0);对 (0.0,-0.4,1.6) 执行 OneMinus(一减)的结果是 (1.0,1.4,-0.6)。

用法示例:当输入颜色在 [0,1] 范围内时,OneMinus(一减)的作用就是通常所谓的“反色”-- 即,OneMinus(一减)将返回互补色,这种颜色与输入相加将产生白色。

Min(最小值)表达式接收两个输入,然后输出其中的较小者。

Max(最大值)表达式接收两个输入,然后输出其中的较大者。

Ceil(加一取整)表达式接收值,使其 向上 舍入到下一个整数,并输出结果。示例:对 0.2 执行 Ceil(加一取整)的结果是 1.0;对 (0.2,1.6) 执行 Ceil(加一取整)的结果是 (1.0,2.0)。

Floor(减一取整)表达式接收值,使其 向下 舍入到上一个整数,并输出结果。

示例:对 0.2 执行 Floor(减一取整)的结果是 0.0;对 (0.2,1.6) 执行 Floor(减一取整)的结果是 (0.0,1.0)。

Frac(小数)表达式接收值,并输出这些值的小数部分。

示例:对 0.2 执行 Frac(小数)的结果是 0.2;对 (0.0,1.6) 执行 Frac(小数)的结果是 (0.0,0.6)。

FMod(浮点余数)表达式返回对两个输入执行除法运算的浮点余数。

示例:对 (10.9,3.9) 执行 FMod(浮点余数)的结果是 3.1。

Clamp(限制)表达式接收值,并将它们约束到由最小值和最大值定义的指定范围。

示例:在最小值为 0.0 且最大值为 1.0 的情况下对 0.3 进行限制将产生 0.3;在最小值为 0.0 且最大值为 1.0 的情况下对 1.3 进行限制将产生 1.0。

CrossProduct(矢量积)表达式计算两个三通道矢量值输入的矢量积,并输出所产生的三通道矢量值。给定空间中的两个矢量,矢量积是与两个输入都垂直的矢量。

示例:对 (0,1,0) 和 (0,0,1) 执行 CrossProduct(矢量积)结果是 (1,0,0)。

用法示例:CrossProduct(矢量积)通常用来计算与另外两个方向都垂直的方向。

DotProduct(标量积)表达式计算标量积,即一个矢量投射到另一个矢量上的长度。许多技术使用此计算来计算衰减。DotProduct(标量积)要求两个矢量输入具有相同数目的通道。

Abs(绝对值)是数学术语“绝对值(absolute value)”的缩写。Abs(绝对值)表达式输出其接收到的输入的绝对值(无符号值)。基本上,这意味着它通过删除减号将负数转换为正数,而正数和零将保持不变。

示例:-0.7 的 Abs(绝对值)为 0.7;-1.0 的 Abs(绝对值)为 1.0;1.0 的 Abs(绝对值)也是 1.0。

用法示例:Abs(绝对值)一般与 DotProduct(标量积) 配合使用。DotProduct(标量积)的结果是 -1..0..1,对 DotProduct(标量积)的结果执行 Abs(绝对值)的结果将是 1..0..1。

Sine(正弦)表达式反复输出 [0, 1] 范围内的正弦波值。最常见的情况是,通过将 Time(时间) 表达式连接至它的输入,输出连续的振荡波形。输出值将在 -1 与 1 之间来回循环。此表达式与 Cosine(余弦) 表达式输出之间的差别是,输出波形偏移半个周期。下图显示波的视觉表示:

用法示例:在任何需要振荡效果的场合,此表达式都非常有用。通过将时间输入(速度)或输出(振幅)倍增,可以轻松地动态控制振荡的速度和振幅。

Cosine(余弦)表达式反复输出 [0, 1] 范围内的余弦波值。最常见的情况是,通过将 Time(时间) 表达式连接至它的输入,输出连续的振荡波形。输出值将在 -1 与 1 之间来回循环。下图显示波的视觉表示:

If(如果)表达式对两个输入进行比较,然后根据比较结果传递另外三个输入值中的一个。所比较的两个输入必须都是单个浮点值。

在此示例中,If(如果)表达式接收高度贴图,并根据高度是低于还是高于值 0.2 来输出红色或绿色。

Power(幂)表达式接收两个输入,计算“底数”(Base)的“指数”(Exp)次幂,并输出结果;换而言之,“底数”(Base)自乘“指数”(Exp)次。

示例:底数为 0.5,指数为 2.0 时,Power(幂)的结果为 0.25。

用法示例:如果传递到 Power(幂)的颜色在 [0,1] 范围内,那么 Power(幂)可以用作对比度调整,即,仅保留较亮的值。

SquareRoot(平方根)表达式输出输入值的平方根。只能对单个浮点输入值执行运算。

Normalize(规范化)也称归一化,表达式计算并输出其输入的规范化值。这表示该输入的每个分量都会除以矢量的 L-2 范数(长度)。

ComponentMask(分量蒙版)表达式允许从输入中选择通道(R、G、B、A)的特定子集以传递到输出。尝试传递输入中不存在的通道将导致错误,除非输入是单个常量值。在这种情况下,会将单个值传递到每个通道。选择传递的当前通道将显示在表达式的标题栏中。

示例:如果 ComponentMask(分量蒙版)的输入为 (0.2,0.8,1.4) 并选中 R 和 B 通道,那么将输出 (0.2,1.4)。

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

示例:如果 LinearInterpolate(线性插值)的输入为 (1,0,0) 、(0,1,0) 、0.5,将输出 (0.5,0.5,0)。(1 * 0.5 + 0 * 0.5,0 * 0.5 + 1 * 0.5,0 * 0.5 + 0 * 0.5)

问题:
在UE4中的纹理编辑器中,点击视图菜单,能看到 R,G,B,A的颜色通道,单独打开其中的通道,能够显示图像的灰度值,。
以红色灰度图为例,0 代表没有任何红色信息,0 等价于黑色
数字1.0或者白色表示深红色。

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

推荐阅读更多精彩内容