【XiaoMate】用自己的照片生成一个你自己的3D人物模型-续集

前言

前阵子我用混元3D的图生3D功能给 XiaoMate桌宠 生成一个3D人物模型,但是留了一个大问题,人物模型的纹理都没有了。
今天在家折腾了半天,终于在Codex的协助下,把这个问题解决了。

前两天的原文:【XiaoMate】用自己的照片生成一个你自己的3D人物模型
https://mp.weixin.qq.com/s/zDCoFOIaghR5ZE0UNQSCdQ

这是今天再次用前两天的照片生成的那个模型,大家可以看看效果如何。

female-test

一、问题原因

根据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 里。

二、解决方案

  1. 从原始 GLB 提取全部三张贴图 到texture/ 目录:
    • texture_pbr_20250901.png (基础色/Base Color)
    • texture_pbr_20250901_normal.png (法线/Normal)
    • texture_pbr_20250901_metallic-texture_pbr_20250901_roughness.png (金属-粗糙度)
  2. 运行 fix_textures.py ,该脚本:
    • 导入Untitled-autorig-by-mixamo.fbx
    • 把失效的图片路径重新指向texture/ 里的正确文件并reload()
    • 补充了金属粗糙度节点连接(按 glTF 规范:Green→Roughness,Blue→Metallic)
    • 把所有图片pack() 进文件
    • 用embed_textures=True 导出新 FBX
  3. 结果 :生成 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 步

  1. 从 GLB 提取内嵌贴图,并通过解析 glTF 材质定义识别每张图的 PBR 角色(baseColor / normal / metallicRoughness)
  2. 导入 Mixamo FBX
  3. 重链接贴图:优先按名称匹配(自动忽略 .001 后缀、扩展名差异),失败时按 PBR 角色兜底;材质完全没有贴图节点时(Mixamo 有时会换掉材质)自动重建节点;FBX 导出常丢失的 Metallic-Roughness 也会自动补接(G→粗糙度,B→金属度)
  4. 删除 Camera 和 Light
  5. 打包贴图并导出(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 反馈。
也欢迎你关注我的个人公众号:奥德元。

Leave a comment

Your email address will not be published. Required fields are marked *