ThreeJS 阴影在墙壁附近表现得很有趣

ThreeJS shadows acting funny near walls

所以我在 ThreeJS 中处理阴影。我正在使用带有 WebGLRenderer 的透视相机。灯光设置也是如此。

var light = new THREE.SpotLight(0xdddddd, 1);
light.castShadow = true;
light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(60, 1, 1, 2500));
light.shadow.bias = 0.0001;
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
light.position.set(100, 800, 0);

当我靠近墙壁时,我得到的是一个截断的阴影。我玩过 Shadow Bias,但对我来说这完全是在黑暗中刺伤。

我得到的是这种奇怪的影子行为。我附上了一张截图,并用红色圆圈和一个指向它的箭头。注意阴影是如何被切断的,就像光线从墙上反射并抵消了阴影一样。有什么办法可以避免这种情况?

很可能是阴影相机 frustm 变窄了。您可以使用 进行检查:

var helper = new THREE.CameraHelper( light.shadow.camera );
scene.add( helper );

由于性能原因,阴影相机的尺寸受到限制,但您可以调整它的每个平面以满足您的需要,或者只是增加它的角度(例如从 60 度到 90 度):

light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(90, 1, 1, 2500));