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;
}
});
当使用 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;
}
});