Бесплатные 3D Модели

Глубина полей резкости в BLENDER

Автор: Ben Simonds

Глубина полей резкости — это замечательный эффект, добавляющий в картину эстетический интереc и служит повествовательной цели, указывая зрителю на центр внимания. Но, чтобы получить правильный эффект DoF при помощи нод композитинга в Blender, можно использовать некоторые приёмы. Существует несколько вещей, которые вы должны знать, например, как работают ноды расфокусировки, а также о некоторых ограничениях, которые также стоит учитывать. В этой статье я собрал собственные исследования и, надеюсь, они будут полезны для вас. Я также затрону некоторые вещи, решения которых я пока не нашёл, поэтому если кто-то может что-то подсказать, то я всегда рад выслушать ваши предложения.

Основы

В реальной фотографии глубина полей резкости — это такой эффект, когда объекты, расположенные далеко от фокусной плоскости линз камеры размыты. Мы можем всё это прочитать в википедии (Глубина резко изображаемого пространства, Боке), поэтому я не буду углубляться в описание оптики в рамках данного урока. В целях данной статьи мы остановимся на двух целях: добиться результата, который сравним с глубиной полей резкости в реальной фотографии и избежать артефактов на статичных рендерах и анимации. После всего выше сказанного, вот нода расфокусировки (defocus):

Эта нода имеет два входа: изображение, которое должно быть размыто (жёлтый вход image) и определённый способ указания насколько и какую часть изображения нужно размыть (серый нод обозначенный Z). Настройки для ноды расфокусировки будут следующие:

    • Bokeh Type: Позволяет пользователям установить форму апертуры, используемой для генерации эффекта Боке. Он позволяет имитировать эффект при котором призма камеры примет форму размытия Боке. «Угол» позволяет вращать используемую форму.
    • Gamma correction: Гамма-коррекция изображения перед размытием, обычно можно пропустить, если у вас в настройках рендера включён colour management, тем не менее иногда он может давать интересный эффект яркости Боке, который может быть вполне приемлемым.
    • f-stop: С включённым «Use Z-Buffer» устанавливает значение применённого размытия. Каждое уменьшение вдвое увеличивает в два раза значение размытия по умолчанию.
    • BThreshold: Исправляет артефакты вокруг объектов, находящихся в фокусе на фоне очень дальнего заднего плана. Обычно его значение можно оставить на единице. Также стоит отметить на будущее: по возможности лучше иметь физический фон.
    • Preview: Для того чтобы быстро сделать предпросмотр (при этом с большим шумом), чтобы увидеть насколько правильно выглядит эффект размытия. Для финального рендера его нужно отключать. Полезно при работе с большими изображениями.
    • Use Z-Buffer: Можете включить эту опцию, чтобы использовать настройки глубины резкости камеры для расфокусировки. Не забудьте подключить z-pass напрямую от ноды рендера к ноде defocus. Для того чтобы использовать любой тип маски или установить значения размытия вручную, лучше отключить эту опцию.
  • Z-Scale: Вместе с отключённым «Use Z-Buffer» он умножает значение размытия обусловленый Z входом. Если стоит 1, значение 1.0 на входе даст размытие радиусом в 1 пиксель. Увеличивайте для большего размытия.

В зависимости от того, как мы хотим достичь нашего эффекта глубины резкости, существует три различных источника, которые мы можем использовать для дальнейшего входа.

  • Метод Z-Buffer: Это самый прямой метод, при котором мы подключаем выход z-buffer нашей ноды рендера, напрямую ко входу Z нашей ноды расфокусировки. Затем он будет использовать настройки Depth of Field камеры (вы можете установить это вместо использования точных настроек или следуя определённому объекту в сцене) для автоматической генерации эффекта глубины полей резкости. Этот метод имеет несколько преимущетств:
    • Он простой.
    • Он позволяет легко установить фокусное расстояние и анимировать его (например, при движении объекта в фокусе).

Но он также имеет и некоторые проблемы:

  • Значение размытия переднего и заднего плана нельзя регулировать самостоятельно.
  • Артефакты на объектах переднего плана, когда границы объекта в фокусе, в результате получаются резкие края на размытых объектах. Обратите внимание на резкие края и артефакты объектов вне фокуса снизу слева на анимированной гифке ниже.

Первая проблема решается проще, следующая чуть сложнее, но обе требуют разделения на составляющие переднего и заднего плана размытия и использование отдельных значений для Z входа ноды расфокусировки. Я предпочитаю метод на основе «маски», всё что нужно создать - это маску входа для ноды расфокусировки, показывающую части, которые мы должны размыть, и те которые должны быть в фокусе.

Метод маскирования

  • В этом методе мы разделяем передний и задний план размытия и применяем воздействие их на расфокусировку отдельно для каждого. Сначала мы размываем задний план:

Нода map to берёт z-buffer подключает его к маске, которую мы можем использовать для расфокусировки. Используя смещение (offset), мы можем установить расстояние от камеры (используя отрицательное значение), при помощи настроек size, мы можем управлять степенью затухания. Ниже показан результат карты для ноды ниже:

А вот эффект, который используется в качестве входа для ноды размытия (можете не ждать пока подгрузится анимация… это не анимация).

Затем мы размываем передний план, используя более сложную настройку нод, которая также исправляет артефакты связанные с передними объектами.

Карта нод работает по тому же принципу что и раньше, изоляция частей на переднем плане изображения (помните, что на этот раз значение scale отрицательное, когда передний план тёмный, а задний белый). Затем нода ColourRamp используется для того чтобы слить значения глубины из «плавающих» значений к чему-то вроде от 0 до 1. Это потому что размытие работает лучше если применяется позже, но это также имеет и обратный эффект, когда передний план становится размытым чуть больше чем задний план. Но учитывая, что диапазон всё же небольшой, вы запросто можете с этим справиться. Вы всегда можете это компенсировать, повысив значения size ноды расфокусировки, если есть необходимость. Маска при этом расширится и станет более размытой (таким образом некоторые пиксели по краям объектов на переднем плане также уйдут из фокуса, устранив артефакты, описанные выше). Получившаяся маска будет выглядеть примерно так (я обвёл маску, которая была до того как я её расширил/размыл, чтобы показать, что было добавлено):

Эта нода будет потом использована в качестве Z входа для второй ноды расфокусировки, которая будет создавать размытие на переднем плане поверх существующего размытого заднего плана. Итог:

Как вы видите в результате мы не имеем артефактов с данными настройками. Но есть несколько вещей над которыми стоит подумать:

  • Этот метод может не справиться с большими значениями размытия переднего плана для нод расширения/размытия.
  • С данным методом намного сложнее делать анимацию, нежели при помощи стандартного метода, так как теперь области которые должны быть в фокусе управляются картой, вместо того чтобы взять настройки камеры. Хотя, если вам нужно будет анимировать расстояние DoF, то для этих значений могут быть созданы ключи или подключены драйверы с ограничителями, чтобы обеспечить нужную функциональность.
  • Таким методом рендеринг становится медленнее, так как для двух нод расфокусировки нужен процесс обработки для композитинга на каждый кадр.

Третий метод размытия DOF более простой в создании, но займёт немного больше времени в настройке и рендере. Он также не подойдёт для сцен, где переходы между передним и задним планом более неразрывные. Так как мы делим картинку на слои переднего плана, среднего плана, который в фокусе и заднего плана и применяем расфокусировку отдельно. Хорошая новость в том, что он работает с большинством типов снимков. Для примера, который я показывал выше этот метод не приемлем, поэтому я возьму другой пример:

Метод слоёв

Как и в методе маскирования описанном ранее, мы начнём с размытия заднего плана аналогичным образом. Но в этот раз, наш передний план может быть удобным образом полностью отделён в другой слой. Благодаря этому мы можем спокойно добавить размытие отдельно и просто наложить его поверх картинки. Этим способом мы можем применить равномерное размытие на передний слой (без z входа, просто устанавливаем значение), и нам не нужно беспокоиться по поводу артефактов краёв объектов.


Задний план (без антиалайсинга, он применяется после всех нод при помощи FSAA):


  • Передний план:

В любом случае, таковы мои мысли по поводу создания глубины резкости в Blender. Вот несколько советов:

  • Включите FSAA! Это по-настоящему важный параметр для получения качественного DoF, так как применение ноды defocus к изображению с антиалайсингом может в результате дать различные типы окантовки и артефактов. Помимо этого, отключите полностью антиалайсинг, отрендерите с двойным разрешением и уменьшите.
  • По возможности желательно иметь физический задний план для всего изображения, чем создавать стандартный sky background, так как существует большая разница в расстоянии глубины Z, чтобы часто создаёт артефакты из ноды расфокусировки.
  • Вы также можете использовать стандартную ноду размытия для глубины резкости, используя маску или метод слоёв, описанный выше. Эти ноды обычно быстрее, но не дают хорошего эффекта Боке или большого количества настроек для экспериментов.

Некоторые дополнительные ограничения:

  • Как говорилось ранее, существует несколько решений для артефактов при создании стандартного DoF, поэтому отчасти вы всегда можете их побороть.
  • Боке в реальных физических камерах намного сложнее, чем возможности, которые нам позволяют ноды расфокусировки, и на него воздействуют всевозможные факторы. Здесь взаимодействуют различные аспекты снимка, такие как виньетирование и искажение линз, что мы имитируем при помощи композа, остальные сложные или даже совсем невозможные в воссоздании при пост обработке. Одна из причин это в том, что реальная глубина резкости основывается на точках поверхности окружающей геометрии, поэтому этот эффект никогда не сможет полностью повторить реальный.

Дополнение про искажение DoF

Мой друг @Laxy внёс маленькое дополнение, которое касается лёгкого искажения, вносимого глубиной полей в областях, находящихся вне фокуса на переднем плане. Это не артефакт компьютерной графики, это реальный эффект, который можно наблюдать, если к примеру, держать палец перед глазами и смотреть на что-то позади него. Когда палец оказывается не в фокусе, вы можете заметить лёгкие искажения объектов в фокусе, находящихся позади него. Я придумал неплохой способ добиться этого эффекта, используя проход normal слоя переднего плана и ноды displace:

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

Урок был взят и переведён с сайта: bensimonds.com.