复制材质实例

复制材质实例

复制材质实例(Material Instance,简称 MI)适用于游戏不接受自定义普通材质,或 Mod 作者希望保留原有材质效果并调整参数的情况。本文介绍查找基础材质、复制参数和创建新实例的方法。

来源:Dmgvol / UE_Modding 原文。

什么时候使用材质实例

有些游戏(例如 High On Life)不接受普通材质,需要寻找参数与目标网格匹配的现有 MI。其他用途包括:保留全息材质的故障或平移效果,同时替换其中的图像和文字;或者保留角色材质实例中的描边等特殊效果,同时使用自己的纹理。

查找基础材质

在 FModel 中找到并打开需要复制的 MI,其类型应为 MaterialInstanceConstant。查看并点击 Parent 材质;如果父级仍是另一个 MI,就继续沿继承链查找,直到找到类型为 Material 的基础材质。

查看材质实例的父级

沿继承链找到基础材质

在 UE 项目的内容浏览器中创建与 FModel 一致的文件夹结构,新建材质并将其命名为与基础材质相同的名称。原文示例使用 M_Master_Computer_Display。

创建同名基础材质

复制材质参数

在新建的基础材质中,添加需要使用的参数。本例只需要一个纹理参数,也可以根据原始基础材质添加数值、颜色或其他纹理参数。确保每个参数都连接到 Material 节点;连接方式不必具有实际意义,但需要连接。

原始 MI 中本例要使用的参数名为 Base_TEX:打开新材质,创建与 FModel 中名称完全一致的参数,并连接到 Material 节点。

创建并连接同名参数

创建并使用实例

右键新基础材质,选择创建 Material Instance,并将它移动到目标 MI 所在的文件夹。

从材质创建实例

将实例放入目标文件夹

接着右键该 MI,再从它创建另一个 MI。把新实例移到 Mod 文件夹并自行命名,然后打开它,勾选要覆盖的参数,设置纹理、颜色或数值。完成后,可以将该实例分配给静态网格或骨骼网格。

从 MI 再创建一个实例

设置实例的参数覆盖值

含静态参数的实例示例

某些 MI 即使复制了基础材质,仍无法显示自定义纹理。对于这种情况,原文建议直接针对同类型 MI 创建实例,而不是沿上述继承链回溯到基础材质;普通自定义材质和复制出的基础材质均无效时,可能遇到这种情况。

原文以 UE4.27 游戏《Alone in the Dark》中的角色为例:

  1. 在 FModel 中查看骨骼网格使用的默认材质实例,选择参数最接近需求的 MI,例如包含 BaseColor、ORM 或 Normal 贴图的实例。
  2. 示例选择帽子使用的 MI_Fleece_GraceHat。在 UE 编辑器中,按 FModel 中相同的路径创建一个同名材质。
  3. 在该普通材质中创建所需参数,保留原名 MI_Fleece_GraceHat。不要将这个材质打包进 Mod。
  4. 从该材质创建 MI,并在实例参数中应用自己的纹理。

为现有 MI 创建同名材质

如果替换的是 MI,就把新实例命名并放在目标 MI 的位置;如果替换的是骨骼网格,可以自行命名,但要记得打包该实例。

在新 MI 中应用纹理