GIMI(Genshin-Impact-Model-Importer)原神自定义模型导入完全指南:从 3DMigoto 安装到模型替换实战
GIMI(Genshin-Impact-Model-Importer)原神自定义模型导入完全指南:从 3DMigoto 安装到模型替换实战
本指南基于 GI-Model-Importer(GIMI)官方 README 及其配套文档,系统讲解如何将自定义模型导入原神(Genshin Impact):从两款 3DMigoto 运行时的安装与注入验证,到 Blender 插件配置、缓冲区(Buffer)猎取、着色器/贴图覆盖、帧分析转储(Frame Analysis Dump)与顶点模型替换的完整链路。读完本文,你将掌握 GIMI 工具链的整体工作流程,能够独立完成"安装运行环境 → 提取游戏模型 → 在 Blender 中编辑 → 生成 Mod 并加载进游戏"的实战操作。
项目概览:GIMI 是什么
GIMI(Genshin-Impact-Model-Importer)是作者基于 3DMigoto 深度修改的一个分支版本,目的是让这一经典的 DirectX 图形注入/模型替换工具与原神兼容。原版 3DMigoto 由 DarkStarSword、bo3b、Chiri 等开发,GIMI 在其基础上针对原神的渲染管线做了适配,例如支持游戏特有的多缓冲区顶点数据布局、点列表拓扑(pointlist)等。
重要声明与使用边界(来自 README.md):
- 项目方强烈建议仅在私人服务器(private servers)上进行 Mod 修改;在官方服务器使用这些工具存在极高的封号风险,且项目方不赞成在官服使用,也不对由此产生的任何后果负责。
- 独立版(Standalone)GIMI 已弃用:官方推荐改用 XXMI loader,它会自动加载所需的文件与库。本仓库的指南和脚本虽然"过时",但其中包含的大量原理信息与可复用脚本仍有重要参考价值。
- 仓库内所有脚本均可自由使用或修改,但若在你的项目中使用这些程序,请注明出处。
配套的模型数据文件由独立的 GI-Model-Importer-Assets 仓库提供(字符的头部/身体/服饰等原始缓冲区数据)。使用前请确保插件、角色数据与程序均为最新版本——根据 Troubleshooting.md 的说明,绝大多数问题都源于使用了旧版工具。
安装 3DMigoto 运行时
1. 下载并解压两个发行版本
从仓库 releases 下载 3dmigoto 压缩包并解压。项目提供了两个版本,用途与取舍截然不同:
| 版本 | 定位 | 特点 |
|---|---|---|
3dmigoto-GIMI-for-development.zip |
开发版(制作 Mod 用) | 全部功能开启,包括屏幕顶部/底部的绿色文本调试信息,但运行更慢 |
3dmigoto-GIMI-for-playing-mods.zip |
游玩版(加载 Mod 用) | 关闭开发功能(无绿色文本),性能更快 |
注意:绿色文本是判断注入是否成功的核心标志,但它只在开发版出现。排查问题时务必确认自己用的是哪个版本。
2. 配置 d3dx.ini 的 target 路径(仅 V6 及以下)
V7 及以上版本会自动完成此步骤,可直接跳过。 对于 V6 及以下版本,需要根据你的原神安装位置修改 d3dx.ini 中的 target 行,使其指向游戏本体 GenshinImpact.exe(注意是游戏 exe,不是启动器 exe,游戏 exe 通常位于 "Genshin Impact Game" 文件夹内)。如果指向绝对路径不生效,可以尝试使用:
target = GenshinImpact.exe
3. 启动 Loader 并注入游戏
双击 3DMigoto Loader.exe 启动加载器,然后通过 GenshinImpact.exe 启动原神。若一切正常,3DMigoto 将被注入游戏进程:
- 使用开发版会看到绿色文本叠加层;
- 使用游玩版不显示绿色文本(属正常现象)。
常见误解:加载器有时会提示 "unable to verify if 3dmigoto was loaded"(无法验证是否加载成功)。这不代表注入失败——只要游戏中出现绿色文本且 Mod 正常显示,就说明一切正常,此时可以直接关闭命令行窗口(长期留着反而可能造成电脑变慢)。
4. 验证与加载 Mod
安装完成后,即可加载自定义资源并覆盖贴图与着色器。将 Mod 放入 Mods 文件夹(同一时间每个角色只能对应一个 Mod 文件夹),在游戏中按 F10 重新加载。
安装 3DMigoto Blender 插件
要修改游戏模型,还需要配置 Blender 环境。仓库提供了经过适配的插件文件 blender_3dmigoto_gimi.py,要求 Blender 2.80 及以上版本。
安装步骤:
- 下载并安装 Blender;
- 在 Blender 中依次进入
Edit -> Preferences -> Add-Ons -> Install,选择blender_3dmigoto_gimi.py文件安装; - 安装成功后,插件列表中会出现 3DMigoto,同时 导入(Import)与导出(Export)菜单中会新增对应选项(如 "3DMigoto Frame Analysis Dump (vb.txt + ib.txt)" 导入项与 "Exports Genshin Mod Folder" 导出项)。
快速上手(TLDR):基础模型编辑流程
如果你不想通读全部文档,只想完成基础的模型编辑,官方 UsageInstructions.md 给出了 8 步精简流程(详细的分步演练可参考 Mona 帽子移除教程):
- 导入:在 Blender 中执行
File -> Import -> 3DMigoto Frame Analysis Dump (vb.txt + ib.txt)。 - 选择数据:从 GI-Model-Importer-Assets 仓库的 Data 文件夹中选择目标模型文件(所有模型至少包含 head,部分模型还有 body、dress 与 extra 组件)。保持所有选项为默认值,点击 Import。
- 编辑模型:在 Blender 中执行想要的修改,需遵守以下限制:
- 顶点数限制约为 64k(V7 及以上版本提升至 400k);
- 模型必须保留全部原始顶点组(vertex groups)、顶点颜色(colors)与自定义属性(custom properties)——若使用自定义模型,须确保与原模型匹配且顶点组无空缺;
- 可以在 Blender 中连接贴图,但通常需先把
.dds转换为.png才能被 Blender 识别,之后再转回.dds。
- (可选)编辑角色贴图。
- 导出:确保场景中的对象命名为
CharHead、CharBody、CharDress、CharExtra(数量取决于原模型组件数),且每个名称在场景中只有一个对象。使用 Exports Genshin Mod Folder 选项导出,将对象保存为Char.vb到原角色文件夹。 - 部署:将生成的
CharMod文件夹移动到安装步骤中创建的 Mods 目录。 - 加载:进入游戏按 F10 加载 Mod。
注意:每个角色在 Mods 目录中同一时间只能有一个对应文件夹;要加载新模型,必须先移除旧的。
猎取缓冲区与着色器(Hunting for Buffers)
要精确定位"哪块缓冲区负责绘制模型的哪个部分",需要使用 3DMigoto 的猎取模式(Hunting Mode)。按小键盘 0 切换猎取模式开关(开发版默认有绿色文本叠加层)。
开启猎取模式后,可以循环浏览游戏当前用于绘制物体的各类缓冲区与着色器;被选中的缓冲区/着色器的绘制调用(draw call)会被跳过,从而直观地看到它负责绘制屏幕的哪一部分。按小键盘 + 可将所有当前选中项重置归零——在搜索或重载之间养成复位的习惯,避免混淆。
官方建议在**角色菜单(character menu)**中进行猎取,否则场景中的物体数量会迅速变得难以管理。
各缓冲区/着色器对应的按键映射如下:
| 资源类型 | 循环切换按键 | 复制 hash 按键 | 作用说明 |
|---|---|---|---|
| Vertex Buffer(VB) | / 与 * |
-(小键盘) |
存储物体的顶点信息 |
| Index Buffer(IB) | 7 与 8 |
9 |
存储顶点如何连接成模型的信息 |
| Vertex Shader(VS) | 4 与 5 |
6 |
决定顶点/面如何投影到屏幕 |
| Pixel Shader(PS) | 1 与 2 |
3 |
决定贴图与颜色如何应用到物体 |
移除缓冲区与着色器
找到需要跳过的缓冲区或着色器后,可以写一个 .ini 文件放在 Mods 文件夹中(文件名任意),让 3DMigoto 永久跳过该对象的绘制调用。
VB/IB 跳过配置:
[TextureOverrideX]
hash = Y
handling = skip
VS/PS 跳过配置:
[ShaderOverrideX]
hash = Y
handling = skip
其中 X 是任意自定义名称,Y 是猎取时找到的 hash(注意:虽然这些是缓冲区而非贴图,但命名约定把两者都称为"texture")。
注意:某些对象可能关联多个缓冲区或着色器——若放置上述配置后模型仍有残留部分(如阴影、反射、描边),需要再次循环浏览缓冲区与着色器,找出其他负责绘制该部分的资源。
替换贴图
贴图替换与 SpecialK 的做法类似,操作简洁:
- 猎取绘制该模型的 IB(当模型消失时即说明找到了正确的那个);
- 创建类似上述的 TextureOverride 段,但改为替换贴图:
[TextureOverrideX]
hash = Y
ps-t0 = ResourceDiffuse
ps-t1 = ResourceLightMap
[ResourceDiffuse]
filename = TextureDiffuseMap.dds
[ResourceLightMap]
filename = TextureLightMap.dds
这里不使用 handling=skip,因为我们希望游戏正常执行绘制调用;同时需要创建 resource 对象把新贴图加载进内存。部分对象没有对应的 lightmap;部分对象(如角色)在单个缓冲区上挂载多张贴图(详见下一节)。
多索引对象与帧分析转储(Frame Analysis Dump)
问题背景:有时多个对象绘制在同一个缓冲区上。典型例子是角色模型——头部与身体是独立对象,却共用同一个 VB/IB,因此直接跳过该缓冲区会连整个角色的绘制调用一起跳过;替换缓冲区内容时也只会替换其中一个对象。
此时猎取菜单已无能为力,需要深入 draw call 层面:
- 按 F8 触发帧分析转储(frame analysis dump),将绘制单帧相关的所有缓冲区转储到
FrameAnalysis-timestamp文件夹,并生成log.txt说明执行过的命令。
使用帧转储的三个重要注意事项:
- 转储体积很大(可达数 GB),切勿在物体密集的区域(如城市)按 F8,否则很可能导致游戏崩溃,建议在角色菜单中进行;
- 转储期间游戏可能长时间停顿,时间从几秒到一分钟以上(取决于硬件);
- 项目在
d3dx.ini中已开启 txt 与 buf 两种转储格式及若干附加选项(默认的.ini关闭了帧分析)。
拿到帧转储后,可以搜索目标 IB 对应的 hash,得到若干 -ib 的 .txt 文件,从中查看某个对象在缓冲区中索引的开始与结束位置,然后对单个对象指定覆盖:
[TextureOverrideX]
hash = Y
match_first_index = Z
handling = skip
其中 Z 是你要匹配的对象在缓冲区中的起始索引。
顶点模型的删除与修改:深入 Genshin 的缓冲区结构
移除/修改网格顶点的一般思路是:从帧转储中提取角色模型 → 找到绘制角色的 VB/IB hash → 用 3DMigoto 插件把对应缓冲区导入 Blender → 编辑后导出覆盖。标准覆盖写法为:
[TextureOverrideX]
hash = Y
vb0 = ResourceVB
ib = ResourceIB
handling = skip
drawindexed = auto
[ResourceVB]
type = Buffer
stride = 40
filename = File.vb
[ResourceIB]
type = Buffer
format = DXGI_FORMAT_R16_UINT
filename = File.ib
其中 stride 表示单个顶点全部数据的字节大小(在转储文件头中列出),format 是单个索引值的尺寸。handling = skip 跳过游戏自身的绘制调用,drawindexed = auto 则根据 ib 文件与缓冲区描述自动计算要绘制的部分,把新的 VB/IB 资源交给着色器计算位置并应用贴图。
但 Genshin 远没有这么简单。官方文档明确指出了原神模型数据的四大难点:
- 属性分散在多个缓冲区:角色对象的属性被拆分到至少六个缓冲区——位置/面数据(position、normal、tangent)、混合数据(blendweight、blendindices)、贴图数据(color、texcoord)、绘制数据(每帧重算的当帧位置)、以及至少两个索引缓冲区(部分角色有三个,取决于模型复杂度)。
- hash 各自独立:多数缓冲区拥有不同的 hash,不是单个 hash 拆分成不同插槽。如果只覆盖一个 hash,除非同时正确覆盖所有相关缓冲区,否则模型会损坏。
- 转储头信息不可靠:3dmigoto 导出的头部包含全部顶点数据的信息,而非当前缓冲区实际包含的数据,导致编号/字节偏移与实际数据不匹配,必须直接从原始缓冲区重新计算真实数据。
- 引擎格式限制:原神使用更高的缓冲区插槽(VB1+)与点列表拓扑(pointlist),3DMigoto 均不支持,需要转换回其支持的格式;并且从 3DMigoto 导出的格式无法直接回灌游戏,必须反向拆分。
解决方案:项目提供了两个核心 Python 脚本(位于 Tools 目录)来自动化上述繁琐过程:
- genshin_3dmigoto_collect.py:对帧转储执行"收集"操作。只需给出主绘制 VB,脚本会自动查找相关缓冲区文件并正确组织/格式化,输出 3DMigoto Blender 插件可识别的格式。其核心流程(见源码
main())分三步:先通过根 VS 收集点列表候选(pointlist,含未摆姿势的模型与混合数据),再收集与 VB hash 相关的所有 draw id,最后收集 IB、texcoord VB 与漫反射/光照贴图。 - genshin_3dmigoto_generate.py:对 Blender 的 3DMigoto 导出执行"生成"操作,将其拆分回正确的缓冲区文件,并生成加载所需的
.ini。
collect 脚本的关键参数与缓冲区布局
collect 脚本的完整参数(来自 genshin_3dmigoto_collect.py):
| 参数 | 说明 |
|---|---|
-vb |
角色绘制时使用的主 VB;给 hash 加 X 前缀则只转储贴图而不含模型数据(如用于面部) |
-n/--name |
角色名,用于文件夹与输出文件的命名 |
-c/--component_names |
自定义组件名;不指定时默认为数字编号 |
-f/--framedump |
帧转储文件夹名;不指定时自动使用最近的一个 |
-vs |
角色模型的根 VS,默认 653c63ba4a73ca8b |
--force/--force_draw |
强制解析器从指定 draw id 收集 |
--force_object |
强制从指定根对象收集 |
--remove_sanity |
关闭健全性检查(用于排查问题) |
--has_blend / --no_blend |
强制收集/跳过混合数据 |
--has_normalmap |
模型在常规贴图之外还包含法线贴图 |
脚本内部按固定布局解析各缓冲区(见 genshin_3dmigoto_collect.py):
- 位置缓冲区:POSITION(
R32G32B32_FLOAT,12 字节)+ NORMAL(R32G32B32_FLOAT,12 字节)+ TANGENT(R32G32B32A32_FLOAT,16 字节),合计 stride 40; - 混合缓冲区:BLENDWEIGHT(
R32G32B32A32_FLOAT,16 字节)+ BLENDINDICES(R32G32B32A32_SINT,16 字节),合计 stride 32,仅当找到对应 pointlist 时存在; - 贴图缓冲区:COLOR(
R8G8B8A8_UNORM,4 字节)+ TEXCOORD(R32G32_FLOAT,8 字节)+ 可选的 TEXCOORD1(R32G32_FLOAT,8 字节),合计 stride 为 12 或 20。
脚本通过比对各缓冲区的顶点数来匹配正确的 pointlist,出现歧义时(候选多于一个)会提示用户手动选择。输出时还会为每个组件按 "Head / Body / Dress / Extra" 及扩展编号(Extra2、Extra3……)分类命名,并将全部 hash 信息写入 hash.json 供 generate 脚本使用。
generate 脚本的工作原理
genshin_3dmigoto_generate.py 运行于 collect 生成的字符文件夹上,主要参数为 -n/--name(角色名)、--hashfile(hash 信息文件,默认 hash.json)与实验性的 --original_tangents(用原始身体数据修正切线)。
其内部逻辑(见源码 main())为:
- 有混合数据的组件(角色、复杂武器):把 Blender 导出的
.vb按缓冲区类型拆分,合并身体各部分后写入Position.buf(stride 40)、Blend.buf(stride 32)、Texcoord.buf(stride 为原始 stride 减 72); - 无混合数据的组件(简单武器、物体):无需拆分,写入单一
.buf(stride 为原始 stride); - 纯贴图组件(面部、翅膀等):仅生成贴图覆盖(此时不写 VB/IB 覆盖);
- 最后动态拼接
.ini文件,包含 Overrides(各TextureOverride/ShaderOverride段)与 Resources(各Resource段)两大区块,并额外生成VertexLimitRaise段用于提升顶点限制。
一个值得注意的细节:在 collect_vb 中,脚本默认会用法线替换"切线"(ignore_tangent=True)——作者发现游戏使用的"切线"与常规切线大不相同,反而与法线更接近,直接用 Blender 计算的切线效果更差。此外,IB 数据会被重新打包为 DXGI_FORMAT_R32_UINT 格式,并通过 collect_ib 的偏移修正保证多个对象共用一个 IB 缓冲区时索引正确。
局部模型覆盖(Localized Model Overrides)
该功能仍在开发中(详见 UsageInstructions 与配套视频讲解),要点如下:
- 来自其他模型的新几何体/网格不会有正确的权重或顶点组;
- 操作流程:导入模型,将其放置到目标位置附近/重叠处,然后转移顶点组与顶点颜色给它,并确保其具有贴图 UV 值;
- 最适合的场景是:移除部分网格后修补小洞,或用其他部件替换局部(如鞋 → 脚);
- 若补丁模型同样来自游戏且与目标同体型(或由游戏模型派生),效果最佳;也可使用其他来源的模型,但可能需要调整格式;
- 较大的空洞或对象无法正确转移顶点权重(Blender 无法插值),此时只能手动处理,或从其他游戏模型找一个已具备正确顶点组的对象。
完整模型覆盖(Complete Model Overrides)
同样仍在开发中,作者自述尚未完全可靠,需自行承担风险。官方总结的实践经验:
- 基本思路:让新模型与原模型尽可能重叠,然后转移顶点组、权重、颜色与自定义属性;
- 模型复杂度(顶点/边数)与外形需与原模型大致相当,否则转移效果不佳;即使非常相似也可能出问题;
- 与原模型差异过大的模型无法处理(无法合理分配 blend indices 与顶点;若放弃动画效果则仍有可能);
- 复杂的头发结构是噩梦——原神几乎所有角色都是简单发型的原因就在于此。除非 Blender 水平极高,否则建议把全部头发分配到 head 顶点组,放弃波浪发丝动画(或保留原发型);
- 必须确保模型中所有顶点都有权重/被分配到某个组,且分组正确。权重转移常把手、手臂组错误转移到身体附近区域(若能用 T-pose 模型会更好,但作者尚未确定如何从常量缓冲区加载姿态信息)。手指同样是问题高发区;
- 模型只使用 2 张 UV 贴图(一张头部、一张身体);部分角色使用第三张(如裙子),但那只是身体贴图的重复副本,能否修改仍待测试;
- 如果模型加载后面朝下,可能需要相对原模型旋转(原因未明,MMD 模型常见此现象)。
常见问题排查指南
结合 Troubleshooting.md,以下是高频问题速查。
安装问题
- 确认
d3dx.ini中指向的是游戏 exe 而非启动器 exe(V7 及以上可跳过); - 绿色文本不显示:确认使用的是开发版(游玩版无绿色文本);
- 确保 GIMI 加载器与原神均以管理员身份运行;
- 游戏加载后 loader 控制台窗口关闭属正常行为;
- "无法验证 3dmigoto 是否加载成功"不代表注入失败;
- 3DMigoto 可与其他原神 Mod 工具共存:先运行 3dmigoto loader,再运行其他程序;
- 偶尔即使配置正确也会注入失败,重新尝试注入即可解决。
模型导入问题
- 确保从 ModelData 文件夹(含 vb 与 ib 的
.txt文件)而非 Mod 文件夹加载数据(目前不支持加载 Mod 文件夹的文件); - 出现特定报错时多为插件过旧(旧插件仅支持 Blender 2.80–2.92);
- 其他错误几乎都源于模型本身,最常见的是 4D 法线——collect 脚本误把某个组件当作法线导出(可用
--force指定正确的 draw id 解决)。
模型导出问题
导出前逐项检查:
- 对象命名为
ObjectHead / ObjectBody / ObjectDress / ObjectExtra,且每个名称唯一(数量与原模型组件数一致); - 导出回原模型所在 ObjectData 文件夹(不是 Mod 文件夹),文件名为
Object.vb,且该文件夹内含hash.json; - 导出的组件数量与原模型一致;
- 场景中的对象不能完全为空(每个对象至少保留一个面,可缩小以隐藏);
- 所有对象都具备 3dmigoto 自定义属性(可通过合并插件导入的对象,或使用 自定义属性转移脚本);
- UV 贴图命名为
TEXCOORD.xy、TEXCOORD1.xy、TEXCOORD2.xy……直到原模型数量; - 模型具有顶点颜色,且颜色组件名为
COLOR。
排查时打开 Blender 控制台窗口可看到更详细的错误信息。常见错误及原因:
- 未导出回 ObjectData 文件夹 / 未命名为
Object.vb; - 组件名称重复(如场景中出现两个
HuTaoBody)——删除或重命名至唯一; COLOR组件缺失或命名错误;- 模型顶点超过 64k——移除部分或使用 Decimate 减面;
- 某对象完全为空——至少保留一个面以便 UV 正常导出。
游戏内模型问题
- Mod 完全不加载:确认 3dmigoto 在运行、Mod 放在正确目录、游戏中已按 F10;最后手段是清空
ShaderCache与ShaderFixes文件夹。 - 部分未被绘制:顶点限制问题。带 blend weights/顶点组的物体需要提升 3dmigoto dll 中的顶点上限才能正常绘制(generate 脚本生成的
VertexLimitRaise段即为此设计);作者已为大多数角色提升,仍有少数遗漏。 - 大量 Mod 冲突警告:游戏试图把多个文件加载到同一 hash——通常是同一角色同时存在两个 Mod;旧版工具还有一个 bug 会多处覆盖共享的面部组件。移除重复 Mod 文件夹;若确认已移除仍告警,可在警告提及的
.ini中删除或注释掉相应行。 - 加载报错(Error):与警告不同,报错通常意味着加载失败。常见原因:① 名称错误(
.ini中的名称与文件夹内文件不匹配,如扩展名不同);② 贴图格式错误(参考原模型格式,通常为 dds,宽高须为 2 的幂且为整数比例,如 1024×1024、2048×2048、1024×2048);③ 新模型未绘制/转移顶点组,而原模型有顶点组。 - 方向错误:导入的 3dmigoto 模型与替换模型使用不同坐标系,即使 Blender 中看起来对齐也需旋转/平移。最常见做法:将角色模型旋转 90 度使其面朝上,然后全选并应用全部变换(Apply All Transforms)。
- 模型严重损坏(FUBAR):大概率是顶点组问题。新旧模型的顶点组编号、顺序、位置必须匹配——确认所有顶点组齐全、顺序正确(如
4 6 7 8 5应为4 5 6 7 8)、无空缺(如4 7 8 9应为4 5 6 7 8 9)。 - 模型轻度损坏:仍是顶点组问题——除上述检查外,确认该区域新模型的权重与原模型匹配。
- 贴图错误:常见原因:① UV 未命名为
TEXCOORD.xy;② 法线方向反转;③ObjectTexcoord.buf损坏或错误;④ 忘记替换贴图,仍在加载原模型旧贴图。 - 贴图过亮/发光:多半是贴图没有 alpha 通道。确保贴图文件顶层有透明层(顶层控制发光并导致过亮,底层用于绘制模型颜色与图案)。
- 描边过粗/颜色异常:顶点
COLOR值错误。三种修复方式:① 从原模型描边正常的部分复制 COLOR 数据;② 用 genshin_set_outlines.py 调整描边粗细;③ 移除描边。 - 其他怪象(正常使用不易遇到):
.ini中 stride 错误、IB 与 VB 不匹配、在 VB 而非 IB 上做覆盖。
辅助脚本工具集
仓库 Tools 目录还包含大量即插即用的辅助脚本,可与核心流程配合使用:
| 脚本 | 用途 |
|---|---|
| genshin_set_outlines.py | 调整模型描边粗细。放入 Mod 文件夹后运行 python genshin_set_outlines.py --thickness t,t 取值 0–255(0 无描边,255 最粗;多数游戏模型在 80–130 之间,具体需自行试验)。原理是直接改写 CharTexcoord.buf 中每个顶点 COLOR 的 alpha 字节(源码见 main()) |
| genshin_set_transparency.py | 设置模型透明度 |
| genshin_set_color.py | 修改模型顶点颜色 |
| genshin_merge_mods.py | 合并多个 Mod |
| genshin_auto_damage_merge.py | 自动合并破损/受损模型部件 |
| genshin_animation_creator.py | 创建动画相关数据 |
| genshin_swap_global_cn | 在被审查角色(Mona、Jean、Amber、Rosaria)的国际服/国服(CN)服饰模型间互相转换。运行 genshin_swap_global_cn.py(或 exe),会遍历当前目录及子目录,依据 remap.json 与 all_hash_data.json 识别 Mod 对应角色,改写 .ini 中全部 buffer/贴图 hash、match_first_index 并重映射 Blend.buf 中的顶点组索引(每次运行来回切换一次) |
| blender_3dmigoto_gimi.py | 适配原神的 3DMigoto Blender 插件本体 |
| blender_custom_property_transfer_script.txt | 在 Blender 中转移 3dmigoto 自定义属性(用于保证新模型可正常导出) |
| blender_remove_unused_vertex_groups_script.txt | 批量删除未被任何顶点使用的空顶点组(源码先统计每个顶点组的实际使用权重,再反向删除) |
| blender_fill_vg_gaps.txt | 填补顶点组编号空缺 |
| blender_merge_vg.txt / blender_vg_remap.txt | 合并/重映射顶点组 |
| blender_bone_deletion_script.txt | 删除骨骼 |
总结
GIMI 的完整工作链路可以概括为一条流水线:安装 3DMigoto 运行时(开发版用于制作、游玩版用于体验)→ 配置 d3dx.ini → 用 Blender 插件导入帧转储 → 猎取/替换缓冲区与着色器 → 用 collect 脚本整理模型数据 → 在 Blender 中编辑并导出 → 用 generate 脚本拆分回缓冲格式并生成 .ini → 放入 Mods 文件夹按 F10 加载。
与原版 3DMigoto 相比,原神的特殊性(至少六个缓冲区拆分属性、独立 hash、不可靠的转储头、VB1+ 插槽与 pointlist 拓扑)让手动操作几乎不可行,因此 collect/generate 两个 Python 脚本是整套工具链的自动化核心。本文涉及的进一步实战演练可继续阅读 Mona 帽子移除教程(入门)、自定义武器修改指南(进阶)与 贴图修改教程、特效修改教程(专项方向)。最后再次提醒:务必只在私人服务器上使用这些工具。