如何用C#编辑Blender生成的FBX文件或用记事本无乱码打开FBX
FBX文件乱码及C#读取编辑解决方案
记事本打开FBX乱码的原因与解决方法
FBX格式分为两种存储类型,你遇到的乱码是二进制格式FBX的正常表现:
- 二进制FBX:Blender默认导出为此格式,体积小、存储效率高,属于非明文结构,用文本编辑器打开必然显示乱码
- ASCII明文FBX:FBX的明文存储版本,可直接用文本编辑器打开查看、编辑
解决文本编辑器打开乱码的方法:在Blender导出FBX的设置面板中,找到「格式」选项,将默认的「二进制」修改为「ASCII」后重新导出即可。
C#读取编辑FBX的可行方案
Assimp.NET对FBX的支持基于反向工程实现,对部分新版FBX特性、自定义属性的兼容性较差,达不到预期属于正常情况,可采用以下更稳定的方案:
方案1:Autodesk官方FBX SDK C#封装
这是目前兼容性最好、功能最完整的方案,同时支持二进制、ASCII格式FBX的读写,可处理网格、材质、动画、骨骼、自定义属性等所有FBX支持的内容。
基础读写示例代码:
using Autodesk.Fbx; // 初始化FBX管理器 var fbxManager = FbxManager.Create(); var ioSettings = FbxIOSettings.Create(fbxManager, Globals.IOSROOT); fbxManager.SetIOSettings(ioSettings); // 加载本地FBX文件 var importer = FbxImporter.Create(fbxManager, ""); bool loadSuccess = importer.Initialize(@"C:\你的文件路径\test.fbx", -1, fbxManager.GetIOSettings()); if (!loadSuccess) { // 自定义加载失败处理逻辑 return; } var scene = FbxScene.Create(fbxManager, "TargetScene"); importer.Import(scene); importer.Destroy(); // 此处添加读取、修改scene中各节点的业务逻辑 // 编辑完成后导出FBX var exporter = FbxExporter.Create(fbxManager, ""); bool exportSuccess = exporter.Initialize(@"C:\导出路径\modified.fbx", -1, fbxManager.GetIOSettings()); if (exportSuccess) { exporter.Export(scene); } exporter.Destroy(); fbxManager.Destroy();
方案2:轻量开源FBX处理库
如果不需要用到FBX的全量特性,可以选择更轻量的开源库如FbxSharp,无需依赖官方FBX运行时,部署更简单,适合处理基础的网格、动画等数据。
方案3:手动解析ASCII格式FBX
如果需求非常简单,也可以直接导出ASCII格式的FBX,按照FBX明文节点的结构自行实现解析逻辑,无需依赖第三方库,但该方案容错率低,不适合处理复杂FBX文件。
内容的提问来源于stack exchange,提问作者Kaan
相关产品推荐
相关产品推荐

