Уменьшение шума (reducing noise)

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

Трассировка путей (path tracing)

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

../../../_images/render_cycles_render-settings_light-paths_rays.svg

We do the inverse of what reality does, tracing light rays from the camera into the scene and onto lights, rather than from the light sources into the scene and then into the camera. This has the advantage that we do not waste light rays that will not end up in the camera, but also means that it is difficult to find some light paths that may contribute a lot. Light rays will be sent either according to the surface BSDF, or in the direction of known light sources.

См. также

Более подробную информацию смотрите в документации по световым путям и сэмплированию.

Источник шума (the source of the noise)

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

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

../../../_images/render_cycles_optimizations_reducing-noise_fisheye-reference.jpg

Сцена.

../../../_images/render_cycles_optimizations_reducing-noise_fisheye.jpg

Освещённость в точке шейдинга.

../../../_images/render_cycles_optimizations_reducing-noise_fisheye-hotspot.jpg

Выявленные основные моменты.

Лампа является известным источником освещения, так что её местоположение уже известно, но вызываемый ей глянцевый блик(и) – это совсем другое дело. Лучшее, что мы можем сделать с трассировкой пути, – это распределить световые лучи случайным образом по полусфере, надеясь найти все важные яркие пятна. Если для некоторых пикселей мы пропускаем какое-то яркое пятно, но находим его для другого, это приводит к шуму. Чем больше сэмплов мы берём, тем выше вероятность того, что мы охватываем все важные источники света.

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

../../../_images/render_cycles_optimizations_reducing-noise_fisheye-blur-reference.jpg

Использование «фильтра глянца» и эффекта «спад света».

../../../_images/render_cycles_optimizations_reducing-noise_fisheye-blur.jpg

Освещённость в точке шейдинга.

../../../_images/render_cycles_optimizations_reducing-noise_fisheye-blur-hotspot.jpg

Выявленные основные моменты.

Отскоки (bounces)

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

../../../_images/render_cycles_optimizations_reducing-noise_0bounce.jpg

Без отскоков.

../../../_images/render_cycles_optimizations_reducing-noise_2bounce.jpg

Два отскока на максимуме.

../../../_images/render_cycles_optimizations_reducing-noise_4bounce.jpg

Четыре отскока на максимуме.

Также важно использовать цвета шейдера, которые не имеют компоненты со значением 1.0 или близкими к нему; постарайтесь сохранить максимальное значение 0.8 или меньше и сделайте свои источники света ярче. В действительности, поверхности редко полностью отражают весь свет, но есть, конечно, исключения; как правило, через стекло проходит больше света, поэтому для него нужно больше отскоков. Высокие значения для цветовых компонентов, как правило, вносят шум, поскольку при отскоках от каждой поерхности интенсивность света уменьшается не сильно.

Каустика и фильтр глянца (caustics and filter glossy)

Каустика – это известный источник шума, вызывающий «светлячки». Они возникают из-за того, что рендереру сложно найти зеркальные блики, видимые через мягкое глянцевое или диффузное отражение. Существует опция «без каустики», которая полностью отключает глянец за диффузным отражением. Многие рендереры обычно отключают каустику по умолчанию.

../../../_images/render_cycles_optimizations_reducing-noise_reference.jpg

Настройки «по умолчанию».

../../../_images/render_cycles_optimizations_reducing-noise_no-caustics.jpg

«Каустика» отключена.

../../../_images/render_cycles_optimizations_reducing-noise_filter-glossy.jpg

«Фильтр глянца» больше нуля.

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

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

Спад света (light falloff)

В действительности свет в вакууме всегда будет падать со скоростью 1/(расстояние^2). Однако, когда расстояние стремится к нулю, это значение стремится к бесконечности, и мы можем получить очень яркие пятна на изображении. В основном это проблема для непрямого освещения, у которого вероятность попадания в небольшое, но очень яркое пятно довольно низка и оно случается редко. Это типичный пример возникновения светлячков.

../../../_images/render_cycles_optimizations_reducing-noise_falloff-hard.jpg

Сильный спад.

../../../_images/render_cycles_optimizations_reducing-noise_falloff-soft.jpg

Мягкий спад.

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

Сэмплирование множественной значимости (multiple importance sampling)

Материалы с шейдерами излучения можно настроить на использование «сэмплирования множественной значимости» (настройки материала). Это означает, что они будут получать лучи, направленные прямо на них, а не попадать туда на основе лучей, случайно отражающихся повсюду. Для очень ярких мешей-источников света это может значительно снизить шум. Однако, если излучение не является особенно ярким, оно будет отбирать сэмплы от других ярких источников света, для которых важно, чтобы их нашли таким образом.

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

../../../_images/render_cycles_optimizations_reducing-noise_sample-lamp.jpg

«Множественная значимость» отключена.

../../../_images/render_cycles_optimizations_reducing-noise_no-sample-lamp.jpg

«Множественная значимость» включена.

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

Стекло и прозрачные тени (glass and transparent shadows)

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

../../../_images/render_cycles_optimizations_reducing-noise_glass-group.png

Оптимизированный шейдер стекла.

Выше мы видим структуру нод, используемую для приёма с прозрачностью стекла; слева рендер имеет тёмные тени из-за отсутствия каустики, а справа – рендер с использованием приёма.

../../../_images/render_cycles_optimizations_reducing-noise_glass-too-much-shadow.jpg

Стандартный «BSDF стекла».

../../../_images/render_cycles_optimizations_reducing-noise_glass-trick.jpg

Оптимизированный шейдер стекла.

Световые порталы (light portals)

При рендеринге дневной сцены в помещении, где большая часть света поступает через оконные и/или дверные проёмы – интегратору сложно находить к ним путь. Чтобы это исправить, используйте «световые порталы». Затем вам нужно будет изменить их форму, чтобы они соответствовали форме проёмов, которые вы пытаетесь заполнить.

../../../_images/render_cycles_light-settings_portals2.jpg
../../../_images/render_cycles_light-settings_portals.jpg

Шумоподавление (denoising)

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

Ниже представлен пример рендеринга от The Pixelary.

../../../_images/render_layers_denoising_example1.jpg

Пример рендера до шумоподавления.

../../../_images/render_layers_denoising_example2.jpg

Пример рендера после шумоподавления.

Подавление светлячков (clamp fireflies)

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

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

../../../_images/render_cycles_optimizations_reducing-noise_no-clamp.jpg

Без отсечения (0).

../../../_images/render_cycles_optimizations_reducing-noise_clamp4.jpg

С отсечением, установленным на 4.