ДР/2011/Л12/4: Прогресивен PT
- Forums:
Path tracing с непрекъснато обновяване
Както споменах на лекцията, в приложните програми, базирани на path tracing, често се ползва свойството, че дори с малък брой пътища на пиксел, path tracing може да покаже приблизителна картинка, а ако човек иска по-точен резултат, може да изчака, и картинката да се "рафинира" пред очите му, с добавянето на още пътища към всеки пиксел.
Идеята е следната. Избираме си някакъв малък брой семпли S - от 1 до 5 например.
Пускаме по S пътя през всеки пиксел (стандартен path tracing) и усредняваме стойностите им. Показваме резултатите на екрана. След което през всеки пиксел пускаме още S пътя и комбинираме новите резултати със старите, показвайки подобрените резултати на екрана. След което още S пътя и т.н.
Иначе казано, трябва ни един отделен буфер (по подобие на vfb), в който да натрупваме резултатите от path tracing без никакво усредняване. На всеки S пътя, трябва да сметнем моментното приближение, да го прехвърлим във vfb, и да викнем displayVFB() за да покаже резултатите.
Модифицирайте renderScene() така, че да поддържа описаната функционалност. Подберете подходящо стъпката S и завъртете цикъл, който да направи pathsPerPixel / S паса през цялата картинка. Трябва да се показват подобренията след всеки пас (ако pathsPerPixel не се дели точно на S, закръглете нагоре).