В компьютерной графике, рендеринг без допущений относится к технике рендеринга, которая не вносит в расчет систематических ошибок, предположений или погрешностей. Изображение получается таким, каким должно быть в природе, а рендер не имеет настроек качества поверхностей либо источников света.
Изображение отрендерено с помощью Maxwell Render.
Начнем с плохого
Когда на свет появились анбиасы, они были плохо оптимизированы, и железо было намного слабее. Даже четырехядерники были редкостью, по крайней мере на просторах СНГ. Многие дизайнеры отказались от подобных рендеров в виду того, что приходилось слишком долго ждать, пока уйдет шум с картинки. Многим профессионалам гораздо проще настроить глобальное освещение в Vray и сделать постобработку в Фотошопе в целом за 2-3 часа, чем нажать кнопку «render» в Maxwell и ждать приемлемого качества, скажем, 8 (и больше) часов. Иногда шум от какого-нибудь преломления не хотел сходить сутками.
И что в них хорошего?
Физически точные эффекты:
— глобальное освещение, (в том числе и каустика);
— глубина резкости (DOF) и шевеленка (Motion Blur);
— подповерхностное рассеивание;
— некоторые рендеры поддерживают даже дисперсию;
— мягкие тени, реалистичные отражения, в общем, все как в жизни.
Все эти эффекты мы видим с первых секунд рендеринга.
Время рендеринга мало зависит от количества треугольников, это дает возможность не экономить ресурсы на их количестве.
Плюс к тому, железо на месте не стоит, производительность процессоров понемногу растет, и что более интересно, с развитием технологии вычислений общего назначения на видеокартах (GPGPU), начали появляться рендеры, задействующие для вычислений шейдерные ядра графических процессоров. Да и сами рендеры стали выдавать лучшую картинку при тех же вычислительных затратах.
Посмотрим же
как выглядит процесс рендеринга:
Core i5 2500 3.3GHz, Maxwell Render 2.6, 400k треугольников, собственноручно созданная в 3ds Max модель.
В основе анбиас рендеров лежит трассировка пути (Path Tracing) с различными видами оптимизации.
(Может, некоторые посетители заметили, что посты о трассировке пути на GPU я уже публиковал и публиковал. Но решил охватить тему глубже и обширнее.)
***
АЛГОРИТМ
Path Tracing (PT) основан на интегрировании методом Монте Карло. Чем больше семплов мы вычисляем на 1 пиксель (цвет пикселя = среднему арифметическому цветов всех семплов в этой точке) — тем точнее будет результат.
Семпл (sample) – это лучи, которые, пройдя путь отражений и преломлений через сцену (от камеры к источнику света) формирует цвет закрашиваемого пикселя в определенной точке изображения.
Превью изображения (шумную картинку) получаем практически сразу после вокселизации (о ней попозже).
Количество семплов не может быть бесконечным. “Идеальной” картинки никогда не будет, на это уйдет бесконечное количество времени. Рендеринг можно считать завершенным, если шум не различим на глаз. (обычно 1000 — 10000 семплов на пиксель, или 2-20 млрд семплов на изображение формата FullHD, в особых случаях — даже больше). Не следует, также, забывать, что небольшой шум придает изображению реалистичности.
Чем сложнее пути, которые проходят лучи — тем медленнее будет сходить шум.
Проще всего рендерить источники света. Лучи от источников света прямо попадают в камеру.
Сложнее рендерить объекты, освещенные прямыми лучами от источников света.
Еще сложнее — объекты, освещенные другим объектом, освещенным источником света.
И так далее. Эта особенность делает рендеринг интерьеров более затруднительным, чем экстерьеров, по той простой причине, что в интерьерах больше вычислительных ресурсов идет на расчет сложных путей.
Слева направо, прямой свет, первое отражение, второе отражение, третье отражение, результат.
Максимальная глубина отражений и преломлений в большинстве рендеров настраивается, и равно по умолчанию 8.
В некоторых (напр. Maxwell, Fry) глубина отражений ограничена гораздо большим числом, и зависит от параметров поверхностей. Например не имеет смысла вычислять большую глубину отражений для темно-коричневого стола, в то время, как для вычисления преломлений внутри бокала требуется увеличить глубину отражений.
Мягкие тени
Алгоритм получения мягких теней в PT достаточно прост. Луч, исходящий из камеры по направлению к точке на поверхности направляется в произвольное место (степень «произвольности» зависит от параметров данной поверхности) на источнике света.
В случае, если луч благополучно достиг источника света (зеленый) — то закрашиваем этот пиксель в нужный цвет.
В случае, если луч встретил на пути препятствие (красный) — то соответствующий пиксель на экране, не закрашивается.
(Кстати, алгоритм аналогичен рендерингу теней в рейтрейсинге)
Количество семплов на пиксель: слева — 1, справа — 5.
На примере для наглядности отсутствуют вторичные отражения.
Отражения и преломления
Отражательная функция зависит в первую очередь от степени шероховатости. А степень шероховатости определяется величиной погрешности отклонения от отраженного луча.
Если степень отклонения = 0 — то мы получаем зеркальное отражение. Если 1 (или 100%) — то падающий луч может отразиться в любом направлении. От 0 до 1 мы получаем отражение различной степени шероховатости.
Степень шероховатости поверхности (от 0 до 1).
Отражательная функция может быть более сложной (например, анизотропная поверхность).
Алгоритм шероховатости преломлений аналогичен отражениям, только луч проникает внутрь объекта, меняя свое направление в соответствии с показателем преломления этого объекта.
Материалы
Материалы, как правило, состоят из нескольких слоев.
Упрощенная модели поверхности пластика.
Во многих анбиас рендерах (Maxwell, Fry, Indigo, Lux) есть возможность рассчитывать настоящее подповерхностное рассеивание. Часть лучей проходит и рассеиваются под поверхностью, что вносит свою корректировку в результирующее изображение.
Глубина резкости
Известный в фотографии эффект достигается в PT практически без лишних вычислительных затрат.
***
МЕТОДЫ ОПТИМИЗАЦИИ
Importance Sampling
“Важностное семплирование” необходимо, чтобы компьютер не тратил вычислительные мощности на “чистые” области. Зачастую “прочищаются” поверхности, освещенные прямым светом, в то время как области, освещенные преломленным либо отраженным светом остаются шумными очень долго.
Области, выделенные красным имеют повышенный шум.
Bidirectional Path Tracing
PT в чистом виде используется очень редко. Вероятность того, что лучи, исходящие из виртуальной камеры достигнут источника очень мала и сильно зависит от размеров источника света. Чем меньше источник света, тем сложнее лучу “попасть” в него.
Алгоритм BDPT испускает лучи одновременно от источника света и из камеры. Это позволяет “безболезненно” вносить в сцену даже точечные источники света.
Используется в большинстве unbiased рендерах на GPU.
Metropolis Light Transport
Алгоритм мутирующих лучей MLT позволяет добиться меньшего шума при том же количестве семплов. Алгоритм сохраняет “узлы” (точки отражения) тех лучей, которые сильно повлияли на результирующее изображение, и производит незначительные отклонения от первоначального направления луча. Также, может вводить дополнительные узлы в путь луча. После, проверяет, насколько сильно повлияло изменение направления на интенсивность луча, и определяет, делать ли дальнейшие мутации этого луча.
Используется во всех unbiased рендерах, использующих CPU.
(Существует еще один метод оптимизации мутирующих лучей — Energy Redistribution Path Tracing, но его повсеместно не используют, и инфы о нем мало.)
Как это работает, можете посмотреть на ролике более наглядно (MLT vs BDPT).
Тут мы можем лицезреть эффективность каждого из методов оптимизаций рендеринга.
Voxelisation
Перед тем, как рендерить, вокселизация необходима для того, чтобы программа не проверяла все треугольники на возможность пересечения с одним лучем. Алгоритм отбрасывает те области пространства, треугольники в которых не могут быть на пути луча.
Объекты необходимо вокселизовать каждый раз, когда происходит изменение в геометрии, или добавляются новые объекты. Но в ней нет необходимости при перемещении камеры, изменении материалов объектов или окружения.
Кроме того в PT можно ввести алгоритм воксельного рендеринга.
***
GPU
В связи с тем, что современные графические процессоры справляются с float вычислениями гораздо лучше CPU, трассировку пути постепенно возлагают на их плечи.
Рендеринг в реальном времени
Энтузиасты уже начали создавать игры, использующие PT. Игру можете попробовать сами (использует OpenCL), если у Вас стоит достаточно мощная карточка (можете попробовать играть и на CPU, но будет сильно тормозить).
Автор следующего видео (рекомендую посмотреть его сайт) утверждает, что в скором будущем графический движок PT будет использоваться в играх. Рендерится это видео с помощью 2-х GTX580 в реальном времени.
Как использовать GPU
CUDA — программно-аппаратная архитектура позволяет компилировать C++ и проводить вычисления на видеокартах Nvidia.
ATIFirestream — то же самое, только для карточек ATI.
OpenCL — фреймворк для вычислений на всех OpenCL-совместимых (большинство современных CPU и GPU) устройствах.
DirectCompute — фреймворк от Microsoft, поддерживается видеокартами с поддержкой DX10, 11.
GLSL — шейдерный язык программирования, работает на всех графических ускорителях.
На следующем видео демонстрируется скорость вычисления физики с помощью различных платформ программирования. А физика, как и графика, требует хорошей производительности операций с плавающей точкой, поэтому считаю это видео применимым к этой статье.
(GLSL демонстрирует скорость на уровне CUDA, почему же тогда не существует PT на GLSL?)
***
И ЕЩЕ НЕМНОГО
Наиболее известные анбиас рендеры:
Maxwell Render самый популярный unbiased рендер.
Indigo имеет GPU аналог IndigoRT.
FryRender рендер от RandomControl, имеет GPU аналог — Arion Render.
LuxRender опенсорс рендер, имеет поддержку GPU ускорения. На сайте также можно найти полностью GPU рендер — SmallLuxGPU.
Octane Render полностью GPU рендер.
iRay лежит в коробке с последними 3ds Max, использует CUDA и процессор.
Cycles Render (встроен в Blender, поддерживает как CUDA, так и OpenCL).
Популярное заблуждение
Существует популярное заблуждение, что V-Ray RT — анбиас рендер. Нет, это не так. Это рейтрейсинг с адаптивным антиалисаингом. Конечно, семплирование и рендеринг теней схож с алгоритмом path tracing. Но глобальное освещение и каустика остаются подвластны общим настройкам врея, и их надо настраивать по каждый конкретный случай.
Тоже самое касается Bunkspeed Hypershot и Luxeon Keyshot (ранних версий, до перехода на iRay).
Подведем итоги:
V-Ray олдфаги скажут, что всю красоту и так могут сделать в Вирее, и будут правы. Ведь рендер — это не главное. Главное — художник с головой, ровными ручками и творчеством в душе!
Но unbiased рендеры могут помочь нам не уделять внимания техническим настройкам рендера, а сосредоточиться на творческом процессе.
Автор: Marchevsky
В плане терминов статья безграмотная. Unbiased значит несмещенный, это термин из мат. статистики. Importance Sampling – выборка по значимости, это тоже матстат. С русским языком – ужас. И с английским тоже: Voxelization (а не Voxelisation)