В рендер-движке Cycles есть удобная возможность отрендерить объект с тенью на прозрачном фоне с помощью материала с функцией рендера только падающих на него теней «shadow catcher». В рендер-движке EEVEE такой функции у материалов нет. Однако в EEVEE можно собрать свой «shadow catcher» на основе нодов.
Готовый материал «EEVEE Shadow Catcher» можно скачать в библиотеке BIS.
- Для начала создадим простую сцену:
Добавим плоскость, которая будет служить «кэтчером»
shift+a — Mesh — Plane
и разместим на ней любой объект.
Добавим источник освещения
shift+a — Light — Spot
направим его на объект и настроим его положение и яркость так, чтобы он давал хорошо видимую тень.
Переключимся на рендер-движок EEVEE и перейдем в режим «Rendered» (z — 8).
- Откроем окно Shader Editor и для плоскости добавим новый материал.
Заменим шейдер Principled BSDF на простой шейдер Diffuse.
- В EEVEE есть очень полезный нод «Shader to RGB», который переводит итоговый шейдер, с рассчитанными бликами и тенями, в простой цвет. Обычно этот нод используется для цветокоррекции, мы же с его помощью сделаем наш «shadow catcher».
Добавим нод «Shader to RGB»
shift+a — Converter — Shader to RGB
после нода «Diffuse BSDF».
На выходе «Color» этого нода мы получаем собственно то, что видим на экране пререндера — белый круг от освещения и тень, отбрасываемую объектом.
Добавим нод «RGB to BW» чтобы исключить влияние света и получить черно-белую маску.
shift+a — Converter — RGB to BW
Добавим еще два нода «Mix Shader» и «Transparent BSDF»
shift+a — Shader — Mix Shader
shift+a — Shader — Transparent BSDF
и соединим их следующим образом, используя полученную маску, как фактор смешивания нода «прозрачности» с пустым нодом.
Для того, чтобы построенное дерево нодов заработало правильно, в настройках материала нужно установить режим «Blend Mode» в «Alpha Blend».
Для более четких теней режим «Shadow Mode» можно поставить в «None».
Как видим, наш «shadow catcher» уже работает и если например используются источники света типа «Sun», не дающие выраженного светового пятна, больше никаких изменений не требуется.
- Однако для других типов источников света нужна доработка — сделаем черную область вокруг светового пятна прозрачной.
Для этого смешаем еще раз шейдер прозрачности «Transparent BSDF» с тем, что у нас уже есть, взяв в качестве маски обычный круг.
Добавим в нодовое дерево ноды «Texture Coordinate», «Mapping», «Gradient Texture» и «Invert»:
shift+a — Input — Texture Coordinate
shift+a — Vector — Mapping
shift+a — Texture — Gradient Texture
shift+a — color — Invert
и соединим их следующим образом. Переключим режим работы нода «Gradient Texture» в «Spherical». Изменяя значения Location и Scale в ноде «Mapping», подгоним размер и положение круга так, чтобы он соответствовал границам светового пятна.
Все, что попадает за пределы черного градиента мы сделаем прозрачным.
Выделим нод «Mix Shader» и сдублируем его (shift+d).
Соединим новый нод «Mix Shader» с уже построенным деревом и еще раз с нодом «Transparent BSDF», в качестве фактора смешивания используя полученный круг с градиентом.
Таким образом мы отсекли всю черноту вокруг светового пятна, оставив для рендера только тень.




