Лекция 12::Задача 0

Path tracing с непрекъснато обновяване

Както споменах на лекцията, в приложните програми, базирани на path tracing, често се ползва свойството, че дори с малък брой пътища на пиксел, path tracing може да покаже приблизителна картинка, а ако човек иска по-точен резултат, може да изчака, и картинката да се "рафинира" пред очите му, с добавянето на още пътища към всеки пиксел.

Идеята е следната. Избираме си някакъв малък брой семпли S - от 1 до 5 например.
Пускаме по S пътя през всеки пиксел (стандартен path tracing) и усредняваме стойностите им. Показваме резултатите на екрана. След което през всеки пиксел пускаме още S пътя и комбинираме новите резултати със старите, показвайки подобрените резултати на екрана. След което още S пътя и т.н.

Иначе казано, трябва ни един отделен буфер (по подобие на vfb), в който да натрупваме резултатите от path tracing без никакво усредняване. На всеки S пътя, трябва да сметнем моментното приближение, да го прехвърлим във vfb, и да викнем updateRect() за да покаже резултатите.

Модифицирайте renderScene() така, че да поддържа описаната функционалност. Подберете подходящо стъпката S и завъртете цикъл, който да направи NUMPATHS / S паса през цялата картинка. Трябва да се показват подобренията след всеки пас (ако NUMPATHS не се дели точно на S, закръглете нагоре).

Comments

Имам въпрос. Очаква ли се да

Имам въпрос.
Очаква ли се да се забави изрендването на крайната картина и ако да, с колко ?

Да, заради обновяването на

Да, заради обновяването на екрана.
Точно с колко е трудно да се каже, зависи от S, но да речем 10-20% е приемливо.