Поиск по этому блогу

понедельник, 9 апреля 2012 г.

Глубина резкости (DoF) в Blender

dof blender Глубина резкости может дать красивый эффект, добавив, как эстетический интерес к изображению, так и служить целью привлечения внимания зрителя к какому-либо объекту. Но получить DoF (глубину резкости) используя ноды композиции Блендера может быть сложно, так как есть несколько вещей, которые надо знать о том, как ноды расфокусировки работают, и какие ограничения они имеют. В этом примере показаны некоторые исследования, и надеюсь, они будут полезными для тех, кто в этой теме новичок. 

Основы:

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

defocus node

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

  • Bokeh Type: Позволяет пользователю установить форму отверстия использующуюся для создания эффект боке. Это позволяет имитировать эффект, как лепестки диафрагмы камеры будут влиять на форму размытия боке. "Angle" (Угол) позволяют изменять форму. 
  • Gamma correction: гамма-коррекция изображения перед его размывания, вообще отключена, если у вас включено управление цветом в настройках рендеринга, хотя оно может иногда дать эффект осветления эффекта боке, что может быть нежелательно. 
  • f-stop: Включением "Use Z-Buffer", устанавливается степень прикладного размытия. Каждое деление на два значения по умолчанию будет давать в два раза больше размытия. 
  • BThreshhold: Коррекция артефактов вокруг объектов в фокусе на далеком (или отсутствующем) плане. В общем, это можно оставить в единице. Также, обратите внимание на советы: в дальнейшем всегда где это возможно вы должны иметь физический фон. 
  • Preview: Для получения быстрого (но шумного) результата, чтобы увидеть, как выглядит размер эффекта размытия, включите ее. Удобно при работе с большим изображением, где Вы все еще работаете с композицией нода. Образы довольно понятны.
  • Use Z-Buffer: Включите ее, чтобы использовать камеру с настройками глубины резкости. Не забудьте подключить z-вход непосредственно в "defocus node". Выключите ее, чтобы использовать любую маску или установить степень размытия вручную с помощью входного значения. 
  • Z-Scale: С включенным "Use Z-Buffer" умножается количество размытости изображения, вызванную входом "Z". Если установлено значение 1, и значение со входа 1.0, даст пятно радиусом 1px. Поднимите это значение для большего эффекта размытия. 
В зависимости от того, как мы хотим достичь нашей глубины резкости, существует три различных источника, которые мы можем использовать для последнего входа. 
  1. Z-Buffer Method: Это более простой метод, в котором мы подключаем Z-Buffer вывода из нашей render нода прямо на вход Z нода defocus. Будет использоваться параметры глубины резкости камеры для автоматического создания глубины резкости. Такой подход имеет ряд преимуществ:
  • Это просто
  • Это позволяет легко устанавливать фокусное расстояние при анимации (например, чтобы держать движущийся объект в фокусе).
Но это также создает некоторые проблемы:
  • Передний и задний план управляются независимо друг от друга
  • Появляются артефакты вокруг объектов переднего плана. Обратите внимание на острые углы и артефакты вне фокуса основной области в нижней левой части анимированной GIF-картинки ниже.

размытие blender

blender dof

Первая проблема легко решается, последняя сложнее, но обе требуют разделения на части размытия переднего плана и отдельно заднего фона, и настраивания входного значение "Z"-входа defocus node. Я буду ссылаться на это как на метод на основе "маски". По существу,  мы и будем создавать маску ввода для defocus нода, и будем показывать, какие части мы хотим размыть, а какие должны быть в фокусе.
2. Mask Method: В этом методе мы фокусировку переднего плана и размытость заднего фона  определяем по отдельности. Во-первых, мы размываем фон:

defocus blender

"Map To" нод имеет Z-Buffer и его маску можно использовать для расфокусировки. Используя смещение мы можем установить расстояние от камеры (с помощью отрицательного значения), значением этой настройки мы можем контролировать скорость спада. Вот ниже результат карты:

blender МАСКА

А вот его эффект размытия при использовании в качестве входного нода.

blender depth

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

blender defocus

Map нод работает так же, как и прежде, на переднем плане изолируется часть изображения (обратите внимание, что на этот раз масштаб имеет отрицательное значение, в результате чего фон черный, а на переднем плане белый). Затем "ColorRamp" нод используется для выравнивания значений глубины (вещественное значение, нечто среднее между 0 и 1). Это связано с тем, что применение глубокого размытия работает правильно, но у него есть побочный эффект, такой, что на переднем плане размытие будет немного более равномерное, чем на заднем плане. Вы всегда можете компенсировать более высокое значение размером defocus нодом, если вам это понадобится. Маска затем получается расширенной и размытой (так, что некоторые пиксели по краям объектов переднего плана станут также расфокусированны, показавшиеся артефакты см. выше). В результате маска выглядит следующим образом:

маска blender

Эти ноды будут использоваться в качестве "Z"-входа для второго нода Defocus, который выполняет размытие уже размытого изображение. В результате:

blender dof

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

blender node defocus

3. Layer Method: Как и предыдущей метод маски, мы начнем с размытия фона таким же образом. Но на этот раз наш передний план может быть удобно разделен на еще один слой. В связи с этим мы можем достаточно легко сделать на переднем плане размытие отдельно и просто добавить его сверху. Таким образом, мы можем применить единую расфокусировку на слое переднего плана (без входа "Z", просто задать значение), и даже не придется беспокоиться об артефактах на границах объектов:

blender размытие

Задний фон (сглаживание происходит после всех других нодов): 

blender background

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

blender маска

Это некоторые мысли по поводу использования глубинв резкости (DoF) в блендере. Некоторые заключительные подсказки:
  • Включите FSAA! Это действительно важно для получения хорошего DoF, поскольку применение defocus нода к anti-aliased изображениям может привести ко всем видам окаймления и артефактам. Кроме того отключение Anti-Aliasing полностью увеличивает размер в двое.
  • Везде, где возможно имейте некоторый физический фон к своему целому изображению, вместо того, чтобы положиться на фон неба по умолчанию, поскольку чрезвычайные различия в Z-расстоянии - частые причины артефактов от defocus нода.
  • Вы можете также регулярного использовать ноды для размытия глубины резкости, используя метод маски или слоя, описанные выше. Эти ноды быстрее, но не дают такие хорошие эффекты боке или широких параметров настроек.
Добавим приятный дополнительный штрих к последним установкам. Сделаем небольшое искажение глубины резкости поля вокруг объекта в фокусе на переднем плане. Это далеко не артефакт компьютерной графики, этот эффект виден, если вы держите палец перед глазами и смотреть сквозь него на что-то за его пределами. Неплохой способ достижения этого эффекта в блендер, с помощью обычного перехода из слоя переднего плана и перемещением нода

фокусировка

blender искажение

1 комментарий: