Skip to content

更换骨骼网格体(SkeletalMesh)

这个过程与更换静态网格体(StaticMesh)类似,但需要额外进行权重绘制和在虚幻引擎中进行一些额外的复制工作。

我们需要使用Blender和一个Blender PSK插件来导入从FModel/UModel导出的.psk文件。
Blender是免费的,可以在Blender官网Steam页面(Blender)下载。

插件链接:io_scene_psk_psa
(下载正确的版本,并按照该仓库readme中的说明进行操作)

注意:我仍在使用适用于Blender v3的旧版本,所以界面可能略有不同。

Blender

在这个例子中,我将更换《幽灵行者2》(Ghostrunner 2)中一个敌人的骨骼网格体(SK)。
首先在FModel中找到你的模型,然后将模型导出为.psk文件。

使用已安装的Blender .psk插件,将文件加载到Blender中,不要缩小比例

骨骼网格体将在骨架(Armature)对象内加载,如右上角所示。

准备新模型

我选择了这个简单的中世纪骑士模型用于SK替换。

缩放和旋转

将新模型加载到与原始SK相同的Blender项目中。
缩放和旋转新网格体,使其在比例和旋转方面尽可能接近原始网格体。

对齐

将新网格体尽可能地与原始网格体对齐。
这样可以确保动画播放正常,避免出现奇怪的骨骼变形。

如果你的网格体已经绑定了骨架(就像我使用的模型那样),只需切换到姿态模式(Pose mode)并移动骨骼以尽可能地接近对齐。

注意: 如果你的网格体没有绑定骨架,可以使用自动权重快速绑定它(可在YouTube上查找教程),使用Mixamo进行自动绑定,或在编辑模式下手动移动顶点。

应用骨架变更

如果你的模型已经绑定了骨架,并且你已经将模型与原始模型对齐,那么请确保将这些更改应用到骨架上。

这将把当前姿态设置为默认姿态。

解除父子关系

我们不再需要新网格体的骨架了。
选择网格体,右键点击,Parent -> Clear and Keep Transformation(父级 -> 清除并保持变换)。

一旦网格体与其骨架分离,删除该骨架(新网格体的骨架)。

删除顶点组

在我们将网格体与原始骨架建立父子关系之前,我们需要删除所有现有的骨骼,也称为顶点组。
这将防止在原始骨架中出现重叠和不相关的骨骼。

UV贴图名称

对于完全替换原始网格体的网格体交换来说,这一步是可选的,
但对于将新网格体合并到现有网格体中来说,这一步是至关重要的!

对于我正在使用的网格体,它有3个UV贴图 - 我们只需要一个与原始网格体UV贴图名称匹配的贴图。

导航到原始网格体,复制UV贴图的名称,通常是UV_SINGLE
回到新网格体的UV贴图,除了第一个之外全部删除,并将其命名为与原始UV贴图完全相同的名称。
在这个例子中,是UV_SINGLE

权重绘制

我们已经到了具有挑战性的部分,权重绘制。
如果你在Blender中没有权重绘制的经验,我强烈建议观看一些YouTube教程视频,因为这是一个相当大的主题,我不会在本指南中详细介绍。

重新建立父子关系

选择你的网格体,然后选择原始网格体的骨架,右键点击 -> Parent -> With Empty Groups(父级 -> 使用空组)。
网格体将被设为原始骨架对象的子对象,继承原始骨架对象的所有顶点组(骨骼)。

重要! 始终将网格体的骨架重命名为Armature!不要跳过这一步!!!
如果不这样做,导入到虚幻引擎时,骨架结构将被更改,创建与原始骨架结构不匹配的错误结构,这将破坏所有动画。

开始绘制!

这部分是最耗时的部分,因为你必须对网格体的每一个骨骼进行权重绘制,使其尽可能接近原始网格体的外观。

切换到权重绘制模式,通过逐一访问顶点组列表,开始为每个骨骼进行权重绘制。

提示:我总是打开另一个Blender窗口,其中显示原始模型在权重绘制模式下选择了相同骨骼。
这有助于获得目标权重绘制结果的比例和强度。

完成权重绘制后,你可以通过进入姿态模式并移动各个骨骼来检查结果,看看它们是否按预期变形/移动。

虚拟材质

创建虚拟材质的目的是防止游戏在运行时更改网格体材质,并确保我们的自定义模型在整个游戏会话中保持其原始材质。

注意:只有当你100%确定材质不会在运行时更改时,才可以跳过这部分。

使用FModel,我们可以看到原始网格体使用了3种材质。
所以创建3个新材质并将它们放在列表的顶部,使它们排在你的自定义模型材质之前。

每种材质需要至少分配一个面,否则它们在虚幻引擎中将被忽略。
要做到这一点,最简单的方法是放大到网格体内部,并多次挤出一条随机线。
然后选择第一个挤出的面,点击虚拟材质,然后点击Assign(分配)(对你拥有的每个虚拟材质重复此操作)。

重要注意事项

在使用Blender处理SK时,以下是一些需要考虑的重要注意事项:

  • 永远不要调整或移动原始骨架。
  • 始终将骨架对象命名为Armature
  • 尽可能地将新网格体与原始网格体对齐,以确保动画无缝衔接。
  • 材质名称无关紧要,重要的是它们在列表中的顺序。
  • 在导出前在姿态模式下测试你的权重绘制结果,以节省时间。

导出!

很好,你已经到达了导出部分,你已经完成了模组中最困难的部分!
在导出之前,再次检查材质是否正确,UV贴图是否正确,权重绘制是否有效,以及根对象是否命名为Armature

导出时,确保将比例缩小到0.01
以下是我的导出设置:

虚幻引擎

打开你的UE项目,创建与SK所在的原始文件夹相匹配的相同文件夹结构。
然后拖放导出的.fbx文件并点击"Import All"(导入全部)。

将骨骼网格体(角色模型)命名为与游戏文件中的命名相匹配(这很重要!)。

分配阴影物理(如果有)

某些游戏在角色中有ShadowPhyiscs(阴影物理),如果你的SK没有 - 跳过此步骤。

在模组中,ShadowPhysics与原始PhysicsAssets相同,所以只需复制它并将其命名为与游戏文件中的名称完全一致。
(你可以使用FModel打开SK资产并向下滚动一点来进行双重检查)

一旦PA被复制并命名为与SP匹配,双击骨骼网格体(SK),向下滚动并将SP拖入其插槽。

复制骨架和物理资产

当你将网格体导入UE时,它会自动生成必须与游戏文件匹配的骨架和物理资产。

使用FModel,我们可以看到所使用骨架的名称和位置。
重命名骨架以与之匹配,并将其移动到FModel中显示的相同文件夹(创建文件夹结构)。

在我的例子中,骨架名为SK_Enemy_Shinobi,位于/Visual/Character/Shinobi,所以我创建了相同的文件夹,命名了骨架,并将其移动到该文件夹。

**不要忘记:**对物理资产和阴影物理(如果有)执行相同操作。

材质

这部分在每个游戏和使用的SK中都会有所不同,所以很难涵盖所有情况。
关于创建材质 - 我不会详细介绍,因为YouTube上有很多教程。

在模组方面,有两个选择:普通材质和复制的材质实例 (以防"普通"材质不起作用)

普通材质意味着你创建一个空材质,拖放使用的纹理并将其连接到材质节点,如下所示,使用单个纹理作为基本颜色。
为了获得更高质量的材质,你还需要ORM(遮挡、粗糙度、金属度)和法线贴图。

注意: 如果普通材质不起作用,尝试设置与原始/基础材质相同的设置。

如果这仍然不起作用,那么你将不得不使用复制的材质实例。

打包和测试

完成所有工作后,再次检查你是否正确命名了资产,将骨架和PA放在正确的位置,完成了材质和纹理的处理。 你可以使用常见的命名约定命名材质和纹理,以便于阅读和维护(可选但推荐)。

打包并测试!

只打包新的SK以及使用的材质和纹理。
不要打包骨架、物理资产或阴影资产。

UE4 -> 使用UnrealPak(或chunks,如果你想要的话)。
UE5 -> chunk分配 (除非游戏没有IOStore)

有关如何打包模组的更多信息,请查看Cooking Content指南
(不要忘记在模组名称中添加_P

结果