fdk引擎模型mod教学系列(四)移植身体(二)
galaxy17
编辑于 2025年11月06日 18:25

注意:本文默认您已经看完并熟悉了教学(一)(二)所介绍的内容。在教学(三)中,我们讲了可以通过把多余的部件合并掉的方式转移角色的身体,但实际上还可以用glb/gltf直接编辑的方式,再加上添加物理效果,让这些部件正常的动起来而不是和父级部件焊死。

首先要声明的是,本文内容基本按照老外教学走,但我们会跳过其中修改待机动画这个部分,因为我觉得这个情况太极端了而且容易出问题不好讲。如果有需要,请自行阅读老外的原装教学。

————

在开始之前需要先进行一些解释,好让各位搞清楚这样做的意义是什么,减少产生我照着改了为什么好像没有用的疑问。

部件的动态是受四个东西影响的,一个是mi文件中定义的物理效果数值本身,引擎会用它来实现一些基本的小动态比如风吹之类的效果;一个是mi中这些物理效果使用的顶点组,必须要让模型中的骨骼权重组对应上合适的顶点组才能有合适的效果;一个是模型上的骨骼权重组,之所以需要额外的修改就是因为原模型缺少这些骨骼。换句话说,我们要做的就是除了移植模型之外,还要将新模型中有、原模型中缺少的骨骼,“接"上去,并找到一个相匹配的mi文件,将这些骨骼改名使之匹配该mi文件中的顶点组,再将mi中的物理效果“接”给原角色。至于第四个,就是动画文件,这个我们这次不会讲,但有一些效果是在其中定义的,这也就是为什么有时候做到了以上三点也还是没有动起来或者动态不够理想,这就是因为有些不是靠物理的动态在动画里,要额外修改

对于原游戏的模型互换,因为角色自己的mi文件里肯定有配套的物理,所以其中第二项也是听起来有点难理解的,根据所需动态对比顶点组名称选择适当的mi和改名的这个步骤可以直接无视,你想移植外面来的模型时才需要这一步。

弄懂了以上这些,我们就继续正文。

为了做动态效果的对比,我们继续用上次的5004和5000做例子。

用我准备的速成包会更方便一点点,如有需要可以下一个。

首先,参考教学(三)的部分找出5004中比5000多的骨骼。你也可以手动对比然后记下哪些东西需要被移植。由于科洛丝多的都是一些细节的东西,我在这里的选择是用整个科洛丝的裙子的骨骼替换艾斯蒂尔的,所以我就只记我需要这些骨骼及其父级。

用kuro_mdl_to_basic_gltf将这两个mdl都转换成gltf。

打开新的blender窗口,清空里面的东西,或者直接打开速成包中的empty.blend文件。

导入旧的身体,即chr5000.gltf,然后导入chr5004.gltf。

如有需要,缩放5004使其和5000匹配。不要忘记缩放之后按菜单的物体-应用-缩放。

展开科洛丝的模型,此时应该已经被重命名为Armature.001。

进入编辑模式。

选中上面这些骨骼之后用菜单,选择-选择相似-子级,选中全部子骨骼。注意不要用下面外面那个“子级”,用这个才能选中全部的。

然后点菜单的骨架-分离骨骼,可以看到多出来这么个玩意儿。

接下来用同样的方法,即点击艾斯蒂尔的Armature进入编辑模式,分离或者直接删除这些骨骼,因为我们得先把它们从艾斯蒂尔身上拿掉才能合并科洛丝的。

然后回到物体模式,选中科洛丝剪辑出来的骨骼,再选中艾斯蒂尔,按Ctrl+J合并。可以看到变成这样了:

点击Armature,切换到编辑模式。选中这些节点中最顶层的那些,按住Ctrl点击Hips(父级),然后按菜单的骨骼-父级-生成,弹窗选保留偏移量。

可以看到已经接好了,回到物体模式。

这里我也不知道他这么弄是什么用意,我后面会有自己寻思的其他步骤的解释,可以在这里先另存为一下。我们先接着讲老外的教学,人还是要相信师父的。

点击科洛丝的身体,再按住Ctrl点击艾斯蒂尔的身体,然后按Ctrl+J。

剩下的部分应该都不需要,点击world.001,右键删除层级,以免干扰导出。

导出glb。老外特别提醒要开切向,不知道什么用意,反正我就听他的了。

kuro_gltf_to_meshes转换此glb文件。

开一个blender新窗口,导入这些vb+ib,然后运用之前的教学中讲的方法去除不需要的网格。

这时候再运行导入,会发现程序会报错,因为缺材质。

需要用chr5004的material_info.json中的内容补充chr5000文件夹中的material_info.json对应缺失材质,具体有多少其实看刚才blender中科洛丝身体的材质就行。

然后导入就可以看到身体过来了。

————

可以看到,虽然有了骨骼,裙子还是穿模,这是因为我们还没有处理mi文件。如本文开头所说,有部分效果并不是靠物理完成的,所以处理mi文件并不一定保证能解决所有动态不“自然”的问题,还请注意。

用kuro_decode_bin_json分别处理艾斯蒂尔和科洛丝的模型同名的.mi文件,可以获得2个json。删除这两个mi文件。

然后需要编辑5000.json(不要改5004,5004只是用来参考的)。具体来说就是检查DynamicBone和DynamicBoneCollider,移除艾斯蒂尔原有的对应刚才移除的骨骼的物理,并用科洛丝的替代它们。

如果你用我的工具包里的material_info 修改辅助工具+mi 修改辅助工具中的merge_mi,就把5000拖到左边,5004拖到右边,然后点掉5000的,把5004的点上,按最下面的generate按钮就可以完成操作。

搞定之后,用kuro_encode_bin_json将其转换回mi文件。这里没有替换贴图,看起来有点奇怪,但应该能感受到裙子动态不一样了吧。

那么这期就到这里。

————

以下是我自己寻思的“优化”,可能反而会造成其他问题,请酌情观看。

回到合并前这一步,点击科洛丝身体,先进入编辑模式。然后点开材质栏,依次选中衣服和身体(还有个金属部分),点击弃选。

可以看到脸和五官维持选中,请确保只保留了脸和五官被选中。删除面。再选取并删除科洛丝的头饰。完成之后,回到物体模式,点击材质列表右边的小箭头,移除未使用材质。

点击艾斯蒂尔的身体,进入编辑模式。点进材质栏,这次是反过来的保持衣服和身体被选中,记得要取消头饰的选取。不用删除,回到物体模式。

点击科洛丝的身体,和艾斯蒂尔的身体合并。进入编辑模式,删除-面,删除艾斯蒂尔的身体。回到物体模式,清理材质。

把cloth01.001改成被删除的cloth01。metal因为确实要用到两个贴图,需要保留001这个。

完成之后,右键科洛丝余下的部分,删除层级。然后导出5004.glb。

接下来,先检查是否已经用kuro_mdl_export_meshes将chr5000拆成文件夹。然后右键,检查combine_gltf_with_origin_and_mdl中第18行的路径是否为游戏资源目录。然后将glb文件名 mdl文件名 pause在最后暂停 任意注释复制一个,重命名为5004 chr5000 pause.bat,然后双击运行(这里偷懒用了刚才的截图,实际应该不会报cloth01.001而是metal.001)

用material_info 修改辅助工具+mi 修改辅助工具中的index.html,左边拖入chr5000文件夹中的material_info.json,在其中编辑贴图,并将metal复制一个,取名为metal.001,不要改metal里的贴图,因为这个是艾斯蒂尔原来的发卡,改metal.001才是科洛丝移植过来的金属件,两个是分开的。

改完按右下的下载json,检查combine_gltf_with_origin_and_mdl中第15行的路径是否为下载默认文件夹,然后直接运行5004 chr5000 pause.bat,它将会自动依次完成:

将glb转换为meshes文件夹,删除原模型文件夹中的json以外的部分,并如果存在就用下载文件夹中的json替代material_info.json,将生成的mdl移动到游戏资源目录。

可以看到因为缩放偷懒了,脖子部分有点问题,但是如果这时候再编辑缩放,裙子的骨骼也要对应处理,所以说做mod得处处小心…但说实话缩放这里看得人眼花,而且好像也没什么好办法!

因为可能有人有把外部模型移植进来的需求,所以下次预计会再讲一次伊苏9移植空re,或者也可能偷懒不写了,直接去我的专栏看(也有对应的视频演示)。但是请注意,目前好像没办法解决移植进来的面部在动捕过场以及s技动画中会出现五官甚至脸部崩坏且会一直持续的问题,只能把面部表情焊死来忽视它。针对这方面的问题本人不会解答(应该说我也不会,我要是会了我就写出来了。)