找回密码
 立即注册
查看: 282|回复: 0

UE4官方材质课_基础篇(中)

[复制链接]
发表于 2022-9-19 15:35 | 显示全部楼层 |阅读模式

  • 本文为虚幻官方材质课的学习笔记,并不完全,在此按我的个人需求记录了如下笔记。这一篇是基础篇第二部分。我会将上篇和下篇的链接放在结尾!有需要的朋友可以自行跳转!
  • 我将此教程拆成三部分写了笔记,一共分为上,中,下三篇,这一篇是基础篇(中篇)
  • 这里是基础篇在B站的链接
  • 加油 ! 加油 !


<hr/>
二:创建PBR材质(基础)

主材质实例:


  • 实例化材质可以为我们的主材质创建副本,然后用来代替主材在项目中使用
  • 实例化材质的优点:
    1.节约时间,可以通过公开主材质的某些参数,进一步调整实例材质而无需重新编译着色器。
    2.对主材质进行的改动也会更新到所有的材质实例。
    3.仅需要根据材质特性创建主材质,然后实例化材质应用到所有的类似材质上。
公开材质参数:


  • 右键相应节点,convert to parameter并重命名



convertParam

switch:


  • Static Switch Parameter,静态开关参数
  • 使我们开启或禁用某些功能
    示例:当True的时候,开启base color与纯色相乘,为False时则关闭相乘,仅显示base color



swichPara

实例材质的优先级以及参数最大最小值:

当制作材质的时候,可以修改材质参数的优先级方便使用



groupandpior


我们可以通过修改Group和sort Piriority来实现

  • 只需要选中group中的“None”,将None改为我们需要的组名
  • sort Piriority为0的组会优先出现再我们的分组中,依次是1,2,3的组
  • 分组需要按需求比如tex,utility,uv之类的功能不同的节点可以分开设置,并自行定义优先级
示例: 此时所有的参数就被归档在我们定义好的组中。




groupPreview

可以给参数滑块设置最大最小值,使可以调节的范围不超过我们设定的值



minMax

动态材质:

材质一般在UE中分为两种:

  • 静态材质
  • 动态材质


  • 动态材质让我们在运行的时候实时调整

Actor:

  • Actor与普通的mesh相比,它可以附加蓝图
  • 我们需要在Event Graph中创建我们的功能
  • 创建dynamic material,并在source Material中指定材质源



bpshaderball


  • 之后再set texture parameter value ,使用我们指定的参数Diffuse
  • 再创建set scalar Parameter value, 控制Metallic
  • 最后需要set vector parameter value,设置Color



bpshaderball2


  • 因为我们或许希望color不会在创建出的时候即刻执行,我们希望用户再点击屏幕对象的时候改变这个参数,所以此时还需要“事件调度器(Event Dispatchers)”来完成它
  • 此时需要先创建变量,再set color



bpvriable



bpvriableType


  • 最后设置event Dispatchers,选择event。最后compile,此时编辑好了actor的材质。



bpeventDisp2

编辑level Blueprint:


  • 现在要做事情使编辑关卡的蓝图,使我们之前编辑的actor生效,效果达到:点击之前编辑的actor,并使它颜色发生改变
  • 进入level BP,创建get player controller,获取用户的动态,mouse cursor,click even看他是否对actor进行操作,然后再用事件调度器触发自定义事件



lbp_clickeven


  • 接着我们要判断用户是否点击到了正确的对象 ,然后再触发自定义事件,完成颜色替换的指令
  • get hit result under cursor for object,然后确认object type,使用make Array,确认我们希望用户能够点击哪类对象。



lbp_clickeven2


  • 接着left mouse button获取鼠标的动态,看右键是否点击到了正确的目标。
  • get class,class is child of,得到父类下正确的对象。如果结果是我们需要的对象,则返回True。
  • cast to ,通过这个引用我们可以访问之前用于改变颜色的自定义事件。
  • 最后获取change color even,获取到我们之前定义的事件,并且设置随机颜色。



lbp_clickeven3


  • compile,play。这样我们自定义的actor就会随着鼠标点击随机改变颜色。



lbp_clickeven4

材质参数集合,创建全局参数集(Parameter Collection):


  • 有时候因为场景变化的需求,比如下雨天材质整体变得湿润,或者受到风力影响而相关材质摇曳的程度增强,或者自发光强度因为场景变化需要整体变强。
  • 如果一个一个调整则很花费时间。此时就要用到材质参数集,达到批量修改整体参数的目的。
  • 我们可以右键在content中创建Meterial Parameter Collection,再分别创建自己需要的全局标量和向量。



mpc_setting


  • 在Master Mat中,建立collection parameter,选择之前创建的参数集,与需要修改的参数相乘。
  • 如有float4的参数出现,则需要使用component Mask转换成float3,以免出现数据类型的不匹配



mpc_setting2


  • 全局参数集相当于给所有设置全局变量的参数一个总控制,每个单独的材质也可以在自己的材质球下独立调节,但是总集控制所有材质的全局参数,如果在总集禁用,那么独立的材质的那个参数也会被禁用。
材质参数集合,第二部分:


  • 现在想要实现:允许用户点击后,更改其中的一个全局参数
  • 需要在level BluePrint里进行编辑,与Actor部分相似,前半部分判断鼠标点击以及获取用户行为的蓝图操作是一样的(在我的基础篇笔记上篇)
  • 之后,判断点击对象,确保在视窗内选中正确对象然后 create reference带入蓝图



mpc__bpsetting


  • 选择正确的目标进行判断,并设置好rendom vector。
  • compiled,此时play就会看见随着鼠标点击,全局对象也可以随机改变颜色了。
材质函数:


  • 材质函数就是材质图表中可以反复使用的自定义代码片段
  • 它的好处是可以把复杂的材质图表转化成拥有单个输入输出的单个材质节点
  • 更改代码中的函数,所有实例也会同步修改
此时的案例要实现的是uv tiling。


  • 在content中创建Material Function,点击进去。



m_func01


  • 如上图,我们首先设置uv 平铺,其次设置旋转,再判断使用不使用rotation
  • 编辑好后需要单击面板,开启左侧列表中的“Expose to Library”,才能确保我们后续能正常搜索到它。
  • 接下来回到我们需要使用tiling的材质



m_func01_tiling


  • 搜索我们之前创建的Function,并根据我们之前设置的变量来分别连接参数
  • 此时这个材质就有UV Tiling的选项。
数据迁移:



m_func_Migrate


  • 此方式能够将做好的材质函数迁移到其他文件使用
  • 当然也可以通过这种方式迁移别的需要的资产
另一种材质函数的方式:CustomNode





m_customNode



m_customN_name


  • 这种方式通过hlsl语言来创建材质函数,得到自制的材质节点
  • 设置的input name需要与code的名字匹配
  • 定义hlsl并不像内置的材质表达式,且无法被优化



m_customN

更多内容我会持续更新!
更多内容我会持续更新!
更多内容我会持续更新!
<hr/>这里是我写的材质大师课笔记上篇的链接:UE4官方材质课_基础篇(上) - 知乎 (zhihu.com)
这里是我写的材质大师课笔记下篇的链接:UE4官方材质课_基础篇(下) - 知乎 (zhihu.com)

<hr/>
本文使用 Zhihu On VSCode 创作并发布

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-2-22 19:01 , Processed in 0.090347 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表