Three.JS Blender 只导出一个物体

4
我的Blender模型由许多对象组成。该模型从C4D导出为.obj格式,然后在Blender中将每组对象放置在一个空对象下。当我使用three.js导出时,只有最后选定的对象会被导出为.json文件。
我尝试选择不同的对象,结果仍只有单个对象会被导出。通过编辑器查看生成的.json文件,实际上只显示导出了单个对象。
我将每个对象分开以便于对每个对象进行选择并应用不同的材料。过去,我将所有对象合并为单个网格,然后从C4D导出.obj文件,在Blender和生成的.json文件中一切正常。
在Blender中,我尝试将所有对象链接到单个父对象,希望整个模型都能导出。但这并没有起作用。
我的问题是,这种行为是否正常?
在Blender中如何将所有单独的部分合并为单个网格,同时对每个部分应用材质?
或者在使用多个对象(每个对象都有其自己的空对象)时,是否存在某种导出设置错误?
2个回答

2
请注意在Blender中将对象分组到 Null(空对象)下时要小心。我曾经尝试过这样做,因为它通常是逻辑工作流程的一部分,但发现当场景在three.js中构建时存在变换问题。
关键词在于“last selected”,这告诉我您可能没有单击导出选项中的“场景”选项。默认情况下,导出只会生成一个 .json 文件,其中包含Blender中当前选择的单个几何体。
发布日志文件输出有助于查看您的选项。您不需要将整个日志文件传到pastebin上,只需找到一个类似于以下内容的行(在日志顶部)即可:
Three.Export - DEBUG: 
Scene().__init__(G:\cleanflight_json_test\cfc_gui_def_green_a.json, 
{'animation': False, 'cameras': False, 'embedGeometry': True, 
'faces': True, 'colors': False, 'influencesPerVertex': 2, 
'scene': True, 'faceMaterials': False, 'precision': 6, 'embedAnimation': True, 'lights': False, 'logging': 'debug', 
'scale': 1.0, 'frameStep': 1, 'bones': False, 'vertices': True, 
'uvs': False, 'copyTextures': True, 'geometryType': 
'geometry', 'mixColors': False, 'maps': False, 'compression': 
'None', 'normals': False, 'enablePrecision': False, 'materials': False, 
'skinning': False, 'morphTargets': False})

这样至少可以告诉我你有哪些选择


昨天每当我选择场景选项进行导出时,模型就不会出现在GUI中,而这些模型将在其中运行。GUI中已经有灯光和相机,只需要加入带材质的模型即可。这是一个短视频,展示了GUI与昨天那个立方体模型的工作情况:https://www.youtube.com/watch?v=DIE_vytEG8s&list=UUCa6sk3mAf6dT4wY9TYaNNg - Akfreak
这里还有一个链接,指向blender模型和.json文件 http://lilsamedia.com/three_js_blender/ - Akfreak
1
这是四轴飞行器的屏幕截图,我在其中合并了所有网格(Ctrl+J组合选定的网格)。我更改了每个材质的颜色,以便您可以看到材质分配被保留。http://i.imgur.com/KAzcZle.png - repsac
如果您只是使用颜色(没有纹理),也可以考虑将材质烘焙到顶点颜色中。 - repsac
你的资产(多个材质组合成单个网格)在我的电脑上可以正常加载。http://i.imgur.com/LyZSpXH.png还没有时间测试场景版本(保持对象分离)。 - repsac
再次感谢你的帮助,Repsac。three.js的blender导出文档并没有提供太多信息。使用Ctrl+J将所有未设置父级的空对象合并到我的个体网格中完美解决了问题。我仍然可以访问每个材质。但我希望我的C4D版本更新一些,这样我就可以在导入/导出到Blender时导出所有材质的.fbx文件。现在,这个工作流程已经足够了。非常感谢你的帮助! - Akfreak

1
正如Repsac所说,检查Three.js json导出器设置中的Scene选项非常重要。但是需要知道的是,导出的json文件不再仅仅是一个Geometry了。它现在被标记为Scene类型,必须以不同的方式处理。
您可以在此帖的答案中跟随完整的从Blender导出整个场景的过程以及正确处理导出网格的方法。
此外,正如你们两个所说的,所有网格都可以合并成单个网格,并使用THREE.MeshFaceMaterial处理其多个材质,就像以下代码一样:
var mat1 = new THREE.MeshLambertMaterial( { map: texture1 } );
var mat2 = new THREE.MeshLambertMaterial( { map: texture2 } );
var materials = [mat1, mat2];
var faceMat = new THREE.MeshFaceMaterial(materials);
mesh = new THREE.Mesh( geometry, faceMat );
scene.add( mesh );

希望这能更清晰地解释步骤。感谢大家的帮助 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接