一、基本操作
- 材质(
Materials
) 定义了场景中对象的表面属性。从广义上来讲,可以将材质理解为涂在网格体上用来控制其视觉外观的"涂料"。
- 更具体地说,材质能准确地告诉引擎某个表面应该如何与场景中的光源交互。材质定义了表面的各种特性,包括颜色、反射率、粗糙度、透明度等。
参考链接:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/essential-unreal-engine-material-concepts?application_version=5.2
- PBR是
Physical Based Rendering
(基于物理的渲染),意味着表面接近光线在真实世界的表现方式,而不是我们直观以为的应有方式。 相较于完全依赖美术师直觉来设置参数的着色工作流程,遵守PBR原则的材质更准确,并且通常看起来更自然。
参考链接:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/physically-based-materials-in-unreal-engine?application_version=5.2
- 一个小技巧:每次我们调整参数后都需要点击应用或保存,并等待几秒后才能看到效果,这样会降低我们调整材质的效率。因此我们右键任意一个属性节点,把它“转换为参数”。保存后在内容浏览器中右键点击材质,创建该材质实例,命名为
MI_PBRDemo_Inst
并打开,然后就可以即时看到调整的结果。 - 此外,还可以利用数学计算来实现一些变化的效果。
(1)添加“LinearInterpolate
”(线性插值)节点,并设置AB引脚分别为红色和蓝色,然后设置为材质的基础颜色,会发现最终颜色是蓝色和红色混合得到的紫色。调整节点的Alpha
值,会发现它控制了融合两者的比例。
(2)添加Sine
节点,即数学中的正弦函数,连接到Lerp
的Alpha
引脚,Sine
的输入为Time
节点。如是操作,我们便运用简单的数学公式创建了一个在红色和蓝色间变换的材质。但Alpha的有效值为0到1,sin的值域为-1到1,因此在Sine节点后加1乘0.5即可。我们在蓝图中创建数学运算的节点时,可以直接输入+ - 运算符。 - 还可以打开最上方的“实时节点”按钮,并点开节点的详细信息,以实时预览中间流程
- 以上在编辑器中添加的所有节点都称为表达式,它们输出的都是某个具体数值。除表达式外还有一种类型叫函数,是一些可以复用的蓝图函数。
- 添加一个
DebugScalarValue
节点,并设置为基础颜色,在预览中将网格体切换为立方体,就可以看到材质上显示着正弦函数的数字
二、蓝图控制
- 进一步,希望将材质中的属性设置为参数,并利用蓝图来控制材质的样式。拷贝M_PBRDemo的副本,为名字添加BP的后缀表示蓝图版本。打开蓝图版本的材质,将
Time
节点更换为Constant
,并设置为参数,命名为GameTime
,保存材质。
- 在
Content
目录下从Actor创建一个蓝图类,命名为SineWaveBP
。打开SineWaveBP,创建静态网格体为根节点,并设置为正方体Cube(或任意网格体),然后为其添加刚创建的M_PBRDemoBP
材质。然后就可以利用蓝图来设置GameTime
这个变量:
- 注意: 只用材质或利用蓝图都可以实现上述效果,但两者的底层处理却不一样。如果只用材质,它们将会被编译为
HLSL(High Level Shader Language)
,直接在GPU
中运行;而采用蓝图控制则会通过CPU
计算。通常来说,我们更希望把这些图形计算放到GPU
中处理。