SceneKit Отложенные тени на нескольких прозрачных плоскостях - PullRequest
3 голосов
/ 23 апреля 2019

Проблема

Я настроил минимальный проект SceneKit со сценой, которая содержит самолет по умолчанию с прозрачной плоскостью, которая действует как приемник тени.Я продублировал эту настройку, чтобы было два самолета и две прозрачные плоскости теней.

Существует направленный свет, который отбрасывает тени, и его свойство shadowMode установлено на .deferred.Когда две плоскости тени перекрываются, плоскость, которая находится ближе к камере, «обрезает» тень на плоскости, которая находится дальше от камеры.

Я знаю, что это связано с тем, что материал плоскостиимеет .writesToDepthBuffer свойство установлено в true.Однако без этого отложенные тени не работают.

Missing Shadow

Вопрос

Есть ли способ показать тени на несколькихсамолеты перекрытия?Я знаю, что могу использовать SCNFloor, чтобы показать несколько теней, но я специально хочу тени на нескольких плоскостях с разным положением Y.Подумайте о сценарии в ARKit, где обнаружено несколько плоскостей.

Код

Я настроил минимальный проект на GitHub здесь.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

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

enter image description here

Если у вас есть несколько 3D-объектов с включенной опцией Writes depth On, используйте Rendering order свойства для каждого объекта. Узлы с большими порядками рендеринга отображаются последними. Значение по умолчанию Rendering order равно нулю.

Например:

geoNodeOne.renderingOrder = -1    /* Rendered first */
geoNodeTwo.renderingOrder = 50    /* Rendered last */

enter image description here

enter image description here

Но в вашем случае Rendering order свойство is useless, потому что одна проецированная на тень плоскость блокирует другую .

Для моделирования геометрии произвольной формы используйте Extrude Tool в приложении для 3D-моделирования (например, Maya или 3dsMax):

enter image description here

0 голосов
/ 24 апреля 2019

Сближение обоих значений Y теневых плоскостей позволит решить проблему cutoff.

...