В обычном сценарии shaow выглядит так
Но после того, как я изменил параметры directightLight.shadow.camera
directionalLight.shadow.camera.left = -50
directionalLight.shadow.camera.right = 50
directionalLight.shadow.camera.top = -50
directionalLight.shadow.camera.bottom = 50
Так получилось
Как решить эту проблему?
Тени моделируются с использованием "камеры" в месте расположения источника света, и этот усеченный кадр (или его поле зрения) и разрешение определяют, насколько точно тень соответствует вашему объекту. У вас не может быть совершенно подробных теней, покрывающих большие области, поэтому вам нужно настроить теневую камеру на ту часть сцены, которая важна. В этом случае, когда вы меняете параметры, чтобы развернуть камеру, вы распространили ее на большую область и потеряли точность.
Чтобы улучшить результат, вы можете:
A. Увеличьте разрешение shadowMap. Более высокие значения дают более качественные тени за счет времени вычисления. Значения должны быть равны 2.
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
B. Измените тип тени. PCFSoft может выглядеть лучше, но не работает.
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
C. Уменьшите размеры теневой камеры с уклоном только до области, которую вам нужно покрыть. Используйте CameraHelper, чтобы увидеть, где тени покрывают, как в этом примере.
scene.add( new THREE.CameraHelper( light.shadow.camera ) );
Дополнительную информацию см. В документах THREE.LightShadow.