似乎在使用three.js时,远离聚光灯的脸仍然会受到此脸和聚光灯之间其他网格所造成的阴影。我们怎样才能避免这种阴影?
例如,请参阅this jsfiddle。在这个例子中,我们有一个简单的场景,包括聚光灯,环境光,立方体,球体和相机。聚光灯的阴影相机的平截头体设置为可见。
正如我们所看到的,球体在球体最远的立面上投射阴影,但这看起来不对,因为这张脸背向聚光灯并且没有被它照亮。我想避免这种情况。
请注意,这个jsfiddle是我想要实现的简化版本。在实际的代码中,网格形状更加复杂,相机也会移动,因此,关闭阴影和减少shadowCameraFar都不是我的选择。
以下是我认为代码中最相关的部分。有关完整代码,请参阅上面jsfiddle的链接。
sphereMesh.castShadow = true;
...
cubeMesh.receiveShadow = true;
...
light.castShadow = true;
light.shadowCameraVisible = true;
light.shadowCameraNear = 200;
light.shadowCameraFar = 1000;
light.shadowCameraFov = 30;
light.shadowBias = 0;
light.shadowDarkness = 0.5;
light.shadowMapWidth = 2048;
light.shadowMapHeight = 2048;
...
scene.add(new THREE.AmbientLight(0x404040));
...
var renderer = new THREE.WebGLRenderer();
...
renderer.shadowMapEnabled = true;
renderer.shadowMapType = THREE.PCFShadowMap;
question “really weird ghosty shadows using three.js” by Eno中的第三个数字似乎说明了同样的问题,但这不是问题的主要内容,我在回答这个问题时没有找到答案。