Здрасти,
Аз пък се интерсувам има ли по-добър алгоритъм за GI или някакъв метод за ускоряване на този. Защото пусках няколко сцени с 10000 пътя, но като се сложат някои по-финни мешове (20000 триъгълника) и започва доста да се затормозява (2 пътя за 150-200s) :)
Comments
Ами Path Tracing е
Ами Path Tracing е традиционно бавен алгоритъм (може би най-бавният GI след Light Tracing :) ), но, все пак, ето какви опции имаш:
1) Ускоряване на Path Tracing:
Реализирай руската рулетка, реализирай адаптивен path tracing (по подобие на adaptive glossy домашното — пускаш променлив брой пътища на пиксел, т.е. за всеки пиксел пускаш нови лъчи, докато статистиката не покаже, че средното аритметично се е "стабилизирало"). В нета има и най-различни пейпъри по темата, можеш да ги разгледаш;
2) Друг алгоритъм (Bi-directional path tracing, Metropolis Light Transport,...)
Това е може би по-интересен, но доста по-труден път. От неотместените алгоритми можеш да си избереш Bi-directional path tracing или MLT (Metropolis Light Transport). Първият от тях ползва същият "framework", който ползвахме досега (строеж на пътища, руски рулетки и т.н.), но дава значително по-нисък шум при същия брой пътища, особено на сцени, които са "GI heavy". Но алгоритъмът определено не е лесен за писане (има много дреболийки, които могат да се объркат), и в този смисъл не е някакъв лесен "upgrade" на PT, който да седнеш и да си напишеш за ден-два. Повече за Bi-directional Path Tracing можеш да прочетеш в класическия paper на Lafortune, или (ако наистина искаш да се застреляш), да прочетеш тезиса на Veach (Тук, глава 10), който е доста по-advanced и на практика дава по-добри резултати.
И двата алгоритъма (чист/Bidirectional Path tracing) имат патологични случаи, в които се държат ужасно лошо. Класическият пример е "тъмна стая с ключалка", в която единственото осветление идва от "ключалката" (лампата е извън стаята). При този сценарий, и двата алгоритъма са шумни (шанса случайно пуснат лъч да мине през ключалката е много малък). Шума не изчезва даже и при милиони пътища на пиксел (а пък времето за рендериране е достойно за BOINC проект:) ). За такива сцени, по-подходящ алгоритъм е MLT. Той също е относително сложен за реализация (в началото се държи като Bi-directional Path Tracing, но в последствие (след като намери "добър път"), почва да мутира текущо намерения път между камерата и лампата, като така изследва близки пътища). За този алгоритъм не мога да ти помогна със съвети, обаче.
Разбира се, има и разнообразие от отместени алгоритми (Irradiance caching например), но там работата става съвсем дебела :)
Аз самият бях се замислил дали да не напиша (и вкарам в SVN) Bi-directinal path tracing-а, но за съжаление, в момента нямам време за това (трябва да пиша дипломна работа).
Мерси, ще почета и ще видя
Мерси, ще почета и ще видя какво ще избера, но сигурно ще е някой среден вариант :)