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

React Three Fiber添加DirectionalLight后阴影出现条纹问题求助

React-Three-Fiber方向光阴影条纹问题修复方案

问题根源

你用的是正交相机,DirectionalLight默认的阴影相机范围过大,导致阴影贴图被过度拉伸,出现条纹。另外shadowBias设置得太极端(-0.05)也会加重这个问题。

具体修复步骤

  • 精准限制阴影相机范围
    给方向光的阴影相机设置left/right/top/bottom参数,让它刚好包裹你的模型,避免贴图拉伸模糊:

    <directionalLight
        castShadow
        ref={directionalLightRef}
        shadowMapHeight={2048} // 适当提高贴图分辨率,增强阴影清晰度
        shadowMapWidth={2048}
        shadowCameraFar={50}
        shadowCameraLeft={-20} // 根据模型实际尺寸调整,确保完全覆盖模型
        shadowCameraRight={20}
        shadowCameraTop={20}
        shadowCameraBottom={-20}
        shadowBias={-0.001} // 降低偏移值,避免极端偏移导致的条纹
        intensity={1}
        position={[1.5, 5, 7]}
    />
    
  • 完善模型阴影设置
    确保Model组件内部的所有网格,不仅开启receiveShadow,如果模型有凸起结构需要投射阴影,也要开启castShadow。

  • 优化dpr参数
    可以尝试固定dpr值,避免高像素密度设备下的阴影渲染异常:

    <Canvas shadows={true} dpr={window.devicePixelRatio > 1 ? 1.5 : 1} orthographic camera={{ zoom: 200, position: [0, 5, 10] }}>
    
  • 启用柔和阴影过滤
    在Canvas中配置更柔和的阴影算法,减少条纹感:

    import * as THREE from 'three'
    
    <Canvas 
        shadows={{ 
            enabled: true,
            type: THREE.PCFSoftShadowMap 
        }} 
        dpr={[1, 2]} 
        orthographic 
        camera={{ zoom: 200, position: [0, 5, 10] }}
    >
    

调试小技巧

可以用ShadowCameraHelper可视化阴影相机的范围,方便精准调整参数:

import { ShadowCameraHelper } from '@react-three/drei'

// 在directionalLight组件后添加
<ShadowCameraHelper light={directionalLightRef.current} />

调整完成后记得移除这个辅助组件,避免影响性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:01:02