前言
前阵子我用混元3D的图生3D功能给 XiaoMate桌宠 生成一个3D人物模型,但是留了一个大问题,人物模型的纹理都没有了。
今天在家折腾了半天,终于在Codex的协助下,把这个问题解决了。
前两天的原文:【XiaoMate】用自己的照片生成一个你自己的3D人物模型
https://mp.weixin.qq.com/s/zDCoFOIaghR5ZE0UNQSCdQ
这是今天再次用前两天的照片生成的那个模型,大家可以看看效果如何。

一、问题原因
根据Codex的分析,实际情况是这样的。
Mixamo 并没有删除贴图节点结构 ——材质(Material.001 )里的 Principled BSDF、Normal Map、Image Texture 节点都还在。真正的问题是:
- FBX 里的图片路径指向了一个 不存在的位置 :
g:\tests\female-test\textures\packed\texture_pbr_20250901(注意是textures\packed\,且 没有扩展名 ) - 图片 没有被打包 进 FBX(
packed=False)
所以 Blender 打开时找不到贴图文件,就显示为丢失/无贴图。
另外,你texture/ 文件夹里只有基础色贴图, 缺少法线贴图和金属粗糙度贴图 ——这两张其实内嵌在原始的original-from-3d-hunyuan.glb 里。
二、解决方案
- 从原始 GLB 提取全部三张贴图 到
texture/目录:texture_pbr_20250901.png(基础色/Base Color)texture_pbr_20250901_normal.png(法线/Normal)texture_pbr_20250901_metallic-texture_pbr_20250901_roughness.png(金属-粗糙度)
- 运行 fix_textures.py ,该脚本:
- 导入
Untitled-autorig-by-mixamo.fbx - 把失效的图片路径重新指向
texture/里的正确文件并reload() - 补充了金属粗糙度节点连接(按 glTF 规范:Green→Roughness,Blue→Metallic)
- 把所有图片
pack()进文件 - 用
embed_textures=True导出新 FBX
- 导入
- 结果 :生成 Untitled-autorig-by-mixamo-with-textures.fbx (77.88 MB,比原来的 59.9 MB 多了约 18 MB 贴图数据)。验证导入后基础色和法线贴图都是
packed=True、尺寸 4096×4096。
现在用 Blender 打开这个新文件就能看到贴图了。
三、补充说明
以后遇到 Mixamo 丢贴图的情况,通用做法是: 重新把图片路径指回你的贴图文件,然后在导出 FBX 时勾选 “Embed Textures” (或用 Blender 的path_mode='COPY', embed_textures=True ),这样贴图就会内嵌进 FBX,不会再丢。
四、完整流程说明
1. 完整流程
我来把整个流程封装成一个通用的命令行脚本,整个生成3D模型的步骤变成:
- 在混元3D中用照片生成3D模型(这个时候是带纹理的)。
- 在混元3D中将生成好的模型下载下来,下载的格式是GLB格式。
- 将下载下来的GLB导入到Blender,然后去掉Camera和 Light,再导出fbx。
- 将导出的fbx上传到mixamo做 autorig 。
- 将做好 autorig 的fbx模型下载来下。
- 用
fix_fbx_textures.py这个脚本来做基础色和法线贴图的修复。 - [可选] 将修复好的fbx导入到Blender中,再在Blender中将这个fbx导出为任意你想要的格式。
- [可选] 将你修复好的模型放到 XiaoMate 或者其他的应用进测试确认。
2. 配套脚本
blender --background --python fix_fbx_textures.py -- --glb hunyuan-3d-exported.glb --fbx mixamo-autorig.fbx
参数:
| 参数 | 说明 |
|---|---|
--glb | 在混元3D上生成并下载下来的、原始的、带贴图、没有绑定的 .glb(必填) |
--fbx | 在 Mixamo 上做好 autorig 后的 .fbx(必填) |
--output | 输出路径(默认 <fbx名>-with-textures.fbx) |
--tex-dir | 贴图提取目录(默认 <glb名>_textures) |
--keep-animations | 保留动画关键帧(默认不导出动画) |
fix_fbx_textures.py 的代码有点长(400多行),我就不贴在这里了,你可以直接到 XiaoMate 的仓库下载,地址是这个:
https://github.com/oddmeta/xiaomate-desktop/blob/main/models/fix_fbx_textures.py
3. 脚本自动完成的 5 步
- 从 GLB 提取内嵌贴图,并通过解析 glTF 材质定义识别每张图的 PBR 角色(baseColor / normal / metallicRoughness)
- 导入 Mixamo FBX
- 重链接贴图:优先按名称匹配(自动忽略
.001后缀、扩展名差异),失败时按 PBR 角色兜底;材质完全没有贴图节点时(Mixamo 有时会换掉材质)自动重建节点;FBX 导出常丢失的 Metallic-Roughness 也会自动补接(G→粗糙度,B→金属度) - 删除 Camera 和 Light
- 打包贴图并导出(
embed_textures=True,贴图内嵌进 FBX)
4. 实测结果
[提取] texture_pbr_20250901.png 角色: baseColor
[提取] texture_pbr_20250901_normal.png 角色: normal
[提取] ..._metallic-texture_...png 角色: metallicRoughness
[重链接] texture_pbr_20250901 / _normal ✔
[补接] Material.001 添加 Metallic-Roughness ✔
[删除] Camera, Light ✔
完成!输出文件已验证:只剩 Armature + 网格,贴图内嵌
一点说明:输出后 Roughness/Metallic 显示未连接是 FBX 格式本身的限制(它不支持 metallic-roughness 纹理通道),任何工具导出 FBX 都一样,和你之前手动修复验证过的结果一致。
五、下载安装 XiaoMate 桌宠并测试模型
1. Windows 用户:
- 🟢 绿色免安装版
https://github.com/oddmeta/xiaomate-desktop/releases/download/v2.1.8/xiaomate-v.2.1.8-portable-win64.zip
下载后解压缩,双击 start.bat 即可使用
- 📦 安装包版
https://github.com/oddmeta/xiaomate-desktop/releases/download/v2.1.8/xiaomate-v.2.1.8-setup-win64.zip
安装后可选开机自动启动
2. Mac/Linux 用户
请自行下载代码,编译安装使用。
感谢使用 XiaoMATE 小美同学! 🎉
如有问题或建议,欢迎在 GitHub Issues 反馈。
也欢迎你关注我的个人公众号:奥德元。