17 сентября 2009 в 11:52Рейтинг: 0
0
0
>> с BPT и MLT
> А это, что за матюки?
Разделим понятия. Быстрый качественный рендеринг на точном рендере требует правильно подобранного сэмплера, интегратора и сэмпл-фильра под конкретную сцену. "Сэмплер" -- это алгоритм, выбирающий точки сцены для обсчёта; "интегратор" -- это алгоритм, просчитывающий движение света через сцену, учитывая его взаимодействия с размещёнными там объектами; "сэмпл-фильр" -- это алгоритм, отображающий обсчитанные сэмплы на пиксели кадра.
Теперь к матчасти.
Path Tracer -- это интегратор, развивающий движение света от источников к камере. Поскольку потенциальное число световых путей в сцене бесконечно, их "отстрел" в сцену с очень малой вероятностью пересекался бы с источниками света, а значит подавляющее число сэмплов обсчитывалось бы впустую, рендеринг шёл бы годами. При трасировке от источников строятся пути, пересекающие объекты в кадре (заведомо попадающие на план камеры), и высчитывается их светимость с учётом предыдущих отражений луча от других объектов и переноса их цвета далее. Этот интегратор очень быстр, но в сценах со сложными световыми путями (скрытые источники света, сложная геометрия сцены -- прежде всего, интерьеры) он не слишком эффективен, поскольку луч может переотражаться десятки раз, пока не попадёт в кадр.
Bidirectional-интегратор -- математически крайне сложный интегратор, трассирующий лучи как от источников света, так и из камеры, находя их пересечения уже в сцене. Он намного медленнее Path Tracer'а, но идеально подходит для тех сцен, в которых Path Tracer показывает слабость: интерьеры, сложная замкнутая геометрия с множеством переотражений света. (Как можно видеть, понятие Bidirectional Path Tracing технически некорректно.)
Random-сэмплер -- выбирает сэмплы для обсчёта в абсолютно случайном порядке. Вследствие этого крайне неэффективен (хотя и офигительно быстр), даёт неравномерное насыщение кадра. (Использовать не рекомендуется. Приведён только для справки.)
Lowdiscrepancy-сэмплер -- делит буфер кадра на множество равных прямоугольников, в каждом из которых выбирает случайные (или согласно определённому паттерну) сэмплы. Работает очень быстро, немногим медленнее чистого Random'а, но лишён недостатков последнего. Тем не менее, плохо подходит для обсчёта участков с высокой светоинтенсивностью, в частности, каустик.
Metropolis Light Transport (MLT) -- "умный" сэмплер. Случайным образом выбирает один сэмпл, обсчитывает его, затем вносит небольшое искажение, чуть-чуть смещая следующий сэмпл (это называется малой мутацией), обсчитывает его, затем снова вносит малую мутацию и т.д. Через какое-то время (регулируемое в настройках рендера с помощью пареметров Maximum rejections и Large mutation probability, они называются подобным образом почти во всех рендерах) или если не находит в этой области достаточно ярких сэмплов, вносящих достаточных вклад в освещённость сцены, делает большую мутацию, выбирая совершенно иной участок буфера кадра, и начинает обсчитывать уже эту новую область. И так далее. Таким образом, это идеальный сэмплер для обсчёта сложных световых эффектов вроде каустик или сложнейших дисперсий и рефракций через множество светопроводящих слоёв. Минус MLT в том, что он довольно медленный. Для простых сцен, не содержащих множества отражающих или светопроводящий материалов использовать его зачастую не стоит.
Здесь привёл те алгоритмы, которые используются в 90% случаев. Надеюсь, описал достаточно подробно.