Рендер тени на прозрачном фоне

Часто бывает необходимо получить рендер какого-либо объекта с отбрасываемой им тенью на прозрачном фоне. Такая задача возникает если требуется реалистично встроить 3D-объект в фотографию или же при использовании полученного изображения в качестве спрайта в компьютерной игре.

В Blender нет специального шейдера, так называемого «Shadow catcher», как в 3D Studio Max, который, оставаясь прозрачным, отображал бы тень. Однако добиться желаемого результата все же возможно.

Рассмотрим, как можно получить рендер тени на прозрачном фоне средствами Blender:

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

На плоскости, служащей основанием для тени, размещена модель ветрогенератора, которая освещается другой плоскостью с шейдером Emission, расположенной правее и выше модели. Вместо ветрогенератора можно использовать любую модель, например «Сюзанну», или дефолтный куб.

Для удобства работы, все объекты распределим по слоям сцены. На первом слое сцены нужно оставить только плоскость-основание, на второй слой сцены нужно перенести ветрогенератор, а мешлайт поместить на третий слой сцены.

  1. Выделить ветрогенератор и мешлайт
    1. Нажать: m — 2 — Ввод
  2. Переключиться на второй слой сцены
    1. 2
  3. Выделить мешлайт
    1. m — 3 — Ввод
  4. Выделить все три слоя сцены, чтобы иметь доступ ко всем объектам.

Для того, чтобы получить нужный результат — ветрогенератор с тенью на прозрачном фоне, необходимо разбить общий рендер на 3 рендер-слоя:

  1. Слой с фоном (бекграундом) без ветрогенератора и без тени
  2. Слой с бекграундом и падающей на него тенью без ветрогенератора
  3. Слой с ветрогенератором без бекграунда

Создадим необходимые рендер-слои:

  1. В окне Properties во вкладке Render Layers в панели Scene
    1. Переименовать дефолтный рендер-слой в «Background»
      1. В подпанели Layer
        1. Scene
          1. Отмечены все три слоя сцены
        2. Layer
          1. Отметить только первый слой — на текущий рендер-слой попадут только объекты, расположенные на первом слое сцены т.е. только плоскость-основание.
        3. Exclude
          1. Отметить второй слой — отмеченный слой сцены с ветрогенератором будет исключен из просчета рендера в результате чего на плоскость-основание не будет падать его тень.

            Рендер-слой «Background»
    2. Нажатием на «+» создать второй рендер-слой и назвать его «Shadows»
      1. В подпанели Layer
        1. Scene
          1. Отмечены все три слоя сцены
        2. Layer
          1. Отметить только первый слой.
        3. Так как через Exclude на этот раз слой сцены с ветрогенератором не исключается, в результате получится рендер-слой с плоскостью-основанием и падающей на нее тенью.

          Рендер-слой «Shadows»
    3. Нажатием на «+» создать третий рендер-слой и назвать его «Objects»
      1. В панели Layer
        1. Scene
          1. Отмечены все три слоя сцены
        2. Layer
          1. Отметить только второй слой — на текущий рендер-слой будет отрендерен только ветрогенератор
      2. В окне Propertites во вкладке Render в панели Film
        1. Установить галочку Transparent, чтобы ветрогенератор был отрендерен на прозрачном фоне

          Рендер-слой «Objects»

Сформировав все нужные рендер-слои, для получения нужного результата осталось правильно соединить их в композитинге.

Чтобы видеть результат сразу, можно предварительно запустить рендер нажатием на клавишу f12.

  1. В главном меню переключиться в режим Compositing
    1. Отметить галочки
      1. Use Nodes
      2. Backdrop
    2. Добавить нод Composite (если он не был добавлен по умолчанию)
      1. shift + a — Output — Composite
    3. Добавить нод Viewer для просмотра. Соединяя выходы любого нода со входом Image нода Viewer можно выводить промежуточные результаты на фоне окна.
      1. shift + a — Output — Viewer
    4. Добавить три нода Render Layers — по одному на каждый созданный рендер-слой
      1. shift + a — Input — Render Layers
        1. В ноде указать: Background
      2. shift + a — Input — Render Layers
        1. В ноде указать: Shadows
      3. shift + a — Input — Render Layers
        1. В ноде указать: Objects
    5. Добавить нод Color Mix
      1. shift + a — Color — Mix
        1. Переключить его в режим Divide
        2. Соединить выход Image нода Render Layers (Background) cо вторым входом Image нода Divide
        3. Соединить выход Image нода Render Layers (Shadows) c первым входом Image нода Divide
    6. Добавить нод Invert
      1. shift + a — Color — Invert
      2. Соединить выход Image нода Divide со входом Color нода Invert
    7. Добавить нод Set Alpha
      1. shift + a — Converter — Set Alpha
      2. Соединить выход Color нода Invert со входом Alpha нода Set Alpha
    8. Таким образом получена тень от ветрогенератора на прозрачном фоне. Осталось совместить ее с самим ветрогенератором.
    9. Добавить нод Alpha Over
      1. shift + a — Color — Alpha Over
      2. Соединить выход Image нода Set Alpha с первым входом Image нода Alpha Over
      3. Соединить выход Image нода Render Layers (Objects) со вторым входом Image нода Alpha Over
      4. Соединить выход Alpha нода Render Layers (Objects) со входом Factor нода Alpha Over
    10. Дерево нодов готово, осталось сохранить результат.
      1. Соединить выход Image нода Alpha Over со входом Image нода Composite
      2. В окне Propertites во вкладке Render в панели Output
        1. Выбрать формат сохраняемого файла с поддержкой прозрачности, например *.png.
          1. Включить поддержку прозрачности — RGBA
      3. Основное окно переключить в UV/Image Editor
        1. выбрать Render Result
      4. Сохранить готовое изображение
        1. f3

Бонус: использование Shadow path

Если в сцене не используются мешлайты, а только стандартные источники освещения типа Lamp, можно немного облегчить процесс, сократив количество рендер-слоев и упростив дерево нодов композитинга.

  1. Для примера удалим из сцены мешлайт и поместим на его место источник света Sun
    1. shift + a — Lamp — Sun
    2. Отрегулировать его яркость, размеры и направление так, чтобы ветрогенератор давал хорошо заметную тень
  2. В окне Properties во вкладке Render Layers
    1. Удалить два первых рендер-слоя (Background и Shadows)
    2. Рендер-слой Objects менять не нужно
    3. Нажатием на «+» создать рендер-слой и назвать его «All»
      1. В подпанели Layer
        1. Scene
          1. Отмечены все три слоя сцены
        2. Layer
          1. Отметить все слои сцены
      2. В панели Passes
        1. Установить галочку Shadow
  3. В главном меню переключиться в режим Compositing
    1. Откорректировать дерево нодов следующим образом:
      1. Удалить нод Render Layers (Shadows)
      2. Нод Render Layers (Background) переключить на рендер-слой All
      3. Удалить нод Divide
      4. Соединить выход Image нода Render Layers (All) со входом Color нода Invert

Таким образом получен нужный результат. Рендер-слоев меньше и дерево нодов проще, следовательно общий рендер будет проходить быстрее. Однако проход Shadow просчитывается только для стандартных источников освещения и не считается для мешлайтов, следовательно, если в сцене для освещения используются мешлайты, данный способ не даст нужного результата.