Часто бывает необходимо получить рендер какого-либо объекта с отбрасываемой им тенью на прозрачном фоне. Такая задача возникает если требуется реалистично встроить 3D-объект в фотографию или же при использовании полученного изображения в качестве спрайта в компьютерной игре.
В Blender нет специального шейдера, так называемого “Shadow catcher”, как в 3D Studio Max, который, оставаясь прозрачным, отображал бы тень. Однако добиться желаемого результата все же возможно.
Рассмотрим, как можно получить рендер тени на прозрачном фоне средствами Blender:
Для начала соберем простейшую сцену, в которую нужно включить собственно объект, который нужно отрендерить вместе с тенью, плоскость, на которую будет падать тень от этого объекта, небольшой и достаточно удаленный источник света (мешлайт), который дает четкую, хорошо различимую тень.
На плоскости, служащей основанием для тени, размещена модель ветрогенератора, которая освещается другой плоскостью с шейдером Emission, расположенной правее и выше модели. Вместо ветрогенератора можно использовать любую модель, например “Сюзанну”, или дефолтный куб.
Для удобства работы, все объекты распределим по слоям сцены. На первом слое сцены нужно оставить только плоскость-основание, на второй слой сцены нужно перенести ветрогенератор, а мешлайт поместить на третий слой сцены.
- Выделить ветрогенератор и мешлайт
- Нажать: m – 2 – Ввод
- Переключиться на второй слой сцены
- 2
- Выделить мешлайт
- m – 3 – Ввод
- Выделить все три слоя сцены, чтобы иметь доступ ко всем объектам.
Для того, чтобы получить нужный результат – ветрогенератор с тенью на прозрачном фоне, необходимо разбить общий рендер на 3 рендер-слоя:
- Слой с фоном (бекграундом) без ветрогенератора и без тени
- Слой с бекграундом и падающей на него тенью без ветрогенератора
- Слой с ветрогенератором без бекграунда
Создадим необходимые рендер-слои:
- В окне Properties во вкладке Render Layers в панели Scene
- Переименовать дефолтный рендер-слой в “Background”
- В подпанели Layer
- Scene
- Отмечены все три слоя сцены
- Layer
- Отметить только первый слой – на текущий рендер-слой попадут только объекты, расположенные на первом слое сцены т.е. только плоскость-основание.
- Exclude
- Отметить второй слой – отмеченный слой сцены с ветрогенератором будет исключен из просчета рендера в результате чего на плоскость-основание не будет падать его тень.
- Scene
- В подпанели Layer
- Нажатием на “+” создать второй рендер-слой и назвать его “Shadows”
- В подпанели Layer
- Scene
- Отмечены все три слоя сцены
- Layer
- Отметить только первый слой.
- Так как через Exclude на этот раз слой сцены с ветрогенератором не исключается, в результате получится рендер-слой с плоскостью-основанием и падающей на нее тенью.
- Scene
- В подпанели Layer
- Нажатием на “+” создать третий рендер-слой и назвать его “Objects”
- В панели Layer
- Scene
- Отмечены все три слоя сцены
- Layer
- Отметить только второй слой – на текущий рендер-слой будет отрендерен только ветрогенератор
- Scene
- В окне Propertites во вкладке Render в панели Film
- Установить галочку Transparent, чтобы ветрогенератор был отрендерен на прозрачном фоне
- В панели Layer
- Переименовать дефолтный рендер-слой в “Background”
Сформировав все нужные рендер-слои, для получения нужного результата осталось правильно соединить их в композитинге.
Чтобы видеть результат сразу, можно предварительно запустить рендер нажатием на клавишу f12.
- В главном меню переключиться в режим Compositing
- Отметить галочки
- Use Nodes
- Backdrop
- Добавить нод Composite (если он не был добавлен по умолчанию)
- shift + a – Output – Composite
- Добавить нод Viewer для просмотра. Соединяя выходы любого нода со входом Image нода Viewer можно выводить промежуточные результаты на фоне окна.
- shift + a – Output – Viewer
- Добавить три нода Render Layers – по одному на каждый созданный рендер-слой
- Добавить нод Color Mix
- Добавить нод Invert
- Добавить нод Set Alpha
- Таким образом получена тень от ветрогенератора на прозрачном фоне. Осталось совместить ее с самим ветрогенератором.
- Добавить нод Alpha Over
- Дерево нодов готово, осталось сохранить результат.
- Соединить выход Image нода Alpha Over со входом Image нода Composite
- В окне Propertites во вкладке Render в панели Output
- Выбрать формат сохраняемого файла с поддержкой прозрачности, например *.png.
- Включить поддержку прозрачности – RGBA
- Выбрать формат сохраняемого файла с поддержкой прозрачности, например *.png.
- Основное окно переключить в UV/Image Editor
- выбрать Render Result
- Сохранить готовое изображение
- Отметить галочки
Бонус: использование Shadow path
Если в сцене не используются мешлайты, а только стандартные источники освещения типа Lamp, можно немного облегчить процесс, сократив количество рендер-слоев и упростив дерево нодов композитинга.
- Для примера удалим из сцены мешлайт и поместим на его место источник света Sun
- shift + a – Lamp – Sun
- Отрегулировать его яркость, размеры и направление так, чтобы ветрогенератор давал хорошо заметную тень
- В окне Properties во вкладке Render Layers
- В главном меню переключиться в режим Compositing
- Откорректировать дерево нодов следующим образом:
- Удалить нод Render Layers (Shadows)
- Нод Render Layers (Background) переключить на рендер-слой All
- Удалить нод Divide
- Соединить выход Image нода Render Layers (All) со входом Color нода Invert
- Откорректировать дерево нодов следующим образом:
Таким образом получен нужный результат. Рендер-слоев меньше и дерево нодов проще, следовательно общий рендер будет проходить быстрее. Однако проход Shadow просчитывается только для стандартных источников освещения и не считается для мешлайтов, следовательно, если в сцене для освещения используются мешлайты, данный способ не даст нужного результата.