почему тень становится размытой в Three.js

1

В обычном сценарии shaow выглядит так

Изображение 174551

Но после того, как я изменил параметры directightLight.shadow.camera

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

Так получилось

Изображение 174551

Как решить эту проблему?

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

  • 0
    Добавьте контроллер камеры к вашей сцене, чтобы вы могли видеть, что вы делаете. jsfiddle.net/z1m6uffu/14 . Обновление до текущей версии three.js.
Теги:
three.js

1 ответ

2
Лучший ответ

Тени моделируются с использованием "камеры" в месте расположения источника света, и этот усеченный кадр (или его поле зрения) и разрешение определяют, насколько точно тень соответствует вашему объекту. У вас не может быть совершенно подробных теней, покрывающих большие области, поэтому вам нужно настроить теневую камеру на ту часть сцены, которая важна. В этом случае, когда вы меняете параметры, чтобы развернуть камеру, вы распространили ее на большую область и потеряли точность.

Чтобы улучшить результат, вы можете:

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.

  • 0
    ОП увеличил размер усеченной зоны теневой камеры.
  • 0
    Спасибо, обновил ответ с лучшей терминологией. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню