THREE.js FBXLoader 将 .png 视为 .psd,并且不会加载 material

THREE.js FBXLoader treats .png as if it is a .psd, and doesn't load the material

当使用 THREE.js FBXLoader 加载 .fbx 文件时,它会部分加载模型,而不会加载模型的 alpha 纹理部分。

我收到错误:

FBXLoader: PSD textures are not supported, creating empty placeholder texture for pinebranchColor.psd

尽管 materials 文件夹中没有 .psd 文件。从下面的截图可以看出,似乎认为在 material alphaMap 中,纹理名称是 pinebranchColor.psd.

这就是 FBX 模型被渲染为:

这就是我加载 GLTF 版本时呈现的效果(注意:树叶的透明部分未被拾取为透明)- 更接近它的外观,但不完全。

根据 sketchfab :

,模型应该是这样的

为什么你认为它说 alpha material 是一个 .psd? 这可以在 .fbx 文件本身中引用吗?最初的问题是 如何让叶子的 alpha/transparency 正确呈现 ,而不是块颜色。也许我可以在 GLTF 版本的 THREE.js material 中设置一个 属性 并且这样可以吗?

这是我第一次导入THREE.js的模型,因为我刚刚开始学习,所以请尽可能解释一下。

编辑: 在开发工具中,我为叶子找到了 material,并将透明设置为 true。这奏效了!在一定程度上。但是仍然存在一些渲染问题。所以我认为这是下降的路线。

我不确定为什么无法加载 FBX alpha material,但我使用 THREE.js scene.traverse 函数解决了 GLTF 版本的透明度问题,并且将场景中所有叶子 material 的 material transparent 属性 设置为 true

这解决了核心问题,但仍然存在一些瑕疵,如图所示,留下的叶子被涂黑了:

解决方案是在 material 上也将 alphaTest 设置为 0.5,结果如下:

代码如下:

gltf.scene.traverse(child => {
  if (child.isMesh && child.name.includes('leaf')) {
    child.material.alphaTest = 0.5;
    child.material.transparent = true;
  }
});