UE 编辑器自动化工具-4 批量生成材质

自动化实战:选中贴图,一键批量生成材质实例
UE 编辑器自动化实战:选中贴图,一键生成材质实例
前几篇我们介绍了 UE 编辑器工具和 Editor Utility Widget 的基础用法。这一篇继续做一个更贴近日常生产的工具:在内容浏览器中选中多套贴图后,自动生成对应的材质实例,并自动完成贴图赋值。
比如选中这些贴图:
T_Box_BT_Box_NT_Box_ORMT_TrafficPartses_BT_TrafficPartses_NT_TrafficPartses_ORM

工具执行后,会自动生成:
MI_BoxMI_TrafficPartses
并把对应的 B、N、ORM 贴图设置到材质实例参数中。

一、为什么要做这个工具?
在场景搭建、数字孪生、资产整理等项目中,材质实例创建非常频繁。如果每一套贴图都手动创建 材质实例、拖入 BaseColor、Normal、ORM,会有大量重复操作。
这个工具的目标就是把流程自动化:
选中贴图 → 识别命名 → 自动分组 → 创建 MI → 设置贴图参数 → 保存资产
它涉及到 UE 编辑器工具中几个比较核心的能力:
1.读取选中资产2.解析资产名称3.创建 UE 资产4.修改材质实例参数5.保存资产
【配图】 每一次都要创建材质、修改纹理

二、贴图命名规则
工具能自动识别贴图,前提是命名要有规律。这里假定贴图格式为:
T_Name_BT_Name_NT_Name_ORN
其中:
B → BaseColor / DiffuseN → NormalORM → AO、Roughness、Metallic 打包贴图
例如:
T_TrafficPartses_B → TrafficPartses 的 BaseColorT_TrafficPartses_N → TrafficPartses 的 NormalT_TrafficPartses_ORM → TrafficPartses 的 ORM
最终生成:
MI_TrafficPartses
实际项目中,不要求每一套贴图都完整。有些资产可能只有 B,有些只有 B 和 N,工具只需要对存在的贴图赋值,缺失的参数保持默认值即可。
【配图】T_TrafficPartses_B / N / ORM 根据 TrafficPartses 自动归为一组,并生成 MI_TrafficPartses。

三、准备母材质
生成材质实例之前,需要准备一个母材质,例如:
M_Master_Surface
母材质中提前暴露几个纹理参数:
BaseColorTexNormalTexORMTex
工具只负责把识别到的贴图设置进去:
T_xxx_B → BaseColorTexT_xxx_N → NormalTexT_xxx_ORM → ORMTex
至于 ORM 的通道连接,可以根据项目规范在母材质中处理。比如常见做法是 R 接 AO,G 接 Roughness,B 接 Metallic。
【配图】母材质节点截图。

四、脚本实现思路
这个工具可以拆成五步:
1. 获取选中资产里的纹理资产2. 识别纹理名称和类别,并存储到变量中3. 根据名称和父材质,生成材质实例资产4. 根据材质参数,传入对应纹理5. 保存资产并输出日志
1. 获取选中的纹理资产
工具执行时,先读取内容浏览器中选中的资产,然后逐个 Cast To Texture2D。只有转换成功的资产才进入后续流程,其他类型资产直接跳过。
【配图】

2. 识别名称和类别
接着根据贴图后缀判断类型:
_B → BaseColor_N → Normal_ORM → ORM
存储每个名称对应的贴图【配图】 贴图名称解析:从 T_TrafficParts_ORM 拆出 TrafficParts 和 ORM。
存储名称对应纹理

3. 生成材质实例资产
分组完成后,遍历每个 Name,根据父材质创建对应的材质实例。
工具面板中可以提供两个参数:
Parent Material:父材质Output Path:资产保存路径
例如:
Name = TrafficPartsParent Material = M_Master_SurfaceOutput Path = /Game/Materials/Generated生成资产 = MI_TrafficParts
这一步的重点是:根据名称拼出资产名,并在指定路径下创建新的 UE 资产。
【配图】 根据Parent Material、路径、名称生成的 MI_TrafficParts。

4. 传入纹理参数
材质实例创建后,再根据母材质中的纹理参数传入对应贴图。
B → BaseColorTexN → NormalTexORM → ORMTex
【配图】 修改的 MI_TrafficParts的纹理参数。

5. 保存资产并输出日志
最后保存生成的材质实例,并输出执行结果:
本次创建材质实例:3 个
后续也可以扩展输出跳过数量、缺失贴图数量等信息,方便检查批量处理结果。
【配图】保存资产

Output Log 输出日志,展示本次创建的材质实例数量。

生成效果:

五、工具面板可以怎么设计?
如果只是自己使用,一个按钮就够了。如果要给团队使用,可以在 Editor Utility Widget 中增加几个配置项:
父材质保存路径
这样工具不会被固定在某一个项目里。不同项目只要替换父材质和生成路径,就能继续复用。
【配图】放一张工具面板设计图:上方选择父材质和输出路径,下方是 Generate 按钮。

生成效果:

六、这个案例的价值
这个工具表面上是在解决“批量生成材质实例”的问题,但真正有价值的地方,是完整走了一遍 UE 编辑器中自动创建资产的流程。
在这个案例里,我们从内容浏览器从已有贴图,根据名称整理数据,再由脚本创建新的 MI_XXX 材质实例,并继续完成父材质设置、纹理参数赋值和资产保存。
也就是说,它串起了一条典型的编辑器资产处理链路:
读取已有资产解析资产信息组织创建数据生成新的 UE 资产修改新资产参数保存到内容浏览器
这条链路很重要。今天它可以用来生成材质实例,后续也可以扩展到批量创建材质、批量生成数据资产、批量配置贴图参数、批量整理资产命名等工具中。
所以,这个案例的重点不只是少拖几张贴图,而是理解 UE 编辑器工具如何真正参与资产生产流程。当脚本具备创建资产和修改资产的能力,编辑器工具就不再只是辅助按钮,而可以逐步变成团队内部的资产生产工具。
下一篇预告
下一篇我们继续讲编辑器工具的参数传入。
这次做一个更轻量的案例:编辑器脚本怎么动态传入参数

通过这个案例,学习编辑器工具如何在运行时接收输入参数,并根据参数修改选中的 Actor。
📩 后台私信回复:”编辑器工具4“
🎁 获取本次案例资产包
结尾:
大家平时在 UE 里最讨厌的重复劳动是什么?可以公众号留言私信或者添加微:qingdoushashou 告诉我,后续我抽一个写教程。
觉得好的话点个赞吧希望你能在这里学到点东西,每天进步一点点
扫描二维码关注账号:

以上内容在多平台同步发布:1.知乎:旺仔好喝-黄河2.公众号:UE5研究院3.ima知识库:虚幻引擎UE成长之路
夜雨聆风