Three.js(r64) - Blender JSON导出错过法线以获得平滑着色

时间:2014-01-11 10:20:58

标签: json three.js export blender normals

使用Three.js r64 我想从Blender导入一个带有平滑组的动画对象,该文件通过Three.js Blender导出器导出为JSON。

动画部分工作正常。

在Blender中,模型看起来很好(中央部分周围有一个小的平滑组)。

图片http://www.defresne.fr/demo/so/three/smooth_shading/gears.png

在OBJ中导出“平滑组”和“包含法线”选项时,我可以获得相同的结果。但是,在导出JSON文件(带法线)时,我无法正常工作。接下来是场景图片,带有现场演示。

图片 :( 追加的下一个链接) three_gears.png

现场演示http://www.defresne.fr/demo/so/three/smooth_shading/

我在整个网络上进行了强烈的查找,无法找到正确的信息。最好是关于SO的另一个问题,有点旧( r55 )并且从未得到任何接受的答案。

我确实尝试用

计算对象的法线
geometry.computeFaceNormals();
geometry.computeVertexNormals();

但显然,它会计算整个对象法线并产生一个完全平滑的对象。

那么,什么应该是使JSON平滑组在three.js中工作的正确方法?等待内置功能?自己建造?修改导出器?

由于three.js似乎正确加载了具有平滑组的OBJ和Collada模型,也许我可以借用这些加载器中的一些代码来获取逻辑?

感谢您的帮助

[编辑]

我发现了一些很棒的东西!

在Blender中,生成2个模型导出:第一个是JSON文件,第二个是OBJ文件。使用three.js在线编辑器加载第二个然后转换它以获得几何JSON ... 我可以收集这个新导出的几何体的顶点,法线和面,并将其复制到第一个导出的文件中。

工作正常!我有很好的着色组。即使剥皮也能正常工作。

但这是一种繁琐的处理方式,我希望能为自己节省一些额外的转换。

这是否意味着从Blender导出几何体时出现问题?知道为什么吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了会发生什么。

r64 Three.js Blender导出器不导出平滑组,因此如果需要保留这些,除了将几何体导出到OBJ文件之外没有其他解决方案,然后使用python脚本'convert_obj_three.py'进行转换。在Three.js存储库中可用。转换后的文件将具有正确的法线。 (导出OBJ文件时不要忘记检查正常选项)