Three.js (r64) - Blender JSON 导出丢失法线以实现平滑着色

Posted

技术标签:

【中文标题】Three.js (r64) - Blender JSON 导出丢失法线以实现平滑着色【英文标题】:Three.js (r64) - Blender JSON export miss normals for smooth shading 【发布时间】:2014-01-30 10:00:18 【问题描述】:

使用 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/

我在整个网络上进行了大量查找,但找不到正确的信息。 Best 是关于 SO 的另一个问题,它有点老(r55)并且从未得到任何公认的答案。

我确实尝试用

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

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

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

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

感谢您的帮助

[编辑]

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

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

效果很好!我有很好的着色组。甚至剥皮也能正常工作。

但这是一种乏味的处理方式,我希望我可以为自己节省一些额外的转换。

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

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

好的,我终于知道发生了什么。

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

【讨论】:

以上是关于Three.js (r64) - Blender JSON 导出丢失法线以实现平滑着色的主要内容,如果未能解决你的问题,请参考以下文章

将模型从 Blender 导出到 Three.js 时没有纹理

如何将 Blender 3D 模型导入到 three.js

Blender 导出到 Three.js

将 Blender 粒子系统头发导出到 Three.JS

将变形目标从 Blender 导出到 Three.js

Three.js 导出没有纹理的 Blender 模型