В этом уроке мы рассмотрим особенности, настройки, общие черты и различия между Depth и Mist: двумя Compositing Render Passes в Blender, которые предоставляют информацию о расстоянии до объектов или о глубине сцены на этапе постобработки.



Текстовая расшифровка видео

Всем привет! В этом уроке мы рассмотрим особенности, настройки, общие черты и различия между Depth и Mist: двумя Compositing Render Passes в Blender, которые предоставляют информацию о расстоянии до объектов или о глубине сцены на этапе постобработки.

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

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

Вкратце, разница между Depth и Mist заключается в том, что Depth возвращает реальные значения расстояния объектов от виртуальной камеры, тогда как Mist добавляет туман, начиная с определенного расстояния от камеры и усиливая его на заданную глубину, после которой всё становится белым.

Поэтому Depth больше подходит для задач, где необходимо использовать реальные значения расстояния, например при работе с нодами Defocus и Z-Combine.

Defocus позволяет сфокусироваться на элементах, находящихся на определенном расстоянии от камеры, размывая остальные элементы, то есть реализуя depth of field.

Z-Combine, в свою очередь, позволяет смешивать две сцены, определяя, какие пиксели показывать, а какие нет, на основе значений расстояния от камеры, сохраненных в полях Z или Depth каждой сцены или изображения.

Однако это не означает, что Depth нельзя использовать в других случаях: я сам использовал его в серии по Atmospheric Perspective, но там мне пришлось нормализовать информацию, возвращаемую Depth. Скоро мы увидим, что означает нормализация Depth и какие последствия она может иметь для данных.

Render Pass Depth выбран по умолчанию в разделе Passes вкладки View Layers в редакторе Properties; в этой вкладке Render Pass называется Z, тогда как в ноде Compositing Render Layers он называется Depth.

Минимальное значение расстояния, возвращаемое Depth, определяется значением Clip Start объекта Camera, потому что все объекты, расположенные ближе к камере, чем Clip Start, не рендерятся. Поэтому, если вывод Depth не нормализован, это минимальное значение, которое может вернуть Depth.

Максимальное значение расстояния, возвращаемое Depth, определяется значением Clip End объекта Camera, потому что все объекты, расположенные дальше этого значения, не рендерятся. Фон виртуальной вселенной считается находящимся на бесконечном расстоянии, поэтому он будет иметь максимальное значение в маске Depth.

Вы можете отображать точки Clip Start и Clip End в 3D-сцене, выбрав виртуальную камеру и активировав опцию Limits в разделе Viewport Display вкладки Data в редакторе Properties.

Так будет проще правильно настроить значение Clip End.

Mist, с другой стороны, возвращает изображение, которое становится постепенно белее по мере увеличения расстояния от Camera. Однако в этом случае начальная точка эффекта тумана определяется не Clip Start, а значением, которое мы можем задать самостоятельно, под названием Mist Start.

В отличие от Depth, который активен по умолчанию, Render Pass Mist необходимо активировать вручную в разделе Passes. Это нужно сделать до начала рендера, иначе информация не будет вычислена, и вам придется запускать рендер заново, чтобы использовать этот Pass.

После активации Render Pass Mist во вкладке World появится новый раздел Mist, где можно настроить Mist Start и другие параметры.

Есть еще одно различие между Mist и Depth: Mist не использует Clip End для определения расстояния, после которого все объекты становятся белыми. Вместо этого используется параметр Mist Depth. Таким образом, все объекты, расположенные на расстоянии Start + Depth, будут отображаться белыми.

Вы также можете отображать Mist Start и Mist Depth в 3D Viewport, просто активировав флажок Mist в разделе Viewport Display вкладки Data. Если у вас также активирована опция Limits, рекомендуется отключить её, потому что их отображения накладываются друг на друга.

Перед повторным рендером я устанавливаю значения Mist Start и Depth так, чтобы эффект совпадал со значениями Clip Start и Clip End.

В разделе Mist вкладки World есть еще один параметр: Falloff, который определяет, как реализуется туман на расстоянии. Режим по умолчанию — Quadratic, но также доступны Inverse Quadratic и Linear.

Quadratic реализует такой же переход, как и освещение, обеспечивая более плавный переход от 0 к 1. Linear реализует немного более резкий переход, чем Quadratic. Наконец, Inverse Quadratic очень быстро переходит от 0 к 1, показывая плотный туман даже для объектов переднего плана.

У Z-Depth такого параметра нет, потому что это не эффект, реализуемый по формуле; он возвращает реальные значения расстояний до объектов... можно сказать, что он всегда линейный, но такое уточнение не имеет большого смысла.

Как я уже упоминал, Z-Depth лучше подходит для получения информации о реальных расстояниях, тогда как Mist больше подходит для создания эффекта, от которого он получил свое название, поскольку позволяет настраивать характеристики по своему усмотрению.

Если сейчас выполнить рендер и изучить passes в окне Compositor, мы получим интересный результат из выхода Mist, тогда как маска, приходящая из Depth, будет, по крайней мере на первый взгляд, непригодной для использования.

Давайте теперь посмотрим, что означает «нормализация Depth» и почему в различных уроках часто используется нода Normalize.

Как уже упоминалось, значения, возвращаемые Z-Depth, находятся не в диапазоне от 0 до 1, а фактически указывают расстояния от виртуальной Camera. Поэтому это может быть полезно, например, если вы хотите применить эффект точно на определенном расстоянии от камеры.

Сохраняемые числа могут быть очень большими, поэтому поле Z-Depth хранит данные, используя больше памяти, чем стандартные 8 или 16 бит большинства форматов изображений, таких как JPG или PNG; я почти уверен, что фактически используется 32 бита.

Кроме того, в Backdrop все значения больше 1 обрезаются, или «clamped», до этого значения, и соответствующие пиксели отображаются белыми. Однако значения Z-Depth определяются Clip End, который обычно намного больше 1.

По этим причинам возвращаемые значения неправильно отображаются в Backdrop редактора Compositing, потому что в этой области все значения больше 1 отображаются как белые. Поэтому в большинстве случаев полученные изображения выглядят очень яркими и лишенными деталей...

... действительно, в сцене, которую я использовал, значение Clip Start равно 1, а Clip End равно 20000, поэтому Pass Depth выглядит полностью белым!

По этой причине часто используется нода Normalize из группы Utilities для преобразования значений в диапазон от 0 до 1. Однако здесь необходимо остановиться, потому что есть важное уточнение.

Нода Normalize не преобразует значения между Clip Start и Clip End в диапазон от 0 до 1. Вместо этого она использует минимальные и максимальные значения пикселей, присутствующие в обрабатываемом изображении.

Однако это не то изображение, которое мы видим в Backdrop, потому что, как уже упоминалось, канал Depth хранит гораздо больше данных, чем видно на экране.

Именно поэтому, если подключить ноду Normalize между выходом Depth и Viewer, элементы в нижней части рендера станут черными: потому что это точки, ближайшие к виртуальной камере, которые имеют самые темные значения в маске Depth и, следовательно, будут отображаться черными в нормализованной версии, хотя они явно находятся не на расстоянии Clip Start от Camera!

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

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

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

Значение Clipping End камеры установлено таким образом, чтобы рендерить переднюю грань самого дальнего бокса, размещенного в комнате, но не заднюю стену комнаты.

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

Нет объектов, расположенных рядом с Clip Start, который установлен на расстоянии 10 сантиметров от камеры: даже стены комнаты по краям кадра находятся дальше этого значения от камеры.

Если сейчас выполнить рендер и изучить ненормализованный Render Pass Depth, задняя стена будет полностью белой, потому что Depth Pass не видит дальше самого дальнего бокса и отображает всё остальное белым.

Однако черных областей нет, потому что, как уже упоминалось, рядом с Clip Start нет объектов.

Но если использовать ноду Normalize, в нижней части появится черная полоса, которую мы также видели в рендере предыдущей сцены: эта часть пола, очевидно, находится ближе всего к камере.

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

Важно понимать, как маска Depth изменяется при использовании Normalize.

Эту ноду не следует использовать с Mist, а её применение с Depth также нужно тщательно обдумывать: она полезна для создания масок специальных эффектов, таких как упомянутая Atmospheric Perspective, тогда как в других случаях её использовать не следует.

Итак, вы можете спросить, существует ли способ преобразовать значения Clip Start и Clip End в диапазон от 0 до 1, чтобы видеть маску Depth в Backdrop...

... да, такой способ есть: добавьте ноду Map Range из группы Utilities в Compositor, затем установите значения From Min и From Max равными значениям Clip Start и Clip End камеры.

Вы получите маску, похожую на Pass Mist, но, конечно, потеряете реальные значения глубины.

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

Mist, действительно, также реализует Anti-Aliasing, который не вычисляется в Z-Depth.

В частности, значение Z-Depth использует только один sample, поэтому его можно без проблем использовать, когда не применяются такие эффекты, как Motion Blur или Depth of Field, то есть в случаях, когда смешивание значений глубины не требуется. Когда же смешивание значений глубины необходимо, более подходящим является использование Mist.

И наконец, несколько слов о настройках Color Management рендера и о том, как маски Z-Depth и Mist отображаются в Backdrop.

В зависимости от режима, выбранного для параметра View Transform, результаты, отображаемые на экране для Mist и Depth, как нормализованных, так и ненормализованных, могут сильно различаться.

Однако эти преобразования должны влиять только на отображение данных в Backdrop, поэтому они не должны изменять их реальные значения.

Ну что ж, на этом всё для этого урока! Надеюсь, он был полезен! До скорой встречи!

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


РАСШИРЕННАЯ ИНФОРМАЦИЯ О ПОЛИТИКЕ КОНФИДЕНЦИАЛЬНОСТИ И ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE