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

时间:2018-10-19 08:34:03

标签: three.js gltf

我有超过10万个GLTF 1.0模型。我们正在转换为2.0,并且正在碰壁。

最初的模型是Collada,我们使用Collada2GLTF转换器生成GLTF文件。但是我们使用KHR_materials_common设置来做到这一点,它为我们创造了完美的结果。

但是现在我们想将GLTF文件转换为2.0,这被证明是非常有问题的。该过程工作正常,但转换后的模型获得了'KHR_materials_common'扩展名。正是通过这种材料来绑定纹理。

当我们使用三个JS渲染器时,其GLTF加载器尚不支持此扩展,并且不会显示任何纹理。它只会得到全黑的表面。

我已经给它(一个快速的方法)使用MeshBasicMaterial在本地添加该扩展名,但是效果不佳。

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

  • 是否有办法从GLTF 1.0源中转换和删除KHR_materials_common?
  • 转换过程(gltf-pipeline)是否可以删除扩展名?
  • 是否有任何工作在THREEJS GLTFLoader中添加支持?
  • 从源到GLTF 2.0的转换有效,但是我没有所有可用的源。有些是客户财产,我们不存储。
  • 不支持还原为COLLADA(here

1 个答案:

答案 0 :(得分:2)

截至2018年底的glTF 1.0和glTF 2.0材料类型的快速摘要:

glTF 1.0

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

glTF 2.0

  • (芯):金属/粗糙的PBR。
  • KHR_materials_pbrSpecularGlossiness :规格/光泽度PBR。
  • KHR_materials_unlit :恒定/不发光。
  • KHR_techniques_webgl :自定义GLSL着色器。 (进行中)

请注意,glTF 2.0中没有blinn,phong或lambert材料。您是否知道100,000个模型使用的是哪种材料或纹理?这将有助于回答您应该使用哪种glTF 2.0材料。

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

最有可能的是,如果您在glTF 1.0中使用了不发光的材质,则应该在glTF 2.0中使用KHR_materials_unlit扩展名。如果使用blinn,phong或lambert,则应在glTF 2.0中使用金属/粗糙或规格/光泽PBR。这些材料的PBR转换应该看起来相当不错,尽管如果您要与旧材料精确匹配,则可能需要考虑自定义GLSL扩展名。

我不认为glTF-Pipeline可以进行此转换,但是值得在那里提出一个问题(看起来您已经拥有了?)来请求它。如果没有,则转换可能是您可以自己实现的。例如,这比将任何内容转换为GLSL材质容易得多。