斯坦福UE4 C++课学习补充 15:材质入门

一、基本操作

  1. 材质Materials) 定义了场景中对象的表面属性。从广义上来讲,可以将材质理解为涂在网格体上用来控制其视觉外观的"涂料"。
  • 更具体地说,材质能准确地告诉引擎某个表面应该如何与场景中的光源交互。材质定义了表面的各种特性,包括颜色、反射率、粗糙度、透明度等。

参考链接:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/essential-unreal-engine-material-concepts?application_version=5.2

  1. PBR是Physical Based Rendering(基于物理的渲染),意味着表面接近光线在真实世界的表现方式,而不是我们直观以为的应有方式。 相较于完全依赖美术师直觉来设置参数的着色工作流程,遵守PBR原则的材质更准确,并且通常看起来更自然。

参考链接:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/physically-based-materials-in-unreal-engine?application_version=5.2

  1. 一个小技巧:每次我们调整参数后都需要点击应用或保存,并等待几秒后才能看到效果,这样会降低我们调整材质的效率。因此我们右键任意一个属性节点,把它“转换为参数”。保存后在内容浏览器中右键点击材质,创建该材质实例,命名为MI_PBRDemo_Inst并打开,然后就可以即时看到调整的结果。
  2. 此外,还可以利用数学计算来实现一些变化的效果。
    (1)添加“LinearInterpolate”(线性插值)节点,并设置AB引脚分别为红色和蓝色,然后设置为材质的基础颜色,会发现最终颜色是蓝色和红色混合得到的紫色。调整节点的Alpha值,会发现它控制了融合两者的比例。
    (2)添加Sine节点,即数学中的正弦函数,连接到LerpAlpha引脚,Sine的输入为Time节点。如是操作,我们便运用简单的数学公式创建了一个在红色和蓝色间变换的材质。但Alpha的有效值为0到1,sin的值域为-1到1,因此在Sine节点后加1乘0.5即可。我们在蓝图中创建数学运算的节点时,可以直接输入+ - 运算符。
  3. 还可以打开最上方的“实时节点”按钮,并点开节点的详细信息,以实时预览中间流程
  4. 以上在编辑器中添加的所有节点都称为表达式,它们输出的都是某个具体数值。除表达式外还有一种类型叫函数,是一些可以复用的蓝图函数。
  5. 添加一个DebugScalarValue节点,并设置为基础颜色,在预览中将网格体切换为立方体,就可以看到材质上显示着正弦函数的数字

二、蓝图控制

  1. 进一步,希望将材质中的属性设置为参数,并利用蓝图来控制材质的样式。拷贝M_PBRDemo的副本,为名字添加BP的后缀表示蓝图版本。打开蓝图版本的材质,将Time节点更换为Constant,并设置为参数,命名为GameTime,保存材质。
    在这里插入图片描述
  2. Content目录下从Actor创建一个蓝图类,命名为SineWaveBP。打开SineWaveBP,创建静态网格体为根节点,并设置为正方体Cube(或任意网格体),然后为其添加刚创建的M_PBRDemoBP材质。然后就可以利用蓝图来设置GameTime这个变量:
    在这里插入图片描述
  3. 注意: 只用材质或利用蓝图都可以实现上述效果,但两者的底层处理却不一样。如果只用材质,它们将会被编译为HLSL(High Level Shader Language),直接在GPU中运行;而采用蓝图控制则会通过CPU计算。通常来说,我们更希望把这些图形计算放到GPU中处理。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值