Как улучшить качество теней в three.js

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

Поэтому я задаюсь вопросом, должен ли я использовать свет для каждого объекта над ними и следовать за ними, чтобы отбрасывать край тени высокого качества? И в некоторых случаях я не могу установить размер shadow.mapsize выше.


person 欧阳维杰    schedule 17.03.2018    source источник


Ответы (1)


Есть ряд вещей, которые контролируют качество теней.

Мне кажется, что ваши теневые камеры слева/справа/сверху/снизу установлены слишком большими, и они отбрасывают тень на слишком большую площадь.

Свет отбрасывающий тень довольно дорогой, поэтому я бы не стал пытаться компенсировать это несколькими источниками света.

Попробуйте уменьшить light.shadow.camera слева/справа/сверху/снизу, чтобы лучше сфокусировать карту на том, где находятся ваши объекты. Также попробуйте увеличить размер карты теней примерно до 1024 или 2048 квадратных.

Еще одна полезная вещь — использовать THREE.PCFShadowmapping вместо значения по умолчанию. Это сгладит края ваших теней.

редактировать: также проверьте PCFSoftShadowMapping.. медленнее рендеринг, но значительно сглаживает края теней.

Получение правильного отображения теней — сложный процесс, требующий больших усилий.

Кроме того, попробуйте прикрепить DirectionalLightHelper к источнику света, а также CameraHelper к камере освещения. Это поможет вам понять, насколько велика область отбрасывания теней и куда направлены предметы.

https://imgur.com/a/Zo80z

person manthrax    schedule 17.03.2018
comment
И да... это обычная техника, когда направление света следует либо за камерой, либо за объектом, который находится в фокусе... как автомобиль в гоночной игре или главный герой... Одна проблема, с которой вы можете столкнуться, это что перемещение направленной камеры приведет к мерцанию краев теней. Вы можете избежать этого эффекта, перемещая направленный свет только тогда, когда он находится дальше от целевого объекта на определенный порог. Я делаю это в гоночной игре, над которой работаю, и это работает хорошо. - person manthrax; 21.03.2018
comment
Спасибо. Суть в том, чтобы выяснить, когда и где зажечь свет. Очень мило с твоей стороны предложить мне такую ​​помощь. - person 欧阳维杰; 21.03.2018