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

Three.js中导入GLB模型实现低阴影效果的光照配置问题

解决思路

1. 校准渲染器基础配置

大部分GLB导入偏暗的问题都是渲染器颜色空间、色调映射配置缺失导致的,添加以下配置:

renderer.outputEncoding = THREE.sRGBEncoding;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 1.2; // 可根据实际显示效果微调
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap; // 实现柔和的低阴影效果

2. 替换为适配低阴影效果的光照组合

点光源衰减快、光照范围不均匀,不适合作为场景主光源,改用「半球光+方向光+弱环境光」的组合,既能保证整体亮度均匀,也能实现你要的柔和低阴影效果:

// 半球光:模拟环境漫反射,弱化明暗交界的生硬感
const hemilight = new THREE.HemisphereLight(0xffffff, 0x444444, 0.6);
scene.add(hemilight);

// 方向光:主光源,产生清晰但柔和的低阴影
const dirLight = new THREE.DirectionalLight(0xffffff, 1.2);
dirLight.position.set(5, 10, 7.5);
// 阴影配置
dirLight.castShadow = true;
dirLight.shadow.mapSize.width = 2048;
dirLight.shadow.mapSize.height = 2048;
dirLight.shadow.camera.near = 0.5;
dirLight.shadow.camera.far = 50;
scene.add(dirLight);

// 弱环境光:填补暗部死角,避免局部死黑
const ambientLight = new THREE.AmbientLight(0xffffff, 0.3);
scene.add(ambientLight);

如果需要保留相机跟随的补光,把原来的点光源强度降到1~2即可,过高的强度会导致局部过曝。

3. 调整GLB自带材质属性

GLB导出时自带的PBR材质参数(粗糙度、金属度)也可能导致整体偏暗,导入模型后遍历调整材质:

gltf.scene.traverse((child) => {
  if (child.isMesh) {
    child.castShadow = true;
    child.receiveShadow = true;
    // 可根据实际效果微调以下两个参数
    child.material.roughness = 0.5; 
    child.material.metalness = 0.1;
    // 校准材质贴图的颜色空间
    child.material.map && (child.material.map.encoding = THREE.sRGBEncoding);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:04