转换后的 GLTF 2.0 模型的 THREEJS 中的问题

Issues in THREEJS with converted GLTF 2.0 models

我有超过 10 万个 GLTF 1.0 模型。我们正处于转换为 2.0 的过程中,正在碰壁。

源模型一开始是Collada,我们使用Collada2GLTF转换器生成GLTF文件。但是我们确实使用 KHR_materials_common 设置来完成此操作,这为我们创造了完美的结果。

但现在我们想将 GLTF 文件转换为 2.0,这被证明是非常有问题的。该过程运行良好,但转换后的模型获得了 'KHR_materials_common' 扩展名。正是通过那个material绑定了纹理。

由于我们使用的是THREE JS渲染器,它的GLTF加载器还不支持这个扩展,并且没有显示纹理。它只有一个全黑的表面。

我已经(快速)使用 MeshBasicMaterial 在本地添加该扩展,但没有很好的结果。

所以,我的问题是,如果有的话,我有什么选择?

截至 2018 年底,glTF 1.0 和 glTF 2.0 中 material 类型的快速摘要:

glTF 1.0

  • (核心):自定义 GLSL 着色器。
  • KHR_materials_common:Blinn、Phong、Lambert 和 Constant/unlit.

glTF 2.0

  • (核心):Metal/rough PBR。
  • KHR_materials_pbrSpecularGlossiness: Spec/gloss PBR.
  • KHR_materials_unlit: Constant/unlit.
  • KHR_techniques_webgl:自定义 GLSL 着色器。 (进行中)

请注意,glTF 2.0 中没有 blinn、phong 或 lambert material。您知道您的 100,000 个模型使用了哪些类型的 material 或哪些类型的纹理吗?这将有助于回答您应该使用哪个 glTF 2.0 material。

Three.js 实现了所有 glTF 2.0 material 选项,除了 KHR_techniques_webgl,其规范不完整。 Three.js 没有实现 KHR_materials_common,因为它不是 glTF 2.0 的一部分。

最有可能的是,如果您在 glTF 1.0 中使用了 unlit materials,您应该在 glTF 2.0 中使用 KHR_materials_unlit 扩展。如果您使用 blinn、phong 或 lambert,则应在 glTF 2.0 中使用 metal/rough 或 spec/gloss PBR。这些 material 的 PBR 转换应该看起来相当不错,但如果您正在寻找遗留 material 的 精确 匹配,您可能需要考虑自定义 GLSL 扩展。

我不认为 glTF-Pipeline 可以进行这种转换,但值得在那里提交一个问题(看起来你已经有了吗?)来请求它。如果没有,转换可能是您可以自己实现的。例如,它比将任何东西 to/from 转换为 GLSL material.

要容易得多