在正常情况下,shaow看起来像这样

javascript - 为什么在Three.js中阴影变得模糊-LMLPHP

但是在我修改了directionalLight.shadow.camera的参数之后

directionalLight.shadow.camera.left = -50
directionalLight.shadow.camera.right = 50
directionalLight.shadow.camera.top = -50
directionalLight.shadow.camera.bottom = 50


变成了这样

javascript - 为什么在Three.js中阴影变得模糊-LMLPHP

如何解决这个问题?

https://jsfiddle.net/JesseLuo/z1m6uffu/12/

最佳答案

阴影是在光源位置使用“摄像机”模拟的,摄像机的视锥(或视场)和分辨率决定了阴影与对象的匹配程度。您不可能拥有覆盖大面积区域的非常详细的阴影,因此您需要将阴影摄像机调整到场景中重要的部分。在这种情况下,更改参数以扩展相机的视锥范围时,会将其分布在更大的区域上,并且精度下降。

要提高结果,您可以:

A.增加shadowMap的分辨率。较高的值会以计算时间为代价提供更好的质量阴影。值必须是2的幂。

light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;


B.更改阴影类型。 PCFSoft可能看起来更好,但性能却不佳。

renderer.shadowMap.type = THREE.PCFSoftShadowMap;


C.将阴影摄像机截头锥体的尺寸减小到仅需覆盖的区域。使用CameraHelper可以看到阴影覆盖的位置,如this example中所示。

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


有关更多信息,请参见THREE.LightShadow docs

关于javascript - 为什么在Three.js中阴影变得模糊,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48134282/

10-17 02:55