В настоящее время я работаю над простым raytracer, и до сих пор я успешно реализовал несколько функций, таких как сглаживание, глубина резкости и мягкие тени с помощью огней области. Изображения представляющего свою работы может быть таким:Проблемы с реализацией картирования фотонов
(нет АА здесь)
Следующего шаг стал добавление реальности к визуализации с некоторым алгоритмом глобального освещения, поэтому я решил перейти к фотоном, который казался самым простым.
Для этого я прочитал несколько статей, которые я нашел в Интернете, например, этот: http://graphics.stanford.edu/courses/cs348b-01/course8.pdf
который очень хорошо написан.
Теперь моя программа может снимать фотоны в сцене и хранить их после первого отскока (диффузного или зеркального), а затем масштабировать мощность каждого отдельного фотона до LIGHT_POWER/PHOTON_AMOUNT. прямая визуализация это представлено в этих изображениях, где я снимал 1000K и 50k фотонов, каждый разрешается подпрыгивать в 6 раз, в общей сложности 5000K и 250K фотонов в глобальной карте:
Я думал, что эффект прав, поэтому я перешел к следующей части, где фотоны в определенном радиусе над точкой пересечения лучистых лучей используются для вычисления косвенного освещения.
В моей Raytracer я следующим образом:
для каждого пикселя я посылаю луч корыто его пересекающую сцену и рассчитать прямое освещение
(dot(N, L) * primitive.color * primitive.diffuseFactor * light.power)
, а термин зеркальными;Вот сложная часть: Я смотрю на ближайшие фотонов, которые лежат в фиксированном радиусе диска вокруг точки пересечения и суммировать свет, излучаемый каждым из таким образом:
для каждого фотона в радиусе рассчитать свет так же, как при прямом освещении (точка (-фотонДир, N) * примитив.цвет * photonColor) и суммировать все.
Когда каждый интересный фотон обработан и добавлен его вклад в окончательный цвет, я делю его на область диска, которая определяет область поиска.
Проблема заключается в том, что делать, так что я не получают желаемый результат, в частности, потолок очень темный по сравнению с изображениями, которые я нашел в Интернете (я не могу получить, как потолок может быть ярким как пол, если последний имеет дополнительный вклад от прямого освещения и как он может быть белым, если фотоны на нем только красные или зеленые).
Изображение, представляющее проблему заключается в следующем:
Это было визуализируется с использованием 150K фотонов, с 4 отскоков каждый, и прямое освещение было разделено PI.
Кроме того, если вы знаете, как я могу удалить эти уродливые артефакты из углов, пожалуйста, скажите мне.
Это выглядит довольно хорошо для меня. хорошо сделанный – ldgorman
Спасибо, но поскольку вы видите потолок, который является моей главной проблемой, очень темный, и если я увеличиваю косвенное освещение, единственное, что произойдет, это то, что цветное кровотечение станет более заметным, а это не то, что я want – DI2edd
Можно ожидать, что потолок будет темным: он не имеет прямого освещения. Если вы видите изображения в Интернете, в которых потолок не темный, это связано с каким-то окружающим светом, который был добавлен к нему (то есть вы даже увидите потолок, если бы не было источников света вообще). Цветное кровотечение также нереально, просто мы, люди, настолько приспособлены к игнорированию цветного света, которого мы обычно не понимаем. Вот почему вы часто видите, что свет фотона становится серым, чтобы соответствовать отображаемому изображению ожиданию, а не реальности. Единственный реальный артефакт - яркие линии в углах. – cmaster