目录
UE中的材质可简单的理解为一种应用到网格体上的、控制其外观的资源。本部分课程教学不会聚焦于如何制作精美真实的材料、以及如何搭建漂亮的场景等,其重点关注材质的使用及游戏性方面的内容。
1. 基本操作
在Content目录下创建Materials文件夹,在其中创建一个材质,命名为M_PBRDemo,PBR是Physical Based Rendering(基于物理的渲染)的缩写,顾名思义是利用物理规律来实现图形的渲染。双击进入编辑器,可以看见材质确实具有很多可设置的物理属性。从控制板拖动“Constant3Vector”连接到“基础颜色”引脚中,并选择任意颜色。保存材质,然后通过拖拽应用到场景中的任意一个几何体上:
随后,可以将界面布局设置如下,一边设置材质的各种属性一边查看对应的效果,这部分请大家自行探索尝试。
尝试几次后就会发现,每次我们调整参数后都需要点击应用或保存,并等待几秒后才能看到效果,这样无疑会降低我们调整材质的效率。因此我们右键任意一个属性节点,把它“转换为参数”。保存后在内容浏览器中右键点击材质,创建该材质的实例,命名为MI_PBRDemo_Inst并打开,然后就可以即时看到调整的结果。
此外,我们还可以利用数学计算来实现一些变化的效果。再次打开M_PBRDemo,添加“LinearInterpolate”节点,并设置AB引脚分别为红色和蓝色,然后设置为材质的基础颜色,会发现最终颜色是蓝色和红色混合得到的紫色。调整节点的Alpha值,会发现它控制了融合两者的比例。
添加Sine节点,即数学中的正弦函数,连接到Lerp的Alpha引脚,Sine的输入为Time节点。如是操作,我们便运用简单的数学公式创建了一个在红色和蓝色间变换的材质。但Alpha的有效值为0~1,sin的值域为-1~1,因此在Sine节点后加1乘0.5即可。我们在蓝图中创建数学运算的节点时,可以直接输入+ - 运算符。
我们还可以打开最上方的“实时节点”按钮,并点开节点的详细信息,以实时预览中间流程:
如果只需要实时预览一部分节点,可右键选择“开始预览节点”,这样这有在该节点之前的节点会被编译,如图15-6展示了从乘法节点开始预览的结果:
以上在编辑器中添加的所有节点都称为表达式,它们输出的都是某个具体数值。除表达式外还有一种类型叫函数,是一些可以复用的蓝图函数。它们一个直观的区别就是函数可以通过双击进入详细的蓝图程序,而表达式则不能。如下所示添加一个DebugScalarValue节点,并设置为基础颜色,在预览中将网格体切换为立方体,就可以看到材质上显示着正弦函数的数字:
2. 蓝图控制
进一步,我们希望将材质中的属性设置为参数,并利用蓝图来控制材质的样式。
拷贝M_PBRDemo的副本,为名字添加BP的后缀表示蓝图版本。打开蓝图版本的材质,将Time节点更换为Constant,并设置为参数,命名为GameTime,保存材质。
在Content目录下从Actor创建一个蓝图类,命名为SineWaveBP。打开SineWaveBP,创建静态网格体为根节点,并设置为正方体Cube(或任意网格体),然后为其添加刚创建的M_PBRDemoBP材质。然后我们就可以利用蓝图来设置GameTime这个变量:
只用材质或利用蓝图都可以实现上述效果,但两者的底层处理却不一样。根据课程讲述,如果只用材质,它们将会被编译为HLSL(High Level Shader Language),直接在GPU中运行;而采用蓝图控制则会通过CPU计算。通常来说,我们更希望把这些图形计算放到GPU中处理。