Задание №4: Синтез фотореалистичных изображений с помощью трассировки фотонов

Начало: 27 апреля 2011 года
Конец: 1 июня 2011 года (23:59)

Автор задания:
Алексей Игнатенко

Цель задания

Целью задания является реализация алгоритмов синтеза фотореалистичных изображений с помощью трассировки фотонов.

Описание задания

Дана простая сцена, состоящая из комнаты, двух параллелепипедов и одного прямоугольного площадного источника света:

Необходимо написать программу, которая:

1. Производит трассировку лучей методом Монте-Карло, запоминая информацию об ударах фотонов в поверхности сцены в фотонной карте. Трассировка и накапливание информации в фотонных картах должно происходить в течение некоторого (задаваемого снаружи) промежутка времени. Можно реализовать прерывание счета с клавиатуры.

2. Преобразует фотонные карты в текстуры, наклеивает их на поверхности сцены и показывает результат используя средства OpenGL. Ракурс картинки должен приблизительно соответствовать представленному выше. Источник света должен быть представлен на изображении в виде прямоугольника цвета источника.

Основные объекты и алгоритмы

Фотоны

Фотоны предлагается реализовать на основе модели, предложенной в задании прошлого года.

Поверхности

Все поверхности в предлагаемой задаче прямоугольные и диффузные. Их единственным параметром является коэффициент отражения для всех используемых длин волн. В модели RGB, таким образом, параметрами поверхности является тройка (kr,kg,kb).

Фотонная карта

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

Испускание луча из источника света

В отличие от первого задания, точку испускания луча, направление и цвет луча предлагается вычислять статистически, на основе распределения вероятностей.

Вероятность испускания фотона определенного спектра пропорциональна мощности источника в данной области спектра.

Положение испускаемого фотона определяется равномерным распределением по поверхности источника.

Направление полета луча обычно находится в полярной системе координат (phi, theta). Угол phi выбырается с помощью датчика равномерного распределения rnd(-Pi, Pi). Для нахождения угла theta датчик равномерного распределения в явном виде не подходит, для источника, равномерно излучающено в одну полуплоскость плотность вероятности должна равняться cos(theta). Такой датчик распределения можно смоделировать с помощью датчика равномерного распределения следующим образом:

a = 0.0;  
b = 1.0;  
while(b > cos(a))  
{  
  a = rnd(0, Pi/2.0);  
  b = rnd(0, 1.0);  
}  

theta = a; 

Угол theta отсчитывается от нормали к поверхности.

Взаимодействие луча с диффузной поверхностью

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

Вероятность поглощения фотона определяется коэффициентом отражения для данной части спектра. Т.е. если этот коэффициент равен (близок к) единице, то луч будет отражен с вероятностью 1. В общем случае каждый фотон может быть либо отражен, либо поглощен.

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

Отраженные фотоны сохраняются в фотонной карте в точке столкновения с поверхностью.

Построение текстуры

Текстура строится по тем же принципам, что и одномерная пластинка в первом задании, только используется двухмерная фильтрация.

Обязательная часть

Обязательно нужно реализовать:

  • Построение фотонных карт для трех выборок из спектра (RGB), с фиксированной мощностью источника света и фиксированными характеристиками поверхностей. Сцена - как на изображении в начале текста задания.
  • Визуализацию построенной сцены средствами OpenGL.

За реализацию обязательной части дается 20 баллов.

Дополнительная часть

Дополнительные баллы можно получить за:

  • Расчет сцены для заданного пользователем числа выборок из спектра (+4-6 баллов).
  • Возможность задания спектра источника света и коэффицентов отражения геометрических объектов (+2-4 балла).
  • Наличие в сцене и корректный расчет поверхностей с преломлением (каустики); сами преломаляющие объекты можно рисовать непрозрачными (+4-7 баллов).
  • Оптимизация по скорости генерации фотонной карты: использование оптимизирующих пространственных структур (kD-деревья, сетки и т.п.) (+5-15 баллов).
  • Реализация фотонной трассировки для произвольной сцены (загрузка из 3ds), при условии разумной скорости работы (+10-15 баллов).
  • Синтез изображения с помощью трассировщика лучей при условии разумной скорости и демонстрации правильной работы трассировщика (корректное рисование преломляющей поверхности) (+5-8 баллов).

Требования к программе

Развитый интерфейс приветствуется.

Литература и материалы для выполнения задания

Оценка

Компонент Оценка
Обязательная часть задания 20 баллов
Расчет сцены для заданного пользователем числа выборок из спектра +4-6 баллов
Возможность задания спектра источника света и коэффицентов отражения геометрических объектов +2-4 балла
Наличие в сцене и корректный расчет поверхностей с преломлением (каустики) +4-7баллов
Оптимизация по скорости генерации фотонной карты: использование оптимизирующих пространственных структур (kD-деревья, сетки и т.п.) +5-15 баллов
Реализация фотонной трассировки для произвольной сцены (загрузка из 3ds) при условии разумной скорости работы +10-15 баллов
Синтез изображения с помощью трассировщика лучей +5-8 баллов

Внимание: оценки могут быть скорректированы в зависимости от среднего уровня присланных работ.

Оформление работы

Работа должна быть оформлена в виде zip-архива. О содержимом архива и оформлении readme.txt-файла можно узнать здесь.

© Лаборатория компьютерной графики при ВМиК МГУ