上述效果第二张图并不理想待日后优化
代码示例
const renderer = new THREE.WebGLRenderer(parameters);
//阴影开启
renderer.shadowMap.enabled = true;
//阴影类型
renderer.shadowMap.type = THREE.PCFShadowMap;
const mesh = new THREE.Mesh(
new THREE.BoxGeometry(1,1,1),
new THREE.MeshStandardMaterial({color:0x5511ff})
)
//显示阴影
mesh.castShadow = true;
//不接收其他物体投射的阴影 -- 默认false不用特意设置
mesh.receiveShadow = false;
const floor = gltf.scene.getObjectByName("floor") as THREE.Mesh;
//地面不产生阴影 -- 默认false
floor.castShadow = false;
//接收地面上的物体投射的阴影
floor.receiveShadow = true;
const light = new THREE.SpotLight( 0xffffff );
light.castShadow = true;
light.shadow.mapSize.width = 2048;
light.shadow.mapSize.height = 2048;
light.shadow.camera.near = 0.5;
light.shadow.camera.far = 500;
light.shadow.focus = 1;
light.shadow.bias = -0.00005;
灯光的位置通常需要调试
light.shadow.mapSize决定阴影的分辨率默认 512 越大开销越大
light.shadow.bias解决Three.js 阴影条纹问题
