anton.petrov (antimohnopuz) wrote,
anton.petrov
antimohnopuz

Category:

RayTracing #3

Приходится совмещать работу с подготовкой к экзаменам и работой над трассировщиком. Мотивация крепчает с осознанием, что меня читают. Спасибо.

Последние три дня занят штудированием теоритических основ радиометрии. Меня совсем не устраивает подход "свет затухает обратно квадрату расстояния". Ясно, что за всеми процессами стоит реальная физика со своими законами и размерностями. Измарал огромную кучу бумаги пока расписывал формулы взаимного преобразования основных величин: плотности потока освещения (flux density), интенсивности освещения (illuminance intensity) и, главное, излучения (radiance).

Долго не понимал принципиальную разницу между светом рассяеным поверхностью и отраженным. Как показывает жизненный опыт, яркость диффузной поверхности (побеленого потолка) зависит от растояния до источника света, но вот изображение в зеркале не становится темнее, не смотря на росстояние до отражаемых объектов. Дело в том, что величина излучения [Вт/м^2*ср] не меняется c расстоянием, равно как и интенсивность света [Вт/ср], но плотность потока [Вт/м^2] уменьшается, как раз обратно квадрату расстояния. Оказалось, что секрет зарыт в BRDF для каждого случая. При диффузном рассеянии BRDF = const и под интегралом основного уравнения остается как раз величина плотности потока (sic!) для дифференциальной площади поверхности, а в случае зеркального отражения BRDF компинсирует уменьшение плотности потока просто перенаправляя вектор излучения.

В результате подобных ментальных и бумажных мыслеобразований стало понятно если не все, то очень многое. А главное что же есть цвет и интенсивность лампочки сцены. Я уверен, что большинство людей, которые создают в том или ином редакторе лампочку, присваивая ей цвет (rgb) и интенсивность (float) даже не задумываются о физическом значении этих величин и потом огребают массу проблем при экспорте сцен из одного редактора в другой, получая при этом радикальную разницу в освещении. Конечно в этом есть и вина разроботчиков, которые не дают дизайнеру информации о трактове параметров  внутри рендеров (у одних энергия света измеряется в ваттах, у других в люменах или еще чем). На самом деле правильно понимать, что цвет лампочки (наполняющий все вычисления зависимостью от спектра излучения) и интенсивность при покомпонентном перемножении есть ни что иное как 'излучение' (radiance) [Вт/м^2*ср]. Далее известная математика.

Были еще интересные открытия связанные с необходимостью интегрирования. При рассчете излучения от area lights, т.е. реальных объемных источников, мы считаем интеграл, либо по видимой поверхности источника света, либо по телесному углу заключающему в себя источник света, но как считать интеграл для идеальных точечных источников света у которых занимаемый объем и площадь бесконечно малы? Оказывается для описания идеальных источников нужно воспользоваться дельта-функцией, которая имеет смысл только под интегралом, который заведомо равен 1.

Что же с реализацией... К геометрии я добавил выпуклые полигоны, что позволит мне перейти к классическому Cornell Box для теста global illumination. А к интегрированию света прикрутил функцию видимости V(x,y), что сразу добавило реалистичности с помощью теней. Т.к. источники света идеальные, то и тени от них "жесткие" с четкими краями.

Картинка получилась такая:


Инлайновые вычисления дают свои плоды. В релизовом билде рендер работает очень быстро. До таймера руки не доходят, но сцена рассчитывается в 1024x768 и пишется файл за какие-нибудь три-четыре секунды на моем P4 2.4GHz. Хвастаться конечно нечем т.к. объектов в сцене очень мало, но думаю, рендер будет бодреньким и дальше. И уж точно я не собираюсь ждать расчета картинки 640x480 с пятью шариками и глубоким GI всю ночь как у одного коллеги с devmaster.net :)

Планы на ближайшее будущее: честное интегрирование первичного освещения и area lights.

 

Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 1 comment