-
Notifications
You must be signed in to change notification settings - Fork 1
/
readme_distributed.txt
76 lines (62 loc) · 3.45 KB
/
readme_distributed.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
TODO: translate
Ogolny opis dzialania:
Klient laczy sie z serwerem wysylajac informacje o rozdzielczosci, nazwie sceny.
Serwer najpierw szuka pliku o podanej nazwie w katalogu dump/ zawierajacym
wczesniej wygenerowane drzewa BVH. Jesli nie udalo mu sie znalezc, to tworzy
nowe drzewo za pomoca jednej z dwoch metod: szybkiej lub wolnej. Metoda szybka
dziala kilka razy szybciej, ale generuje drzewo gorszej jakosci dla scen
zawierajacych trojkaty o mocno roznych wielkosciach (czyli np. dla scen
architektonicznych). Serwer wczytuje takze materialy z odpowiedniego pliku .mtl
oraz teksturki jesli sa dostepne. Nastepnie serwer rozsyla te dane do kazdego z
wezlow.
Obrazek dzielony jest na kawalki, wszystkie o takiej samej wielkosci (aktualnie
16x64, testy (benchmark.txt) robione na wersji 32x32) ktore sa rozdzielane losowo,
ale rownomiernie pomiedzy wezly renderujace. Przydzialy te nie zmieniaja sie az do
nastepnego polaczenia.
Teraz serwer, wezly i klient wchodza w glowna petle:
- Serwer odbiera konfiguracje klatki od klienta i rozsyla ja do wezlow, nastepnie
odbiera skompresowane kawalki obrazkow od wezlow i przesyla je dalej
do klienta. Na koniec klatki zbiera statystyki od kazdego z wezlow, sumuje
i takze wysyla do klienta.
- Klient wysyla konfiguracje klatki (pozycja kamery, opcje, swiatla) do serwera,
nastepnie odbiera kawalki obrazka od serwera, dekompresuje je i umieszcza pod
odpowiednimi wspolrzednymi. Koniec klatki sygnalizowany jest pustym kawalkiem.
Obrazek wyrzucany jest na ekran za pomoca PBO
(http://www.songho.ca/opengl/gl_pbo.html).
- Wezly w petli pobieraja konfiguracje klatki od serwera i renderuja odpowiednie
kawalki:
Jesli nie dziala odpowiednia liczba watkow SPU, to tworzone sa nowe
Wrzuc informacje o kawalkach obrazka do zrenderowania do puli
Dopoki nie obsluzono (zrenderowano, skompresowano i wyslano) wszystkich kawalkow
Jesli zrenederowano packetSize kawalkow
skompresuj kawalki
wyslij kawalki
zwieksz liczbe obsluzonych kawalkow
Zbierz statystyki i wyslij do serwera
Watki na SPU dzialaja caly czas, ew. zawieszaja sie na odpowiednich zmiennych
warunkowych jesli w puli nie ma zadan do zrenderowania.
Petla renderingu na SPU:
Wez zadanie z puli
Podziel dany kawalek na mniejsze kawalki o wielkosci 16x16
Dla kazdego kawalka 16x16:
Wygeneruj promienie biorac pod uwage aktualna konfiguracje kamery
(Jesli wlaczony jest antialiasing to generowane jest 4x tyle promieni,
a nastepnie wynik jest usredniany)
Wyznacz przeciecie pakietu promieni ze scena
Ocieniuj pixele
Jesli sa swiatla, to dla kazdego swiatla sprawdz ktore pixele sa w cieniu,
a ktore nie i odpowiednio zmodyfikuj kolor pixeli
Jesli wlaczone sa odbicia to wywolaj rekurencyjnie procedure renderujaca dla
odpowiednio wygenerowanych promieni i zmodyfikuj kolor pixeli
Skonwertuj kolor na R8G8B8 i zapisz w tablicach red, green, blue
Skopiuj dane koloru z tablic red, green, blue do pamieci zewnetrznej
Uzyte techniki zwiekszajace wydajnosc:
- Budowanie drzewa z wykorzystaniem SAH (Surface Area Heuristic)
- Szybkie budowanie drzewa za pomoca algorytmu kubelkowego
- Sledzenie pakietow promieni
- Szybkie testy pakiet - bbox z uzyciem arytmetyki przedzialowej
- Wektoryzacja, rozwijanie petli (testowanie promienia z 4 trojkatami na raz)
Szczegolowy opis BVH (i nie tylko) i roznych algorytmow z nim zwiazanych:
http://www.mpi-inf.mpg.de/~guenther/STAR-RTAS/index.html
Zrodlo modeli:
http://graphics.stanford.edu/data/3Dscanrep/