GIMI(Genshin-Impact-Model-Importer)原神自定义模型导入完全指南:从 3DMigoto 安装到模型替换实战

原创2026-10-03 10:11:391,603 阅读
文章标签:游戏开发开发工具3D渲染

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 及以上版本。

安装步骤:

  1. 下载并安装 Blender;
  2. 在 Blender 中依次进入 Edit -> Preferences -> Add-Ons -> Install,选择 blender_3dmigoto_gimi.py 文件安装;
  3. 安装成功后,插件列表中会出现 3DMigoto,同时 导入(Import)与导出(Export)菜单中会新增对应选项(如 "3DMigoto Frame Analysis Dump (vb.txt + ib.txt)" 导入项与 "Exports Genshin Mod Folder" 导出项)。

快速上手(TLDR):基础模型编辑流程

如果你不想通读全部文档,只想完成基础的模型编辑,官方 UsageInstructions.md 给出了 8 步精简流程(详细的分步演练可参考 Mona 帽子移除教程):

  1. 导入:在 Blender 中执行 File -> Import -> 3DMigoto Frame Analysis Dump (vb.txt + ib.txt)。
  2. 选择数据:从 GI-Model-Importer-Assets 仓库的 Data 文件夹中选择目标模型文件(所有模型至少包含 head,部分模型还有 body、dress 与 extra 组件)。保持所有选项为默认值,点击 Import。
  3. 编辑模型:在 Blender 中执行想要的修改,需遵守以下限制:
    • 顶点数限制约为 64k(V7 及以上版本提升至 400k);
    • 模型必须保留全部原始顶点组(vertex groups)、顶点颜色(colors)与自定义属性(custom properties)——若使用自定义模型,须确保与原模型匹配且顶点组无空缺;
    • 可以在 Blender 中连接贴图,但通常需先把 .dds 转换为 .png 才能被 Blender 识别,之后再转回 .dds。
  4. (可选)编辑角色贴图。
  5. 导出:确保场景中的对象命名为 CharHead、CharBody、CharDress、CharExtra(数量取决于原模型组件数),且每个名称在场景中只有一个对象。使用 Exports Genshin Mod Folder 选项导出,将对象保存为 Char.vb 到原角色文件夹。
  6. 部署:将生成的 CharMod 文件夹移动到安装步骤中创建的 Mods 目录。
  7. 加载:进入游戏按 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 的做法类似,操作简洁:

  1. 猎取绘制该模型的 IB(当模型消失时即说明找到了正确的那个);
  2. 创建类似上述的 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 说明执行过的命令。

使用帧转储的三个重要注意事项:

  1. 转储体积很大(可达数 GB),切勿在物体密集的区域(如城市)按 F8,否则很可能导致游戏崩溃,建议在角色菜单中进行;
  2. 转储期间游戏可能长时间停顿,时间从几秒到一分钟以上(取决于硬件);
  3. 项目在 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 远没有这么简单。官方文档明确指出了原神模型数据的四大难点:

  1. 属性分散在多个缓冲区:角色对象的属性被拆分到至少六个缓冲区——位置/面数据(position、normal、tangent)、混合数据(blendweight、blendindices)、贴图数据(color、texcoord)、绘制数据(每帧重算的当帧位置)、以及至少两个索引缓冲区(部分角色有三个,取决于模型复杂度)。
  2. hash 各自独立:多数缓冲区拥有不同的 hash,不是单个 hash 拆分成不同插槽。如果只覆盖一个 hash,除非同时正确覆盖所有相关缓冲区,否则模型会损坏。
  3. 转储头信息不可靠:3dmigoto 导出的头部包含全部顶点数据的信息,而非当前缓冲区实际包含的数据,导致编号/字节偏移与实际数据不匹配,必须直接从原始缓冲区重新计算真实数据。
  4. 引擎格式限制:原神使用更高的缓冲区插槽(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 解决)。

模型导出问题

导出前逐项检查:

  1. 对象命名为 ObjectHead / ObjectBody / ObjectDress / ObjectExtra,且每个名称唯一(数量与原模型组件数一致);
  2. 导出回原模型所在 ObjectData 文件夹(不是 Mod 文件夹),文件名为 Object.vb,且该文件夹内含 hash.json;
  3. 导出的组件数量与原模型一致;
  4. 场景中的对象不能完全为空(每个对象至少保留一个面,可缩小以隐藏);
  5. 所有对象都具备 3dmigoto 自定义属性(可通过合并插件导入的对象,或使用 自定义属性转移脚本);
  6. UV 贴图命名为 TEXCOORD.xy、TEXCOORD1.xy、TEXCOORD2.xy……直到原模型数量;
  7. 模型具有顶点颜色,且颜色组件名为 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 帽子移除教程(入门)、自定义武器修改指南(进阶)与 贴图修改教程、特效修改教程(专项方向)。最后再次提醒:务必只在私人服务器上使用这些工具。

登录后查看全文
GI-Model-Importer