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

如何在Three.js中使用DirectionalLight为BoxGeometry设置浅色阴影?

问题:DirectionalLight阴影过暗,需调整为浅色阴影

我使用DirectionalLight实现阴影效果,但当前阴影过暗,想要得到更浅的阴影效果。以下是我的实现代码:

this.root.remove(this.light.shadow.camera);    
this.scene.remove(this.light);
this.scene.remove(this.camera);
this.light.position.set(0, minPosition, maxPosition);    
this.light.castShadow = true;
this.light.intensity = 1.6;
this.light.shadow.camera.top = 16; // default
this.light.shadow.camera.bottom = -6; // default
this.light.shadow.camera.right = 10; // default
this.light.shadow.camera.left = -10; // default
cube.castShadow = true;
this.light.shadow.transparent = true;
this.light.target.position.add(this.scene.position);
this.light.shadow.mapSize.width = 1024;
this.light.shadow.mapSize.height = 1024;

效果展示:
BoxShadow

解决方案

要让阴影变浅,可从以下几个维度调整:

  • 调整阴影核心参数:
    • 若使用旧版Three.js,直接降低light.shadow.darkness值(默认1,可设为0.3-0.6),该参数直接控制阴影的暗度;
    • 新版Three.js中darkness已被移除,可通过light.shadow.radius(设为2-5)柔化阴影边缘,同时配合微调light.shadow.bias避免阴影失真,让阴影视觉上更柔和浅淡。
  • 添加环境光补充基础亮度:给场景添加AmbientLight,降低阴影区域与亮区的对比度,弱化阴影的暗沉感:
    const ambientLight = new THREE.AmbientLight(0xffffff, 0.4);
    this.scene.add(ambientLight);
    
  • 优化光源与阴影相机设置:
    • 适当提高light.intensity(当前1.6,可尝试2.0-2.5),增强主光源亮度,间接让阴影相对变浅;
    • 确保阴影相机的视锥体刚好覆盖需要投影的物体范围,避免阴影贴图被过度拉伸导致暗度过高;
    • 若场景中无透明物体,关闭light.shadow.transparent,减少不必要的性能消耗。
  • 开启物体的阴影接收:确保接收阴影的物体(如地面、平台)设置receiveShadow = true,否则阴影无法正确显示或对比度异常:
    // 示例:地面接收阴影
    groundMesh.receiveShadow = true;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:15:30