材质是获得逼真外观的最重要方面之一,不管是对你的物体来说,还是对整个关卡来说。本文以一个很概括的视角介绍了如何快速创建材质的方法。
如果你对之前版本的UE材质非常熟悉,你可能会对《快速入门指南》感兴趣。该指南展示了一些你必须要知道的关键属性,这些属性是你在使用基于物理的材质系统必然会接触的东西。
材质表达式节点与网络
第一点,也是最关键的一点是,材质的构建不是通过普通意义上的代码,而是通过可视化的脚本节点(称为材质表达式)组成的逻辑网。这一过程,发生在一个名为材质编辑器的窗口内。每一个节点都包含了一小段HLSL代码,这些代码负责执行特定的任务。当你在构建材质的时候,你实际上是在通过可视化脚本“编写”HLSL代码。
上图的例子中,我们创建了一个非常简单的硬木板材质。但是,实际应用中的材质表达式网络肯定不会这么简单,包含了数十个表达式节点的材质比比皆是。
关于材质表达式的详细内容,你可以从这篇文档中获得:材质表达式引用。
操控颜色即是操控数字
如你所知,数字世界中的颜色通常被分为四个基本通道,分别是:
R - 红色
G - 绿色
B - 蓝色
A - 透明度
所有的图片,对每个像素来说,任何通道的值都能被表示成一个个数字。操作材质基本上就是把具体的情况转换成数学表达式去操作这些数字。
在UE4材质中,我们用浮点数来表示颜色。这和一些P图应用大不相同,这些P图应用使用的0到255的整数,而UE4使用的是0.0到1.0的浮点数。如果你“过载”(使数值超过1.0)了一个数值,那么你可能会得到一些特殊的效果。比如,材质的“自发光颜色(emissive)”项控制了材质发光的颜色和强度,当这个数值超过1.0时,发光太过会产生某种光晕的效果。
当你使用UE4创建材质的时候,请记住:许多表达式操作都是独立于颜色通道的。比如,加法操作是将两个输入值相加,但是它并不只能用于颜色通道的相加,任何相加的操作都可以用到这个加法操作。如果你输入的是两个RGB颜色(3通道向量值),那么输出的结果也是一个RGB颜色,它的值就是每个RGB颜色对应通道的数值和:
Red 1 + Red 2 = Red 3
Green 1 + Green 2 = Green 3
Blue 1 + Blue 2 = Blue 3
执行多通道操作的节点要求输入参数的通道数必须是一致的。比如你可以让两个RGB颜色相加,但不能用一个RGB颜色(3通道)加上一个RGBA颜色(4通道)。这会导致材质无法通过编译。但这个规则有一个例外,就是一个多通道的值可以和只有一个通道的值(我们通常称为标量值)相加,节点会把这个标量值加到多通道数值的所有通道上去。比如:
如果一个RGB值要加上一个标量1.0,那么结果就会是:
0.35 + 1.0 = 1.35
0.28 + 1.0 = 1.28
0.77 + 1.0 = 1.77
纹理
对材质来说,纹理就是一件提供像素数据的图片而已。这些数据可能是物体的颜色是什么,物体有多亮,物体的透明度是多少等等。过去,对应用纹理的认知是如何将颜色用到游戏模型上。但是,纹理是一个非常重要的东西,甚至可以这么认为,纹理是材质的一个组件,是组成材质的一个重要部分,而不仅仅是一张图片。
通常,材质可能会使用多张纹理图,这些纹理图存在的目的是不同的。比如说,材质通常会有一张基本颜色的纹理,一张高光纹理,一张法线贴图纹理。除此之外,还可能有自发光颜色和粗糙度纹理,甚至还会有alpha通道的纹理。
可以看到,虽然大家都是纹理图,但是里面包含的数据大不一样,这取决于这些纹理图是做什么用的。
纹理一旦创建并被导入到UE编辑器中,就会变成特殊的Material表达式节点(纹理取样(Texture Sample) 节点)。你可以从上面的示例中看到这种效果。这些节点是创建了一个纹理资产的引用,纹理资产本身并不包含在材质里,它还在内容浏览器中。与某些3D应用不同,UE4没有提供让材质包含纹理的方法。
更多纹理以及创建纹理的资料,欢迎访问纹理文档;
属性与输入
创建材质的大多数工作都是对材质属性进行设置,方法是创建材质表达式节点然后根据逻辑构建出计算网络,将最后计算出的结果赋值给材质的属性。除非你对UE材质系统已经了如指掌了,否则还是推荐你看一遍属性和输入值的相关文档。这两份文档你可以在下面的连接中找到:
材质属性
材质输入
应用材质到表面
应用材质的方式并非一成不变,它会随着表面的不同而不同。
网格
应用材质到网格(静态,动态或者骨骼的)的方法有很多种。最常用的方式是把材质拖到网格的材质属性槽中。当你在场景中选中网格时,你就可以在网格的细节面板中看到材质属性槽,然后把材质拖过去就行了。还有一种方法,你可以在内容浏览器中右击网格,从弹出菜单中选择“编辑”。你可以在很多的编辑器中发现属性槽的身影,比如静态网格编辑器,或者人物骨骼网格编辑器。
-
选中你想应用材质的网格。
-
在细节面板中,单击材质元素下拉箭头,然后你就能看到你项目中所有可用的材质,使用弹出菜单的搜索栏去搜索你要用的材质:
-
另一种方法,你可以在内容浏览器中选中需要的材质,点击向左的箭头,然后,你的材质就用上去了:
如果你想要一个材质成为网格的默认材质,那么就需要在网格的属性中设置材质。方法是在内容流览器中右击网格,选择属性,或是直接双击网格,在弹出的资产编辑器(不管是静态网格编辑器还是人物编辑器)中设置材质。
记住,如果你用资产编辑器或是在内容浏览器中改了材质,这种改变会影响资产本身。相对的,如果你是通过细节面板改变网格的材质,你所改变的只是场景中的这个网格副本,不会对网格本身造成什么影响。
刷表面
应用材质到一个刷表面的过程也很简单
-
首先从内容浏览器中选择一个材质
-
点击你想应用材质的那个刷表面
-
在细节面板上点击向左按钮,然后,材质就用到这个表面上了
原文链接:Essential Material Concepts
官方中文文档:基本材质概念