Объёмы (volumes)

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

  • Дым, огонь или облака настраиваются с использованием объёмного объекта или симуляции флюида, используя только шейдер для объёма.

  • Также для создания форм можно использовать меши, удаляя шейдер поверхности «по умолчанию» и используя шейдер объёма, в котором форма меша определяет границы объёма, а текстуры – плотность объёма.

  • Туман создаётся с помощью шейдера объёма для мира или с помощью большого меш-объекта, охватывающего сцену.

  • Поглощение в стекле симулируется путём объединения шейдера поверхности стекла с преломлением и шейдера объёмного поглощения для внутренней части объекта.

Шейдинг (shading)

Принципиальный объём (principled volume)

Principled Volume – физически корректный шейдер объёма, который можно использовать для создания широкого спектра объёмных материалов. Он поддерживает рассеивание, поглощение и излучение в одной простой в использовании ноде. Огонь можно визуализировать с помощью «blackbody emission».

../../../_images/render_materials_components_volume_principled.jpg

Дым и огонь визуализированы с помощью шейдера Principled Volume.

Компоненты объёма

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

  • Шейдер «поглощение объёма» будет поглощать часть света, проходящего через объём. Его можно использовать для шейдинга, например, чёрного дыма или цветных стеклянных объектов, или смешивать с нодой «рассеивания объёма». Эта нода похожа на «прозрачный BSDF», она блокирует часть света и позволяет остальному свету проходить напрямую.

  • Шейдер «рассеивание объёма» позволяет свету рассеиваться в разных направлениях, как если бы он наталкивался на частицы в объёме. Анизотропия определяет преимущественное направление рассеивания света. Значение 0 даст равномерное рассеивание по всем направлениям (то есть, что-то похожее на ноду «диффузный BSDF»), отрицательные значения заставят свет рассеиваться преимущественно назад, а положительные - вперёд. Он может использоваться для шейдинга, например, белого дыма или облаков.

  • Излучение будет испускать свет из объёма, например, для огня.

../../../_images/render_materials_components_volume_node.jpg

Объёмное поглощение, рассеивание и излучение

Атрибуты (attributes)

При рендеринге дыма и огня атрибуты объёма используются для определения формы и шейдинга объёма. Шейдер Principled Volume будет использовать их по умолчанию, в то время как пользовательские шейдеры объёма могут использовать ноду «Attribute» для получения таких атрибутов, как плотность, цвет и температура.

Плотность (density)

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

В реальном мире объёмы состоят из частиц, более высокая плотность означает, что на единицу объёма приходится больше частиц. Большая плотность частиц означает, что у света больше шансов с ними столкнуться и поглотиться или рассеяться, не пройдя сквозь.

Объёмы-меши (mesh volumes)

Меши, используемые для визуализации объёма должны быть замкнутыми и развёртываемыми. Это значит, что в них не должно быть дырок. Каждое ребро должно соединять ровно две грани, так, чтобы не образовывалось дырок или Т-образных соединений граней, когда с ребром соединено три грани или более.

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

Те же самые правила справедливы для корректной визуализации преломления света в стекле.

Мировой объём (world volume)

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

В настоящее время он наиболее полезен для визуализации ночного времени или других тёмных сцен, поскольку шейдер поверхности мира или лампы-солнца не будет работать при использовании шейдера объёма. Так происходит потому, что фон окружающей среды предполагается расположенным бесконечно далеко, что достаточно точно, например, для моделирования Солнца. Однако для моделирования таких эффектов, как туман или атмосферное рассеивание, предположение, что объём заполняет всё пространство, не очень хорошее, поскольку большая часть расстояния между Солнцем и Землёй - это пустое пространство. Для таких эффектов лучше создать объект объёма, окружающий сцену. Размер этого объекта будет определять, сколько света рассеивается или поглощается.

Многократное рассеивание (multiple scattering)

Real-world effects such as scattering in clouds or subsurface scattering require many scattering bounces. However, unbiased rendering of such effects can be noisy, so by default the number of bounces is zero in Cycles, and no support is available in Eevee. The effect you get when rendering with zero volume bounces is what is known as «single scattering», the effect from more bounces is «multiple scattering».

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

Для таких материалов, как облака или дым, которые не имеют чётко определённой поверхности, требуется объёмный рендеринг. Лучше всего они будут выглядеть при большом количестве рассеивающих отскоков, но на практике может потребоваться ограничить их количество, чтобы сохранить приемлемое время рендеринга.