斯坦福UE4 + C++课程学习记录 15:材质入门

目录

1. 基本操作

2. 蓝图控制


        UE中的材质可简单的理解为一种应用到网格体上的、控制其外观的资源。本部分课程教学不会聚焦于如何制作精美真实的材料、以及如何搭建漂亮的场景等,其重点关注材质的使用及游戏性方面的内容。

1. 基本操作

        在Content目录下创建Materials文件夹,在其中创建一个材质,命名为M_PBRDemo,PBR是Physical Based Rendering(基于物理的渲染)的缩写,顾名思义是利用物理规律来实现图形的渲染。双击进入编辑器,可以看见材质确实具有很多可设置的物理属性。从控制板拖动“Constant3Vector”连接到“基础颜色”引脚中,并选择任意颜色。保存材质,然后通过拖拽应用到场景中的任意一个几何体上:

图15-1 应用材质

        随后,可以将界面布局设置如下,一边设置材质的各种属性一边查看对应的效果,这部分请大家自行探索尝试。

图15-2 更改属性并实时查看

        尝试几次后就会发现,每次我们调整参数后都需要点击应用或保存,并等待几秒后才能看到效果,这样无疑会降低我们调整材质的效率。因此我们右键任意一个属性节点,把它“转换为参数”。保存后在内容浏览器中右键点击材质,创建该材质的实例,命名为MI_PBRDemo_Inst并打开,然后就可以即时看到调整的结果。

图15-3 实时调整粗糙度

        此外,我们还可以利用数学计算来实现一些变化的效果。再次打开M_PBRDemo,添加“LinearInterpolate”节点,并设置AB引脚分别为红色和蓝色,然后设置为材质的基础颜色,会发现最终颜色是蓝色和红色混合得到的紫色。调整节点的Alpha值,会发现它控制了融合两者的比例。

        添加Sine节点,即数学中的正弦函数,连接到Lerp的Alpha引脚,Sine的输入为Time节点。如是操作,我们便运用简单的数学公式创建了一个在红色和蓝色间变换的材质。但Alpha的有效值为0~1,sin的值域为-1~1,因此在Sine节点后加1乘0.5即可。我们在蓝图中创建数学运算的节点时,可以直接输入+ - 运算符。

图15-4 材质颜色切换

        我们还可以打开最上方的“实时节点”按钮,并点开节点的详细信息,以实时预览中间流程:

图15-5 实时预览

        如果只需要实时预览一部分节点,可右键选择“开始预览节点”,这样这有在该节点之前的节点会被编译,如图15-6展示了从乘法节点开始预览的结果:

图15-6 从Multiply节点开始预览

        以上在编辑器中添加的所有节点都称为表达式,它们输出的都是某个具体数值。除表达式外还有一种类型叫函数,是一些可以复用的蓝图函数。它们一个直观的区别就是函数可以通过双击进入详细的蓝图程序,而表达式则不能。如下所示添加一个DebugScalarValue节点,并设置为基础颜色,在预览中将网格体切换为立方体,就可以看到材质上显示着正弦函数的数字:

图15-7 显示数字
图15-8 显示数字

2. 蓝图控制

        进一步,我们希望将材质中的属性设置为参数,并利用蓝图来控制材质的样式。

        拷贝M_PBRDemo的副本,为名字添加BP的后缀表示蓝图版本。打开蓝图版本的材质,将Time节点更换为Constant,并设置为参数,命名为GameTime,保存材质。

图15-9 转换参数

        在Content目录下从Actor创建一个蓝图类,命名为SineWaveBP。打开SineWaveBP,创建静态网格体为根节点,并设置为正方体Cube(或任意网格体),然后为其添加刚创建的M_PBRDemoBP材质。然后我们就可以利用蓝图来设置GameTime这个变量:

图15-10 设置GameTime
图15-11 运行效果

        只用材质或利用蓝图都可以实现上述效果,但两者的底层处理却不一样。根据课程讲述,如果只用材质,它们将会被编译为HLSL(High Level Shader Language),直接在GPU中运行;而采用蓝图控制则会通过CPU计算。通常来说,我们更希望把这些图形计算放到GPU中处理。

猜你喜欢

转载自blog.csdn.net/surkea/article/details/127248567