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 导出丢失法线以实现平滑着色的主要内容,如果未能解决你的问题,请参考以下文章