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

转换JSON后Object3D骨骼位置异常,导入threejs-editor如何修复?

问题:Three.js导出带骨骼模型JSON后导入编辑器显示异常(骨骼集中在零点)

我想导出仅含一个人形3D对象的场景为JSON格式,导入threejs-editor后模型显示异常,所有骨骼都集中在零点位置。请问操作中的问题出在哪里,该如何修复?

以下是我导出.json格式模型的代码:

function saveString( text, filename ) {
    
    save(new Blob([text], {type: "text/plain",}), "scene.json");

}

function createJSONFunction() {
  let output = scene.toJSON();
  output = JSON.stringify( output );
  metadata = `"metadata":{"type":"App"},"project":{"shadows":true,"shadowType":1,"vr":false,"physicallyCorrectLights":false,"toneMapping":0,"toneMappingExposure":1},"camera":{"metadata":{"version":4.5,"type":"Object","generator":"Object3D.toJSON"},"object":{"uuid":"${camera.uuid}","type":"PerspectiveCamera","name":"Camera","layers":1,"matrix":[0.8551272907805305,1.3877787807814457e-17,0.5184180905045175,0,0.13009003113625428,0.9680035450955323,-0.2145826658457063,0,-0.5018305494500295,0.25093651922843285,0.8277662489834916,0,-5.6106361087816765,2.805555575159794,9.254708011035515,1],"fov":50,"zoom":1,"near":0.01,"far":1000,"focus":10,"aspect":1.9214145383104126,"filmGauge":35,"filmOffset":0}}`;     
  result = `{${metadata},"scene":${output}`;
  saveString(result);

}

threejs-editor中的显示效果:
threejs编辑器中的异常显示


问题分析与修复方案

1. 核心问题:手动拼接JSON破坏了数据结构

你当前的代码存在两个致命问题:

  • 手动拼接的JSON缺少闭合的},语法完全不合法,编辑器无法正确解析完整的模型数据
  • 直接将自定义的metadata、camera字段与scene.toJSON()的结果强行拼接,干扰了Three.js编辑器对骨骼层级、变换数据的读取逻辑,导致骨骼位置信息丢失,全部集中到零点

2. 正确的导出方式

Three.js内置的toJSON()方法已经可以生成编辑器兼容的格式,不需要手动拼接额外内容。如果只需要导出那个人形模型,直接对该模型对象调用toJSON()即可:

修复后的代码示例:

function saveString(text, filename) {
    save(new Blob([text], { type: "text/plain" }), filename || "model.json");
}

function createJSONFunction() {
    // 替换成你场景中实际的人形模型对象(比如通过名称获取)
    const humanoidModel = scene.getObjectByName("Humanoid");
    if (!humanoidModel) {
        console.error("未找到目标人形模型");
        return;
    }
    // 直接对模型调用toJSON,生成编辑器可识别的完整数据
    const modelJSON = humanoidModel.toJSON();
    // 格式化JSON方便查看和校验
    const jsonString = JSON.stringify(modelJSON, null, 2);
    saveString(jsonString, "humanoid-model.json");
}

3. 额外注意事项

  • 确保导出前,人形模型的SkinnedMesh与Skeleton已经正确绑定,骨骼层级关系正常
  • 如果需要保留场景、相机信息,直接调用scene.toJSON()即可,编辑器会自动识别其中的所有合法数据
  • 导出后可以用在线JSON校验工具检查文件格式是否合法,避免语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:15:47