You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js导入的3D模型无法被AmbientLight照亮,如何排查Blender参数问题?

排查与解决方案

1. 代码侧快速验证

首先在模型加载回调中加入材质遍历逻辑,确认是否是材质本身不支持光照:

gltfLoader.load( "model/scene.gltf", model =>  {
  // 新增材质校验替换代码
  model.scene.traverse(child => {
    if(child.isMesh) {
      // 打印原材质类型,确认是否为不响应光照的MeshBasicMaterial等类型
      console.log('材质类型:', child.material.type)
      // 临时替换为标准PBR材质测试光照响应
      child.material = new THREE.MeshStandardMaterial({
        color: 0xaaaaaa,
        roughness: 0.8,
        metalness: 0.2
      })
      child.material.needsUpdate = true
    }
  })

  // 原有加载逻辑保持不变
  console.log("Содержимое модели: ", model);
  mixer = new THREE.AnimationMixer(model.scene);
  const clips = model.animations;
  console.log("Список аннимаций: ", clips);

  const clip = THREE.AnimationClip.findByName( clips, 'mixamo.com' );
  const action = mixer.clipAction( clip );
  action.play();

  scene.add(model.scene);
});

如果替换材质后模型可以正常被环境光照亮,即可确认问题出在模型本身的材质配置上。

2. Blender侧修复步骤

如果确认是模型材质问题,按以下步骤检查Blender配置:

  • 选中模型网格,打开「材质属性」面板,确认材质使用的是*原理化BSDF(Principled BSDF)*着色器,不要使用自发光、漫射无光照、仅输出等不响应环境光的着色器
  • 检查原理化BSDF的「基础色」通道是否正确绑定纹理/纯色,不要把颜色仅绑定到自发光通道
  • 切换到编辑模式,选中所有面按Shift+N重新计算法线,确保法线方向朝外
  • 导出GLTF格式时,在导出设置的「材质」分类下,勾选「原理化BSDF的金属粗糙度」,不要勾选「无材质」「强制不发光」等选项

3. 其他潜在问题排查

  • 你当前使用的Three.js版本为0.99.0,版本过旧可能出现新GLTF规范的材质解析异常,建议升级到R120以上的稳定版本,同时保证GLTFLoader和Three.js版本完全匹配
  • 不要手动给模型赋值MeshBasicMaterial、MeshNormalMaterial这类默认不响应光照的材质类型

内容的提问来源于stack exchange,提问作者Alexandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:15:03