THREE.Mesh 的法线与原始模型不同

normals of THREE.Mesh are different than of original model

我在 3ds max 中创建了一个对象,然后将其导出为 .obj,然后使用 three.js 编辑器将其转换为 .gltf,最后我对其进行了 draco 压缩。

当我在我的 three.js 场景中加载它时,有些面似乎没有适当的照明(我使用标准 material)并且如果我使顶点法线可见,看起来法线平均(?)发生在整个过程中。请注意,感兴趣的顶点每个都有 2 个法线。

我该如何解决这个问题?

WebGL 顶点只能有一个法线。如果你想让一个顶点有两个法线,它就必须是两个独立的顶点占据相同的位置。

通常 GLTF 导出器会为您解决这个问题,但在转换 OBJ -> Three.js -> GLTF -> [= 的多步骤过程中的某个地方13=],您的顶点正在合并和平均化。我推荐两个选项:

  1. 尝试寻找一步 3DSMax -> DRACO 导出器,看起来像 Babylon.js has built one already,它可能会解决您的问题。
  2. 如果这不起作用,只需将硬边分成各自的岛,这样它们就不会共享顶点。将其保持为单个网格,只是断开连接,如下所示:这将强制您的 3D 编辑器将沿硬边的顶点拆分为同一位置的两个顶点。那么您的导出过程应该可以正常工作。