Izvedba
Kao jezik za programsku implementaciju korišten je
C++, dok je za pisanje programa za sijenčanje korišten HLSL. Od tehnologija, za
iscrtavanje se koristi Direct3D, za izradu GUI-a korišten je DXUT dok su ostali
zahtjevi pokriveni s Win32 API-jem i STL-om. Struktura samog programa proizlazi
iz algoritma čiji su osnovni korac:
1. Generiranje uzoraka.
2. Računanje koeficijenata prijenosne funkcije ili
koeficijenata BRDF-a.
3. Računanje koeficijenata funkcije distribucije
svjetla.
4. Iscrtavanje scene.
Generiranje uzoraka
Generiranje
uzoraka izvedeno je preko klase SampleGenerator. Od klase se očekuje da za
zadani broj uzoraka generira nasumične točke na jedinicnoj sferi prema
uniformnoj razdiobi. Uz generiranje samih točaka klasa također računa
vrijednosti funkcije sfernih harmonika u danim točkama za zadani broj pojaseva.
Raćunanje koeficijenata prijenosne funkcije ili
BRDF-a
Potrebno je naglasiti da
je ovaj korak opcionalan. Ako se koristi Ramamoorthi– Hanrahan riješenje ovaj korak je suvišan jer kako je
pokazano prijenosna funkcija se računa u lokalnom koordinatnom sustavu što
omogucava jednostavno izracunavanje integrala koristeci Byerly-vu formulu. Za
klasičnu metodu s druge strane, potrebno je izračunati prijenosnu funkciju.
Izračun se vrši tako da se normala množi sa svakom točkom uzorka, taj proces je
izuzetno vremenski zahtjevan ali omogućava izvedbe složenih prijenosnih
funkcija koje npr. ukjučuju funkciju vidljivosti. Kako se koeficijenti
razlikuju za svaki vrh klasa takoder upisuje podatke o koeficijentima u
strukturu vrhova. Uz računanje jednostavene prijenosne funkcije oblika , klasa omogucuje računanje produkta .
Računanje koeficijenata funkcije distribucije
svjetla
Za ovaj zadatak zadužena je klasa LightProbe. Prvo
je potrebno učitati teksturu u kojoj se spremjeni podatci o osvjetljenju scene
u tu svrhu se koriste sferne mape. Koordinate točaka uzoraka preslikavaju se u
koordinate slikovnih elemenata teksture
gdje se boja preračunava u koeficijente sfernih harmonika.