В трассировке лучей / трассировке путей, один из самых простых способов сглаживания изображения - это суперсэмплирование значений пикселей и усреднение результатов. IE. вместо того, чтобы снимать каждую семпл через центр пикселя, вы смещаете семплы на некоторое количество.
При поиске в интернете я нашел два разных способа сделать это:
- Сгенерируйте образцы так, как вы хотите, и взвесьте результат с помощью фильтра.
- Одним из примеров является PBRT
- Генерация образцов с распределением, равным форме фильтра
- Два примера smallpt и Бенедикту Bitterli «s Вольфрам Renderer
Генерировать и взвешивать
Основной процесс:
- Создавайте выборки так, как вы хотите (случайным образом, стратифицированные, последовательности с низким расхождением и т. Д.)
- Смещение луча камеры с использованием двух образцов (x и y)
- Рендеринг сцены с лучом
- Вычислите вес, используя функцию фильтра и расстояние образца по отношению к центру пикселя. Например, фильтр коробки, фильтр тента, фильтр Гаусса и т. Д.)
- Применить вес к цвету от рендера
Генерация в форме фильтра
Основная предпосылка состоит в том, чтобы использовать выборку обратного преобразования для создания выборок, которые распределяются в соответствии с формой фильтра. Например, гистограмма выборок, распределенных в форме гауссиана, будет иметь вид:
Это может быть сделано либо точно, либо путем объединения функции в отдельный pdf / cdf. smallpt использует точный обратный cdf фильтра для палаток. Примеры метода биннинга можно найти здесь
Вопросов
Каковы плюсы и минусы каждого метода? И почему вы используете один поверх другого? Я могу думать о нескольких вещах:
Генерация и взвешивание кажутся наиболее надежными, позволяя любую комбинацию любого метода выборки с любым фильтром. Тем не менее, он требует от вас отслеживать вес в ImageBuffer, а затем сделать окончательное решение.
Генерация в форме фильтра может поддерживать только положительные формы фильтра (т. Е. Без Митчелла, Кэтмулла Рома или Ланцоша), поскольку у вас не может быть отрицательного PDF. Но, как упоминалось выше, это легче реализовать, так как вам не нужно отслеживать какие-либо веса.
Хотя, в конце концов, я думаю, вы можете думать о методе 2 как об упрощении метода 1, поскольку он по сути использует неявный вес Box Filter.
источник
Ответы:
На эту тему вышла отличная статья 2006 года « Выборочная фильтрация» . Они предлагают ваш метод 2, изучают свойства и в целом высказываются за него. Они утверждают, что этот метод дает более плавные результаты рендеринга, поскольку он одинаково взвешивает все выборки, которые вносят вклад в пиксель, тем самым уменьшая дисперсию в конечных значениях пикселей. Это имеет некоторый смысл, так как это общая максима в рендеринге Монте-Карло, что выборка по важности даст меньшую дисперсию, чем взвешенные выборки.
Преимущество метода 2 также состоит в том, что его немного легче распараллелить, потому что вычисления каждого пикселя не зависят от всех других пикселей, тогда как в методе 1 результаты выборки распределяются между соседними пикселями (и, следовательно, их необходимо каким-то образом синхронизировать / передавать, когда пиксели распараллелены между несколько процессоров). По той же причине проще сделать адаптивную выборку (больше выборок в областях с высокой дисперсией изображения) с помощью метода 2, чем метода 1.
В статье они также экспериментировали с фильтром Митчелла, отбирая из abs () фильтра, а затем взвешивая каждую выборку с +1 или -1, как предложено @trichoplax. Но в итоге это фактически увеличило дисперсию и стало хуже, чем в методе 1, поэтому они пришли к выводу, что метод 2 применим только для положительных фильтров.
Тем не менее, результаты этого документа могут быть не универсально применимы, и это может быть в некоторой степени зависит от сцены, какой метод выборки лучше. Я написал сообщение в блоге, исследуя этот вопроснезависимо, в 2014 году, используя синтетическую «функцию изображения», а не полную визуализацию, и нашел способ 1 для получения более визуально приятных результатов благодаря более плавному сглаживанию высококонтрастных краев. Бенедикт Биттерли также прокомментировал этот пост, сообщая о сходной проблеме со своим рендерером (избыточный высокочастотный шум вокруг источников света при использовании метода 2). Кроме того, я обнаружил, что основное различие между методами заключалось в частоте результирующего шума: метод 2 дает более высокочастотный шум «пиксельного размера», в то время как метод 1 дает «зерна» шума, которые имеют ширину 2-3 пикселя, но амплитуда шума была одинаковой для обоих, поэтому, какой вид шума выглядит менее плохим, вероятно, является вопросом личных предпочтений.
источник