You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Assimp获取FBX纹理文件时路径无效的解决咨询

解决Mixamo FBX纹理路径在Windows下无法读取的问题

问题原因

Mixamo导出的FBX文件中,纹理路径是其服务器生成环境下的绝对路径(如../../../../home/app/mixamo-mini/tmp/skins_XXX.fbm/Mutant_Diffuse.png),并非适配本地环境的相对路径,因此在Windows系统中无法匹配到真实的纹理文件位置。

解决方案

1. 手动整理纹理文件位置

  • 下载Mixamo资源时,完整资源包通常会包含与FBX关联的.fbm文件夹,其中存放对应纹理图片。若未自动获取,需重新下载完整资源包确保纹理文件齐全。
  • 将.fbm文件夹放置在与FBX文件同一目录下,或统一存放到项目预设的纹理目录(如项目根目录下的Textures文件夹)。

2. 提取纹理文件名并拼接本地路径

忽略Assimp返回的完整路径,仅提取末尾的纹理文件名,再与本地纹理目录拼接:

#include <string>
#include <filesystem>

aiString path;
mat->Get(AI_MATKEY_TEXTURE_DIFFUSE(0), path);
std::string fullPath(path.C_Str());

// 提取文件名
std::filesystem::path fsPath(fullPath);
std::string textureFileName = fsPath.filename().string();

// 拼接本地纹理路径(示例为FBX所在目录下的fbm文件夹)
std::filesystem::path fbxDir = "path/to/your/fbx/directory";
std::filesystem::path localTexturePath = fbxDir / "skins_XXX.fbm" / textureFileName;

// 后续使用localTexturePath加载纹理

3. 配置Assimp纹理搜索路径

加载FBX时,通过aiIOConfig添加本地纹理搜索目录,让Assimp自动匹配纹理:

Assimp::Importer importer;
aiScene* scene;

// 配置IO参数,添加纹理搜索目录
aiIOConfig ioConfig;
ioConfig.AddSearchPath("path/to/your/texture/directory"); // 本地纹理所在目录

// 加载FBX并启用必要后处理
scene = importer.ReadFile("your_model.fbx", 
    aiProcess_Triangulate | 
    aiProcess_GenSmoothNormals |
    aiProcess_FlipUVs,
    &ioConfig);

4. 修改FBX文件中的纹理路径(可选)

使用FBX SDK或Blender等工具打开FBX文件,手动将纹理路径修改为相对路径(如./skins_XXX.fbm/Mutant_Diffuse.png),保存后再用Assimp加载,可永久修复路径问题。

内容的提问来源于stack exchange,提问作者yldbear77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:37:45