ThreeJS 中阴影的奇怪行为
Strange behaviour of shadowing in ThreeJS
所以我有一个 threeJS 场景,我添加了一些球体(多材质)。我还添加了定向光:
this.light = new THREE.DirectionalLight( 0xFFFFFF, 1 );
this.light.position.set( 2, 10, 2 );
this.light.castShadow = true;
this.light.shadowMapSoft = true;
this.light.shadowCameraVisible = true;
this.light.shadowCameraNear = 1;
this.light.shadowCameraFar = 10;
this.light.shadowBias = 0.0009;
this.light.shadowDarkness = 0.3;
this.light.shadowMapWidth = 1024;
this.light.shadowMapHeight = 1024;
this.light.shadowCameraLeft = -8;
this.light.shadowCameraRight = 8;
this.light.shadowCameraTop = 8;
this.light.shadowCameraBottom = -8;
因此,当用户添加或删除球体时,执行 "reforms" 阴影摄像机平截头体的函数如下所示:
this.light.position.set( posV.x, posV.y, posV.z);
this.light.shadowCamera.far = l2*3;
this.light.shadowCamera.left = -l2;
this.light.shadowCamera.right = l2;
this.light.shadowCamera.bottom = -l2;
this.light.shadowCamera.top = l2;
this.light.shadowCamera.updateProjectionMatrix();
上述代码的可能结果是:
上述具体情况的另一方面:
我已将相机的视锥体可见性设置为开,就这样。问题是无缘无故生成的阴影(由红色箭头指出)。那一刻场景中没有其他物体,球体完全在相机视锥体内。
像这样的阴影问题在更新球体后很常见 (add/remove),有人知道吗?
我用 three.js r72 ,
谢谢!
根据您的评论,您看到的是 self-shadowing 个人工制品。
您需要调整 shadowBias
(现在称为 shadow.bias
)参数。
改变影子偏差会导致 trade-off 在“peter-panning”(过多的正偏差)和 self-shadowing 伪像(过多的负偏差)之间。
three.js r.73
所以我有一个 threeJS 场景,我添加了一些球体(多材质)。我还添加了定向光:
this.light = new THREE.DirectionalLight( 0xFFFFFF, 1 );
this.light.position.set( 2, 10, 2 );
this.light.castShadow = true;
this.light.shadowMapSoft = true;
this.light.shadowCameraVisible = true;
this.light.shadowCameraNear = 1;
this.light.shadowCameraFar = 10;
this.light.shadowBias = 0.0009;
this.light.shadowDarkness = 0.3;
this.light.shadowMapWidth = 1024;
this.light.shadowMapHeight = 1024;
this.light.shadowCameraLeft = -8;
this.light.shadowCameraRight = 8;
this.light.shadowCameraTop = 8;
this.light.shadowCameraBottom = -8;
因此,当用户添加或删除球体时,执行 "reforms" 阴影摄像机平截头体的函数如下所示:
this.light.position.set( posV.x, posV.y, posV.z);
this.light.shadowCamera.far = l2*3;
this.light.shadowCamera.left = -l2;
this.light.shadowCamera.right = l2;
this.light.shadowCamera.bottom = -l2;
this.light.shadowCamera.top = l2;
this.light.shadowCamera.updateProjectionMatrix();
上述代码的可能结果是:
上述具体情况的另一方面:
我已将相机的视锥体可见性设置为开,就这样。问题是无缘无故生成的阴影(由红色箭头指出)。那一刻场景中没有其他物体,球体完全在相机视锥体内。
像这样的阴影问题在更新球体后很常见 (add/remove),有人知道吗?
我用 three.js r72 , 谢谢!
根据您的评论,您看到的是 self-shadowing 个人工制品。
您需要调整 shadowBias
(现在称为 shadow.bias
)参数。
改变影子偏差会导致 trade-off 在“peter-panning”(过多的正偏差)和 self-shadowing 伪像(过多的负偏差)之间。
three.js r.73