一个专注音视频领域问答的小圈子

学习 UE4 虚幻引擎的一些练习。

基础概念

使用 UE 创建材质后,默认状态如下图所示,这里面有很多参数设置来决定材质的类型和用途。

创建材质默认状态

右侧是材质连接节点,左侧是材质的相关属性,选择不同的材质着色模型,右侧的连接节点会随之发生变化。

在 UE 文档中,右侧的连接节点称为主材质节点,也是最终的输出节点,负责显示出最后的结果。

主材质节点对外提供了很多输入节点,如图中所示,显示白色的输入表示该输入将影响材质,而显示灰色的输入表示它们对材质没有影响。默认情况下,主材质节点会有一些以灰色显示的输入。

可以将其他节点的输出连接到主材质显示灰色的输入节点上,但是并不会产生任何效果。要有效果的话,需要在左侧的细节面板中调节相关参数才行。

关于主材质节点的更多内容参考这里:

https://docs.unrealengine.com/4.26/zh-CN/RenderingAndGraphics/Materials/HowTo/Main_Material_Node/

主材质节点其实对应了 UE 底层的着色模型,比如默认的着色模型就是 默认光照,也是就 PBR 的 ShadingModel 。材质输入参数中的基础颜色、高光度、粗糙度、Metallic 就是 PBR 实现中 BRDF 相关的参数设置。

另外一些参数设置,比如世界场景位置偏移,就是 UE 在底层实现渲染时提供的额外输入参数了,掌握这些参数可以更好地实现效果。这就类似于 Shadertoy 网站上写着色器效果,这个网站在每个 Shader 中都提供了默认输入,比如鼠标位置、时间等,开发者在着色器中直接用就好了。

UE 中提供了多种着色模型,除了默认光照之外,还有如下:

着色模型

关于着色模型更多内容参考这里:

https://docs.unrealengine.com/4.27/zh-CN/RenderingAndGraphics/Materials/MaterialProperties/LightingModels/

接下来会尝试创建一个简单的材质:

材质创建

快捷键使用

想要更快的创建材质,很重要的技巧就是使用快捷键。

使用快捷键的一般操作都是先在键盘按住对应的字母,然后使用鼠标在蓝图中点击要放置的位置。

常量创建:

数字键 1、2、3、4 分别对应 1、2、3、4 维的常量,如下图所示:

运算操作:

快捷键 A、M、D 分别对应于加法、乘法、除法,如下图所示:

纹理操作:

快捷键 T、U 分别对应于贴图节点、UV 坐标节点,如下图所示:

除此之外,还有其他不少快捷键,就不一一列举了。

基础材质

如下所示,创建了一个简单的红砖材质,贴上了颜色、高光、粗糙度、法线、AO 等贴图。

并且把用到的纹理贴图都参数化了,同时增加了一个对 UV 的调整,可以改变 UV 采样的范围。

这是一个很简单的材质,在着色模型不变的情况下,改变的是最终连接到主材质输入节点前的结果,很多的工作都是在输入节点前做的,这也是能积累大量经验的地方,需要不断地打怪升级,目前就做个简单示例。

材质函数

在 UE 蓝图中还提供材质函数,类似于编程语言中的函数封装,可以将一些通用计算放到材质函数中去。

比如上图示例中将 UV 坐标乘以常数的操作就可以放到材质函数中去,如下图所示:

不是所有类型的参数都可以作为材质函数的输入,仅有如下的几种类型:

点击鼠标右键然后搜索 FunctionInputFunctionOutput 可以添加输入和输出节点,添加输入节点后去修改输入的类型就可以接收不同参数了,而输出节点没有修改参数类型的地方,由最终计算得到具体类型。

除了自己创建的材质函数之外,UE 还自带了不少材质函数可以使用。

具体链接可以参考这里:

https://docs.unrealengine.com/4.26/zh-CN/RenderingAndGraphics/Materials/Functions/Reference/

这些材质函数涉及到数学运算、纹理操作、图像调整、粒子效果等多个方面。

材质参数集合

材质参数集合类似于全局变量,它是一个用来存储任何标量参数和矢量参数集合的资源。可以在多个蓝图中引入相同的材质参数集合,这样一旦修改材质参数集合中的变量,所有的材质实例都会起作用。而创建单独的材质实例,修改参数后只能在该材质实例上起作用,无法改变其他材质实例。

创建材质参数集合如下所示:

创建了多个参数,但是在使用时一次只能使用一个,因为只有一个输出节点:

在材质参数集合的细节面板中要选择当前用到的参数具体是哪个,否则是识别不到参数的。

最后在关卡中,直接对材质参数集合中的变量进行修改就可以实现改变材质的结果了,不需要在材质实例中修改。

材质分层

得益于材质函数的功能,可以将材质函数作为一个完整的材质层,这时候材质函数的输出不再是计算后的单一节点了,而是完整的材质属性列表。

通过 MakeMaterialAttributes 节点创建一个材质属性列表,这列表里面包括了颜色、高光、粗糙度等各种属性,基本上和主材质节点中的属性一样了,如下所示:

可以直接把创建的材质中的节点全部复制过来,让这个材质函数自身闭环作为一个材质层,然后通过 BreakMaterialAttributes 节点再把这些属性拆分,一个一个的赋值给主材质节点。

这里只用到了一层材质,如果有多个材质函数构造的材质层,每层都有相同的属性,这时候就需要对这些属性进行混合操作,在 UE 中提供了很多 MatLayerBlend_xxxx 类似的函数进行各种混合操作。

除了混合之外,还可以对材质层做选择操作,在一定条件下选择相应的材质层。

以上就是关于材质的基本操作总结,还有很多精细的操作后续慢慢摸索了。

渲染管线

最后,完成材质创建并且赋给了对应的模型后,可以通过 profilegpu 命令查看当前的渲染管线。

关于渲染管线的更多内容,后续再慢慢学习 UE 的源码了!!!

知识星球

一个专注音视频领域问答的小圈子

公众号音视频开发进阶对应的知识星球,一个编程开发领域的专业圈子,贩卖知识和技巧!

※ 入群须知:了解该星球能提供的价值和帮助,在提问时务必阐述好背景,附带相关的信息。

iOS 用户可以加我微信 ezglumes 邀请你进星球,有疑问也可以加我微信咨询。

※ 星球内容:

基础教程:

在知识星球连载的干货教程,可以在专栏中找到,随着时间的推移,教程也会越来越多:

- 音视频基础概念
- WebRTC 入门教程及源码实践
- 播放器教程及源码实践
- OpenGL 和特效开发教程
- Vulkan 入门教程

部分内容可以在博客 https://glumes.com 中检索到,后面会在星球里持续更新.

干货分享:

涵盖了移动开发和音视频工程领域的绝大部分,从项目实战角度出发,提升能力,包括但不限于以下领域:

- Android/iOS 移动开发
- Camera 开发
- 短视频编辑 SDK 项目实践
- 在线直播和推流
- WebRTC 开发
- 播放器基础和提高
- OpenGL 图像渲染及特效开发
- C++ 基础和提高
- FFmpeg 使用和分析
- 干货资源和书籍分享

不止于技术方面的,各种 IT 新闻、茶余饭后、生活趣事也欢迎大家分享!!!

技术答疑解惑:

针对上述基础教程和干货分享的答疑,另外还有音视频和 IT 开发中的各种交流讨论。

- 基础知识点答疑
- 工业项目实践答疑
- 问题排查思路分析

一个 BUG 排查很久,不如来星球里提个问题,效率提升百倍。

求职和面试辅导:

一站式职场服务,每份工作都值得用心对待!!!

- 面试题和面试经验分享
- 简历修改和模拟面试
- 大厂内推和信息同步
- 职场经验分享
- 职业规划和发展分析

※ 星主和合伙人介绍

星主是公众号音视频开发进阶的作者,也是网站 https://glumes.com 的作者,曾参与过抖音、剪映等头部音视频 APP 底层 SDK 的开发。

合伙人也是在头条、快手从事音视频架构师的职位,具有多年的音视频开发经验,能力圈覆盖了音视频的绝大多数领域,资深音视频从业人员为你保驾护航。

微信公众号

扫描下面的二维码关注我的微信公众号《音视频开发进阶》,推送更多精彩内容!

添加我的微信 ezglumes 拉你入音视频与图形图像技术群一起交流学习~

wechat-account-qrcode

原创文章,转载请注明来源:    UE4 材质练习系列基础