Ok...
Algoritam je view-independent, tojest, jednom kad se izracuna radiosity tekstura, svejedno je odakle se gleda sto se tice brzine renderinga. Scena se izdeli na jednake kvadratice, i svaki ima svoje mesto u jednoj velikoj teksturi koja belezi koliko je koji kvadratic primio svetlosne energije. Naravno, textura je HDR fp16. Ima jos jedna tekstura iste dimenzije, koja pamti koliko koji kvadratic poseduje "viska" energije, tojest, koliko treba da oda. Zavisno od kvaliteta, na svaki kvadratic otpada po 1x1 do 16x16 teksela iz obe teksture.
Prvo se obe teksture inicijalizuju sa 1.0 tamo gde su svetla, a sa 0.0 tamo gde nisu.
Onda se ova druga tekstura (koliko je energije preostalo) downscale-uje sve dok po kvadraticu ne ostane tacno jedan teksel.
Onda se cela scena ortografski izrenderuje u 1x1 piksel bafer, tako da se kao boja pamti indeks kvadratica, a kao depth vrednost - vrednost teksela iz ove smanjene teksture, tojest srednja vrednost energije koju kvadratic predaje okolini. Na kraju ce na "vrhu" da ostane kvadratic koji odaje najvise svetlosne energije. To CPU procita i tako zna koji mu je naredni izvor svetla. Ovo (4 bajta) je ujedno i jedina stvar koju CPU procita iz memorije graficke kartice tokom jednog prolaza.
U centar ovog kvadratica postavi se kamera, i scena se izrenderuje iz tog pogleda u depth buffer. Princip je isti kao sa projective shadows mapama.
Kvadratici ovih velikih tekstura koji nisu u senci update-uju se shodno udaljenosti od trenutnog izvora svetlosti (kvadratica koji odaje najvise energije), uglu koji zaklapaju sa njim, boji...
Ceo postupak se ponovi 100-500 puta, zavisno od zeljenog kvaliteta. Teoretski, resenje nikad ne konvergira, ali je u najvisem kvalitetu potrebno oko 1000 prolaza.
Programcic je (koliko sam ja mogao da procenim) shader-limited, tako da moze da bude benchmark umesto FEAR-a
