napredni algoritmi u vizualizaciji 3d objekata zasnovani na bsp stablima
DESCRIPTION
Magistarski radTRANSCRIPT
UNIVERZITET U SARAJEVU
PRIRODNO-MATEMATIČKI FAKULTET
ODSJEK ZA MATEMATIKU
II CIKLUS STUDIJA – SMJER TEORIJSKA KOMPJUTERSKA NAUKA
NAPREDNI ALGORITMI U VIZUALIZACIJI 3D OBJEKATA ZASNOVANI NA BSP
STABLIMA
ZAVRŠNI - MAGISTARSKI RAD
Mentor: Kandidat:
Prof. dr. Željko Jurić Enis Alađuz
Sarajevo, septembar 2013.
Mojoj majci u znak sjećanja i zahvalnosti
1
Sadržaj
Rječnik .......................................................................................................................... 3
Sažetak .......................................................................................................................... 4
Abstract ......................................................................................................................... 5
1. Uvod .......................................................................................................................... 6
1.1 Pozadina problema ........................................................................................ 6
1.2 Postavka problema ........................................................................................ 6
2. Osnove binarnog stabla ............................................................................................. 7
3. Jednodimenzionalna BSP stabla ............................................................................... 9
3.1 Kreiranje BSP stabla ..................................................................................... 9
4. Dvodimenzionalna BSP stabla ................................................................................ 11
4.1 Primjer gradnje BSP stabla .......................................................................... 12
4.2 Primjer obilaska BSP stabla ........................................................................ 16
5. BSP u 3D ................................................................................................................ 20
5.1 Definicija BSP stabala ................................................................................. 22
5.2 BSP stabla i Slikarev algoritam ................................................................... 24
5.3 Konstruisanje BSP stabla ............................................................................ 25
5.4 Veličina BSP stabla u 3D prostoru .............................................................. 30
5.5 BSP stabla za slabo zbijene scene ............................................................... 34
5.6 Neka dodatna zapažanja i komentari ........................................................... 42
6. Uklanjanje skrivenih površina ................................................................................ 45
6.1 Pozadina problema ...................................................................................... 45
7. Portal renderovanje ................................................................................................. 46
7.1 Postavljanje portala ..................................................................................... 49
7.2 Predloženo rješenje ...................................................................................... 54
7.3 Izračunavanje PVS-a ................................................................................... 55
2
8. Radiozitet ................................................................................................................ 61
8.1 Pozadina problema ...................................................................................... 61
8.2 Radiozitet u BSP stablima ........................................................................... 62
9. Pravci za dalji rad ................................................................................................... 64
Zaključak .................................................................................................................... 65
Literatura ..................................................................................................................... 67
3
Rječnik
BSP. Binary Space Partitioning. Binarna podjela prostora.
FPS. First Person Shooter. Pucačina u prvom licu. Igra u kojoj se gleda iz perspektive prvog lica i gdje je cilj eliminisati protivnike.
Pretprocesiranje.Izračunavanja koja se urade prije pokretanja igre (programa) da bi se uštedilo vrijedno procesorsko vrijeme koje može biti korišteno za druge stvari.
Čvor. Dio stabla. Svaki čvor se sastoji od lijevog i desnog podstabla.
Radiozitet. Model osvjetljavanja često korišten u igraćim mašinama. Glavna osobina je takozvano "krvarenje boje", gdje zidovi "krvare" svoju boju na susjedne zidove.
Granični okvir. Bounding box.Generalno se ovo definiše kao najmanji okvir koji enkapsulira neki skup objekata, na primjer tačke, poligone, druge granične okvire itd.
PVS.Potentionaly Visible Set. Potencijalno vidljivi skup. Ovo je skup poligona, objekata, čvorova koji su potencijalno vidiljivi iz neke date lokacije.
LOD (Level of Detail).Nivo detalja. Kada se ova tehnika koristi, objekti se crtaju sa različitom količinom detalja ovisno od udaljenosti od gledatelja. Razlog što se koristi je da reduciramo broj poligona u sceni. Što je objekat bliže gledatelju to će biti više detalja.
Mapa. Objekat koji sadrži geometriju svijeta.
Z-vrijednost. Ovo je mjera korištena za klasifikovanje koliko je blizu poligon poziciji gledatelja.
Frekvencija okvira. Frame rate. Broj koliko je puta ekran ažuriran po sekundi. Ovo nema ništa sa frekvencijom osvježenja monitora. Ovo je broj koliko se puta svijet iscrta u tokujedne sekunde. Obično bi ovo trebalo biti iznad 30 puta po sekundi da se dobije osjećaj kontinuiteta.
Poligon. Poligon je mnogostrana planarna figura sastavljena od čvorova i ivica. Trouglovi, kvadrati, heksagoni i pentagoni su primjeri poligona koji imaju ime, ali bilo koji zatvoren niz duži formira poligon.
Portal. Rupa kroz koju su dva čvora povezana ili ogledalo na koje scena može biti renderovana.
Pogled krnje piramide. Viewing frustum. Oblast (polje) pogleda kamere, često oblika kao (krnja) piramida sa kamerom u vrhu.
4
Sažetak
Kada je formulisan originalan dizajn algoritma za binarnu podjelu prostora (Binary Space Partitioning – BSP), ideja je bila koristiti ga za sortiranje poligona u svijetu. Razlog za ovo je bio što hardverski akcelerator Z-spremnika nije postojao i što je softver Z-spremnika bio prespor. Danas je ta oblast korištenja zastarjela jer hardverski akceleratori Z-spremnika danas postoje. Umjesto toga, koriste se u optimizovanju širokog izbora područja kao što su izračunavanja radioziteta, iscrtavanje svijeta, detekcija sudara i umrežavanje.
Zadatak ovog rada je ispitati područje vizualizacije 3D objekata u kojima se može izvući prednost BSP stabala i proučiti proces generisanja.
Kao zaključak, BSP stablo je veoma korisna struktura u većini igraćih mašina iako imaju mana kao što je statičnost i veoma skupo modifikovanje tokom izvršavanja. Nadajmo se da neke ideje mogu biti uzete iz BSP stablo algoritma za razvijanje dinamičnijih struktura koje imaju iste prednosti kao i BSP stabla.
5
Abstract
When the original design of the algorithm for Binary Space Partitioning(BSP) trees was formulated, the idea was to use it to sort the polygons in theworld. The reason for this was there did not exist hardware accelerated Z-buffers,and software Z-buffering was too slow. Today that area of usage isobsolete, since hardware accelerated Z-buffers no exist. Instead, the usage is tooptimise a wide variety of areas, such as radiosity calculations, drawing of theworld, collision detection and networking. The goal of this work is to examine visaulisation of 3D objects where we can draw advantages of theBSP trees and study the generating process. As conclusion, a BSP-tree is a very useful structure in most game engines.Although there are some drawbacks with it, such as that it is static and it isvery expensive to modify during run-time. We hope some ideas can be takenfrom the BSP-tree algorithm to develop a more dynamic structure that hasthe same advantages as the BSP-tree.
6
1. Uvod 1.1 Pozadina problema Stabla binarne podjele prostora (Binary Space Partitionig – BSP) su prvi put opisana 1969. od strane Shumacker-aidr.1. Bilo je teško zamisliti će to biti algoritam korišten u proizvodima za zabavu, ali od ranih 90-ih BSP stabla su upotrebi u industriji igara radi poboljšanja performansi i omogućavanja korištenja više detalja u mapama. Prva igra koja je koristila ovu tehnologiju je Doom, kreirana od strane dvije legende u industriji igara, Johna Carmackai Johna Romero-a. Od tada skoro sve pucačine u prvom licu (First Person Shooting – FPS) koriste ovu tehnologiju.
1.2 Postavka problema Zbog teškog takmičenja u industriji igara, mnogo posla je urađeno da se unaprijedi originalni dizajn algoritma, ali vjeruje se da se mogu napraviti poboljšanja. Naš glavni fokus je bio na kretanju od skupog izračunavanja u vremenu izvršavanja do pretprocesoriranja čime na kraju gradimo strukturu koja čuva mnogo informacija koje mogu biti korištene tokom izvršavanja. Druga stvar koju želimo uraditi jeste naći način da unaprijedimo i optimizujemo okruženje u igraćoj mašini koristeći snagu BSP stabala. Kao sporedni efekat ovaj rad se može razmatrati kao tutorijal kako razviti igraću mašinu.
Pokazat ćemo:
Šta je BSP stablo; Kako kreirati BSP stablo; Prednosti i nedostaci BSP stabala; Slične tehnike koje mogu biti korištene; Upotrebljivost BSP stabala; Poređenje naših metoda sa postojećim metodama
1 [Shumacker, R., Brand, R., Gilliland, M., Sharp, W. Study for Applying Computer-Generated Images to Visual Simulation]
7
2. Osnove binarnog stabla
BSP stablo je binarno stablo, tako da ćemo se prvo podsjetiti osnovnog koncepta i terminologije binarnog stabla.
Binarno stablo je struktura podataka koja sadrži čvorove u hijerarhijskoj strukturi. Binarna stabla imaju sljedeće osobine:
Svaki čvor ima najviše dva djeteta koji se najčešće zovu lijevo dijete i desno dijete;
Čvorovi imaju podatke koji su im pridruženi; Čvor bez djece se naziva list; Čvor bez roditelja se naziva korijen; Sortirano binarno stablo, često imenovano kao binarno stablo pretrage, sadrži
čvorove sortirane prema njihovim podacima.
Pogledajmo primjer sortiranog binarnog stabla na slici. Ovo je sortirano binarno stablo koje sadrži listu brojeva 1, 3, 5, 6, 8 i 9. Sada pogledajmo objašnjenje šta znači da je binarno stablo sortirano. Za svaki čvor, sve vrijednosti koje su manje od vrijednosti tog čvora su na njegovoj lijevoj strani, dok su sve vrijednosti veće od vrijednosti tog čvora na njegovoj desnoj strani. Na primjer, zato što korjeni čvor ima vrijednost 5, svaki broj koji je manji od 5 je na lijevoj strani stabla, a svaki broj koji je veći od 5 je na desnoj strani stabla.
Slika 2.1 Ovaj primjer stabla ima tri lista i dubinu dva
5
1 8
3 6 9
Dubina 0
Dubina 1
Dubina 2
List List List
8
Na slici se vidi da ovo stablo ima dubinu 2. Dubina, ponekad nazvana i visinom, je broj generacija korijenove djece. Primjer je također dobro balansiran, što znači da za svaki čvor dubina lijeve strane se razlikuje najviše za jedan od dubine desne strane. Dobro balansirano sortirano binarno stablo može biti brzo pretraživano, bez da gledamo u sve podatke.
Jednostavna implementacija binarnog stabla (čvora) u C++-u mogla bi biti ovakva:
struct Cvor
{
Cvor *lijevi;
Cvor *desni;
int vrijednost;
Cvor(int_vrijednost) { vrijednost = _vrijednost; }
void Ispis() { cout << vrijednost; }
};
Klasa Cvor ima cjelobrojnu vrijednost i pokazivače na lijevo i desno dijete (koji su incijalno null pa stoga nema dijete). Podsjetimo, čvor može biti korijen, list ili unutrašnji čvor. Kreiranje novog čvora je vrlo jednostavno.
Cvor *korijen = new Cvor(5);
Ako želimo da ispišemo stablo u sortiranom poretku koristićemo rekurzivnu funkciju inOrder.
void inOrder(Cvor *cvor)
{
if(cvor != 0)
{
inOrder(cvor‐>lijevi);
cvor‐>Ispis();
inOrder(cvor‐>desni);
}
}
3 3.
Rbi
Bu prhisapr
Dhi
ZaPrbr
Sasvpr
Gu na
Rdakoko
Gje
. Jednod
.1 Kreiran
azumijevaninarne podje
SP stablo jen-dimenzio
redstavlja kiperravan kadrži i pokarostoru. U ti
akle, BSP ijerarhijska
amislimo drimijetimo rojeve kao u
ada pretposvaka kuća drostor (sve š
Gradnja stablprethodnom
a slici 2.1.
ecimo da saljih ka blorištenje uboje su dalje
Gledajući sliednostavna p
dimenzio
nje BSP s
nje BPS stabele prostora
e standardnoonalnom proonveksni di
koja dijeli pazivače na tim slučajev
stablo je podjela n-d
da igrač stoda su kuće
u primjeru i
Slik
stavimo da jdijeli svijet nšto je desno
la slijedi istm poglavlju
sada želimoižim od lo
brzanja Z-spigraču prije
iku 3.1 popravila:
onalna B
stabla
bala u 2D ia prvo objas
o binarno stostoru. Stabio tog prostprostor kojita dva novaima hiperra
prostorna dimenzional
oji u jednose sortirane z prethodno
ka 3.1 Igrač
je svaka kuna dva pros
o od kuće).
ti proces kou. Rezultuju
o ove kuće okacije kampremnika. Te iscrtavanja
redak iscrt
9
BSP stab
i 3D prostosniti u jedno
tablo koje sblo kao cjeltora. Svaki či predstavlja čvora. BSavni su zapr
struktura lnog prostor
stavnom svpo njihovi
og poglavlja
č stoji na p
uća čvor postora: lijevi
oji smo koriuće binarno
iscrtati u mere, da bTako da, u a onih bližih
tavanja kuć
la
ru može bitoj dimenziji
se koristi koina predstavčvor (osim ka na dvije SP stablo seravo prave i
podataka kra u konvek
ijetu sa redim brojevima.
oziciji 7 u r
odjele. U jeprostor (sv
istili u gradstablo bi m
3D svijetu.bismo elimiovom primh.
ća od daljih
ti veoma te.
od pretrage ivlja cijeli pkrajnjih čvopolovine. S
e najčešće ravni.
kojom se pksne segmen
dom kuća, ma. Takođe
redu kuća
ednodimenzve što je lije
nji sortiranomoglo izgled
Želimo dainisali prec
mjeru, želim
h ka bližim
eško, pa ćem
i sortiranja prostor, a svorova – listoSvaki čvor koristi u 2D
postiže reknte.
kao na slicer, kuće im
zionalnom pevo od kuće
og binarnogdati kao u p
a iscrtamo crtavanja i
mo da iscrtam
m se dijeli
mo ideju
objekata vaki čvor ova) ima
također D ili 3D
kurzivna,
ci ispod. maju iste
primjeru, e) i desni
g stabala primjeru
kuće od izbjegli
mo kuće
na dva
10
Crtaj kuće lijevo od kamere u poretku (1, 3, 5, 6). Crtaj kuće desno od kamere u obrnutom poretku (9, 8).
Iz 3D perspektive, kuće na lijevoj strani nikada neće preklopiti kuće na desnoj strani. Stoga, nema veze da li je poredak u kojem ćemo iscrtati kuće npr. prvo iscrtati lijevu stranu pa onda desnu (1, 3, 5, 6, 9, 8) ili su obje strane izmiješane (1, 9, 3, 8, 5, 6). Bitno je samo da je svaka strana nacrtana u svom poretku. Tako da, ova tehnika radi bez obzira u kojem smjeru je igrač okrenut.
4 Kpo
Uta
Prznne2D"l
UkaPr
. Dvodim
Krenimo sa poda na slici
Slik
U jednodimeačke. U 2D p
rava dijeli 2nati šta je "eprecizni u D linije moijevo" i "de
Umjesto togaao i poligonrednja stran
Slika 4.
menziona
primjerom g4.1.
ka 4.1. 2D p
enzionalnompodjele su l
2D prostor "lijevo" od ovom slučaogu biti oriesno", ali ho
a, mi ćemo ni, sa norm
na je vidljiva
.2. Linije k
alna BSP
gradnje i ob
plan poda p
m primjeru,inije (prave
u dvije polinije, a št
aju. Ovi termijentisane n
orizontalna l
koristiti temalom koja a strana. Ov
oje predsta
11
P stabla
ilaska 2D B
pokazuje je
svaka kuće), a u 3D po
oluravni, alita "desno". mini rade lijna bilo kojilinija dijeli
ermine "isprpokazuje u
vo znači da
avljaju zido
BSP stabla. P
ednostavnu
ća je bila poodjele su ra
i da bismo Ustvari, te
jepo u jednoi način. Vesvijet na "sj
red" i "iza"u smjeru przidove mož
ove imaju p
Pogledajmo
u sobu sa če
odjela tako vni.
napravili Bermini lijevodimenzionertikalna linjever" i "jug
. Linije imarednje stranžemo koristi
prednju i za
o primjer 2D
etiri zida.
da su podj
BSP stablo vo i desno nalnom svijenija dijeli sg".
aju ispred ine, kao na siti kao podj
adnju stran
D plana
djele bile
moramo su malo etu, ali u svijet na
i iza isto slici 4.2. ele.
nu.
Zbka
Sase
4.
KPodopr
Oplmo prlis
bog toga štoažemo gdje
a ovim znane shvati kak
.1. Primje
Kao primjer,oredak dododana u starikazana isp
vdje su listlafonski pol
mogu kreiratvisini podo
redstavlja cstove 1 i 2.
o podjele imje kamera u
njem prođimko prave pod
er gradnj
, gradit ćemavanja zido
ablo. Primijeprekidanom
Slika 4.3. G
ovi BSP staligoni. Ako i stvari kao ova o plafocijeli prazan
maju prednju odnosu na
mo kroz pridjele dijele p
e BSP sta
mo plan podova može betimo da jelinijom.
Gradnja B
abla prazni je potrebnošto su platf
ona u ovim n prostor. P
12
ju i zadnju a svaku linij
imjer gradnjprostor.
abla
da sa slike iti proizvolj
e podjela fo
SP stabla,
prostori. Pro da podovi forme i steplistovima.
Prva podjel
stranu, uvijju: Kamera
je BSP stab
4.2. dodavljan. Na slicormirana zid
prvi dio. P
razni prostoi plafoni im
penice) ondaNa slici 4.3la, zid A,
jek ćemo bije ili ispred
bla. Ovaj pr
anjem jednci 4.3., prvadom A prod
rvi zid je d
ori su istog omaju različita je potrebn3. počinjemdijeli list n
iti u mogućd ili iza svak
rimjer će po
nog po jedna podjela, zdužena iza
dodan.
oblika kao te visine (tano čuvti info
mo sa listomna dvoje, k
ćnosti da ke linije.
omoći da
nog zida. zid A, je zida A i
i podni i ako da se ormacije
m 1, koji kreirajući
Pruvko
Slispčv
Prfo
Bzilo
razni prostovijek dati donveksni.
ljedeće, na pred A. Ovvor iza B i d
Slik
rimijetimo ormiranom z
SP gradnja id D siječe okacije u sta
ori će uvijekdva nova ko
slici 4.4., zivo dijeli listdijeli list 3 u
ka 4.4. Gra
da, kada szidom A.
se nastavljpodjelu fo
ablu pa se st
k biti konveonveksna ob
idovi B i C t 1 na dva liu dva lista (
adnja BSP
smo dodali
a na slici 4ormiranu zitoga zid D d
13
eksni, zato blika. Tako
su dodani ista (1 i 3).3 i 4).
stabla, dru
i zid B, li
4.5.. Postoji idom B. Zidijeli na dva
što će podjođer, podov
u stablo. Zi Zid C je is
ugi dio. Zid
st 3 je og
još samo jeidovi se moa zida: D1 i
ela konveksvni i plafon
id B je isprespred A, a i
ovi B i C su
raničen zid
edan zid zaogu nalazitD2.
snog oblikanski poligon
ed A pa je kiza B pa je
u dodani.
dom B i p
a dodati: zidti na dvije
a linijom ni će biti
kao čvor dodan u
podjelom
d D. Ali, različite
O
IdziBprK
Slika 4.5.
vim je post
dući kroz pridovi dodav, C, A, dobresječen pa
Kako god, do
Gradnja B
tupak gotov
roces gradnvani u drugailo bi se sta
a samim timobijeno stab
BSP stabla,
, tako da sa
nje stabla, mačijem poreablo kao na m imamo mblo nije dobr
14
treći dio. Lformira lin
ada imamo i
može se prietku. Na pri
slici 4.6.. Omanje čvororo balansira
Linija D je nija B.
izgrađeno st
imijetiti da imjer, da suOvo stablo nova. Takođano, jer su s
podijeljena
tablo.
bi stablo bu zidovi dodne zahtijevađer, stablo ivi zidovi isp
a podjelom
bilo drugačidavani u poa da ijedan zima manju pred prvog
m koju
ije da su oretku D, zid bude dubinu. čvora.
Kpo
Auv
1.
2.ob
PokrTr
Prkabi
DOsvstr
Ilirepo
Ozim
Sli
Kada postojioredak u koj
Algoritam kovidu:
Minimizir
Držati stabilazak stab
onekad ovi reirati više raženje prav
rvo, moglo ada se izabeiste birati zi
rugo, moglovdje bi se
vakoj strani rane bile po
i, mogle bielativno balodjela.
vdje se nećidova, jedno
mape sa mno
ika 4.6. Ov
i mnogo poojem dodajem
oji će odluč
ranje podje
ablo što je mbla u odnosu
ciljevi mogpodjela, a
vog algoritm
bi se minimere podjela, id B prije zi
o bi se držauvijek birapodjele. Na
o dvije podj
i se kombinansiranim (
će detaljno uostavno ćemogo poligona
o alternativ
oligona, kramo zidove u
čiti kojim p
ela. Manje p
moguće višeu na nebalan
gu biti međa minimizima može bit
mizirati brobirase ona
ida D zato š
ati stablo štola podjela ka primjer, mele (iako ov
novati ove (sa određen
ulaziti u algmo birati prva, ali će za n
15
vno stablo
aće, balansiu stablo je v
poretkom b
podjela znač
e balansiransirana stab
đusobno iskliranje podjti kompliko
oj podjela, ikoja daje n
što zid B dij
o je mogućekoja čuva i
mogao bi sevo dijeli zid
dvije idejenim stepeno
goritam biravi zid kao pnaše primje
je kraće i i
rano stablovažan.
birati podje
či manje po
ano. Kraća, bla.
ljučivi: čuvela može
ovano. Nave
ignorišući bnajmanji broeli zid D.
e više balanisti broj zidbirati zid B
d D).
e. Sa skupoom) bira se
anja podjelaodjelu. Ovo
ere raditi veo
ma manje
o će dati br
le trebao b
ligona i ma
balansirana
vanje stabla kreirati neb
est ćemo nek
balans stabloj podjela. N
nsirano, ignodova (plus iB za prvu po
om podjela podjela sa
a. Umjesto to nije idealnoma dobro.
čvorova.
rže pretrage
bi imati dvij
anji obilazak
a stabla zna
balansiraniebalansiranokoliko ideja
la. Ovdje, sNa primjer,
orišući broj ili minus jeodjelu jer bi
koje čuvaja najmanjim
toga, za svano rješenje z
e. Dakle,
je stvari
k stabla.
če manji
im može o stablo. a.
svaki put ne treba
podjela. edan) na i na obje
u stablo m brojem
aku listu za velike
4.
OD
Bzv1,
Nim
st
{
do
Ta
};
St
.2. Primje
bilazak BSPva pravila s
Crtaj čvor)
Crtaj predn
acimo poglvijezdom. O, D1, 5, A, 2
Navest ćemomplementac
truct Tack
ouble x, y
acka(doubl
;
truktura Tac
er obilask
P stabla je sse primijenj
poligone i.
poligone inji čvor).
led na primjOvaj algorita2. Poligoni
Slik
o i objasnitiija data je u
ka
y;
le x = 0,
cka jednost
ka BSP sta
sličan načinuju:
ispred kame
iza kamere
mjer na slici am obilaskasu obiđeni
a 4.7. Obila
i ovdje samu prilogu na
double y
avno sadrži
16
abla
nu na koji se
ere u poret
u obrnuto
4.7.. Zamia obilazi čvstraga napr
azak stabla
mo najvažnia CD-u.
= 0) : x
i x i y koord
e obilazi jed
tku (prednj
om poretku
slimo da jevorove u ovrijed što je u
a sa pozicij
ije dijelove
x (x), y (
dinate koje s
dnodimenzio
i čvor, tren
(stražnji č
kamera navom poretkuupravo ono š
e zvijezde.
koda za 2D
y) {}
su realnog t
onalno BSP
nutni čvor,
čvor, trenut
a lokaciji ozu: 4, D2, 6, što želimo.
D BSP. Ko
tipa i konstr
P stablo.
stražnji
tni čvor,
značenoj C, 3, B,
ompletna
ruktor.
17
struct Linija
{
Tacka a, b; //pocetna i krajnja tacka
Linija(Tacka a, Tacka b) : a (a), b (b) {}
Linija();
void Ispis();
};
Struktura Linija sadrži početnu i krajnju tačku, konstruktor i funkciju za ispis.
struct Stablo
{
Linija *linija; // linija
Stablo *lijevo; // Pokazivac na lijevo podstablo.
Stablo *desno; // Pokazivac na desno podstablo.
Stablo(const Linija l)
{
linija = new Linija(l);
lijevo = NULL;
desno = NULL;
}
void Ispis() { linija‐>Ispis(); }
};
Strukturu Stablo nema potrebe detaljnije objašnjavati.
Funkcija NTP (Nadji tacku presjeka) prima dvije linije, a kao rezultat vraća tačku presjeka.
Tacka NTP(Linija m, Linija o);
Funcija IIS (ispred, iza, siječe) kao parametre prima liniju podjele p, tekuću liniju i reference na tačku ispred i iza. Kao odgovor vraća da li je linija ispred ili iza linije podjele, a ako je siječe onda u tačku ispred smješta onu tačku linije l koja je ispred podjele, a u tačku iza onu koja je iza.
int IIS(Linija p, Linija l, Tacka &ispred, Tacka &iza);
Sljedeću funkciju NapraviBSPStablokoja konstruiše BSP stablo treba malo bolje objasniti.Ona kao parametre prima pokazivač na stablo i listu linija. Ako je lista linija prazna, vraćamo se iz funkcije. Ako nije, idemo dalje. Kreiramo dvije liste Ispred i Iza u koje ćemo staviti liniju po pravilu:
U Ispred, ako se data linija nalazi ispred linije podjele;
U Iza, ako se data linija nalazi iza linije podjele;
Ako linija biva presječena linijom podjele onda je dijelimo na dva dijela i prednji stavljamo u Ispred, a zadnji u Iza.
18
Uzimamo liniju podjele. U while petlji radimo sljedeće: uzimamo linije sve dok lista nije prazna. Funkcija IIS nam daje odgovor kao što je objašnjeno iznad. Ako je linija ispred, stavljamo je u listu Ispred, ako je iza, stavljamo je u Iza. Ako linija siječe liniju podjele pomoću funkcije NTP(nađi tačku presjeka) nalazimo tačku presjeka i prednji dio linije stavljamo u listu Ispred, a zadnji u listu Iza.
Na kraju, ako lista Ispred nije prazna, rekurzivno pozivamo opet funkciju NapraviBSPStablo u koju šaljemo pokazivač na lijevo podstablo i listu Ispred. Analgono uradimo i za listu Iza gdje šaljemo pokazivač na desno podstablo i listu Iza.
void NapraviBSPStablo(Stablo* &stablo, list<Linija> lista)
{
if(lista.empty()) return;
list<Linija> Ispred, Iza;
Linija podjela = lista.front();
lista.pop_front();
stablo = new Stablo(podjela); // uzimamo liniju podjele(pravu)
Ispred.clear(); //isprazni liste ispred i iza
Iza.clear();
int odg; // –1 ispred, 1 iza, 0 sijece
Tacka ispred, iza;
while(!lista.empty())
{
Linija uzmi = lista.front(); //uzmi tekucu liniju
lista.pop_front();
odg = IIS(podjela, uzmi, ispred, iza);
//nadji odgovorispred, iza, sijece
if(odg == _iza) Iza.push_back(uzmi);
else if(odg == _ispred) Ispred.push_back(uzmi);
else
{
Tacka t = NTP(podjela, uzmi); // ako sijece nadji presjek
Ispred.push_back(Linija(ispred, t));
Iza.push_back(Linija(iza, t));
}
}
if(!Ispred.empty())
{
NapraviBSPStablo(stablo‐>lijevo, Ispred);
}
if(!Iza.empty())
{
NapraviBSPStablo(stablo‐>desno, Iza);
}
return;
}
19
Još bi bilo zanimljivo objasniti funkciju backToFrontRender koja prima pokazivač na stablo i tačku gledišta. Ova funkcija renederuje scenu u odnosu na gledište tj. ona je zaslužna za ispravan obilazak stabla.
void backToFrontRender(Stablo *stablo, Tacka glediste)
{
if(stablo != NULL)
{
int strana;
strana = GdjeJeTacka(*stablo‐>linija, glediste);
if(strana == _iza)
{
if(stablo‐>desno != NULL)
backToFrontRender(stablo‐>desno, glediste);
poredane.push_back(*stablo‐>linija);
if(stablo‐>lijevo != NULL)
backToFrontRender(stablo‐>lijevo, glediste);
}
elseif(strana == _ispred || strana == _na)
{
if(stablo‐>lijevo != NULL)
backToFrontRender(stablo‐>lijevo, glediste);
poredane.push_back(*stablo‐>linija);
if(stablo‐>desno != NULL)
backToFrontRender(stablo‐>desno, glediste);
}
}
}
FunkcijaGdjeJeTacka nam vraća odgovor da li je tačka gledišta ispred ili iza linije. Ako je tačka iza linije, prvo obilazimo desno podstablo, ispisujemo liniju, a onda obilazimo lijevo podstablo. Ako je tačka ispred ili se gledište nalazi na liniji, prvo obilazimo lijevo podstablo, ispisujemo liniju, a onda obilazimo desno podstablo. U našoj funkciji umjesto ispisa, liniju stavljamo u vektor poredane, radi potreba prezentacije.
20
5. BSP u 3D
U današnje vrijeme, piloti više ne moraju imati iskustvo prvog leta u vazduhu, već to mogu obaviti na simulatoru letenja. Ovo je jeftinije za kompanije, sigurnije za pilote i bolje za okolinu. Tek nakon mnogo sati provedenih na simulatoru pilotima se dozvoljava da se uhvate palice pravog aviona. Simulatori letenja moraju ispuniti razne zadatke kako bi pilot zaboravio da se ustvari nalazi u simulatoru. Važna stvar je vizualizacija. Piloti moraju biti u mogućnosti vidjeti krajolik iznad kojeg lete ili pistu na koju slijeću. Ovo uključuje oboje, oblikovanje krajolika i iscrtavanje oblika. Za iscrtavanje scene moramo odrediti za svaki piksel na ekranu objekat koji je vidljiv na tom pikselu. Ovo se zove uklanjanje skrivenih površina (hidden surface removal). Također, moramo primijeniti izračunavanje sjenčenja, tj. moramo izračunati jačinu (intenzitet) svjetla koje vidljivi objekat emituje u smjeru tačke gledišta. Kasnije, zadatak postaje mnogo vremenski zahtjevan ako želimo realistične (uvjerljive) slike: moramo izračunati koliko svjetla stiže do objekta, bilo direktno od izvora svjetla, ili indirektno odbijanjem od ostalih objekata, uzimajući u obzir interakciju svjetla sa površinom objekta da bismo vidjeli koliko je svjetla odbijeno u smjeru tačke gledišta. Ako iscrtavanje simulatora letenja mora biti izvedeno u realnom vremenu onda nema vremena za precizna izračunavanja sjenčenja. Zbog toga se primjenjuje brza i jednostavna tehnika sjenčenja, a uklanjanje skrivenih površina postaje važan faktor u vremenu iscrtavanja.
Z-spremnik (Z-buffer) algoritam je veoma jednostavna metoda za uklanjanje skrivenih površina. Ova metoda radi na sljedeći način. Prvo, scena se transformiše tako da je smjer gledanja pozitivan smjer z-ose. Potom se objekti nasumice konvertiraju skeniranjem. Konvertiranje objekta skeniranjem označava određivanje koje piksele pokriva u projekciji; ovo su pikseli gdje je objekat potencijalno vidljiv. Algoritam zadržava informaciju o već procesiranim objektima u dva spremnika: okvirnom spremniku i z-spremniku. Okvirni spremnik čuva za svaki piksel intenzitet i trenutno vidljiv objekat, tj. objekat koji je vidljiv među već procesiranim objektima. Z-spremnik čuva za svaki piksel z-koordinatu trenutno vidljivog objekta. (Preciznije, on čuva z-koordinatu tačke na objektu koja je vidljiva na piskelu.) Sada pretpostavimo da selektujemo piksel dok konvertujemo objekat. Ako je z-koordinata objekta na pikselu manja od z-koordinate sačuvane u z-spremniku, onda novi objekat leži ispred trenutno vidljivog objekta. Stoga, upisujemo intenzitet novog objekta u okvirni spremnik, a njegovu z-koordinatu u z-spremnik. Ako je z-koordinata objekta na pikselu veća od z-koordinate sačuvane u z-spremniku, onda novi objekat nije vidljiv, a okvirni i z-spremnik ostaju nepromijenjeni. Z-spremnik algoritam se jednostavno implementira u hardveru i prilično je brz u praksi. Zbog toga je ovo najpopularnija metoda uklanjanja skrivenih površina. Ipak, algoritam ima nekih negativnosti: Potrebna je velika količina dodatnog prostora za pohranu za z-spremnik i potrebna je dodatna provjera na z-koordinatu za svaki piksel pokriven nekim objektom. Slikarev algoritam (Painter's algorithm) izbjegava ovedodatne troškove tako što prvo sortira objekte po udaljenosti
odnaprinjeN
biOpiresl
DN
kozam
d tačke gledajudaljenijerimjenjivatintenzitet u ednostavno p
Na lijevoj str
ili učitani. Svaj pristup iksel, zadnjiezultujući isojeve boje j
a bismo priNažalost ovo
oje objekte avisi od po
moramo izrač
dišta. Objekg objekta bilo kakavokvirni sp
prepišu. Slirani, objekti
Slike nakonje tačan jer
i upisani obspravnom izjedan preko
imijenili ovo nije tako l
sjeći, gdje szicije tačkečunati pored
kti su scan-kod tačke
v test na njepremnik. Uka 5.1 prikai su prikaza
Slika 5.1 S
n što su prvr se objekti
bjekat u ulazzgledu scen
o drugog, iz
vu metodu mako. Što jej
sjeći i sortire gledišta, sdak.
21
konvertovagledišta.
egovu z-kooUlazi koji s
azuje algoriani sa broje
Slikarev alg
vi, drugi i tri učitavaju u
azu okvirnogne. Proces pčega i dola
moramo bitijoš gore, po
odnoscikluspojavispravmorajednoporedrezulttrougjednoda ćeza no
ranje dijelovsvaki put k
ani u tzv. poKada je
ordinatu, nesu bili prijitam na scenvima koji o
goritam u a
reći trougaou poretku og spremnikapodjeća na
azi naziv ovo
i u mogućnoredak po dus među se. Kad se
vi, nijedanvnim izglemo preki
og ili višedak po dubtat podjele
gla, na primog od njih ne ispravno ovi skup odva objekata
kad se tačk
oredak po dobjekat uč
ego uvijek pe u okvirn
ni koja se saodgovaraju p
akciji
o učitani suod nazad kaa će biti najnačin na k
og algoritm
osti da brzoubini ne moobjektima e takvo cin poredak edom scenenuti ciklu
objekata ini postoji . Kada po
mjer, uvijek na trougao prikazivanj
d četiri objea je skup proa gledišta p
dubini, počičitan, ne prepisujemonom spremastoji od tri poretku u k
u također pra naprijed: Zjbliži tački
koji slikari ma.
o sortiramo ora uvijek p
može saiklično pon
k neće ree. U tom use presij
i nadajućiza dijelove
ostoji ciklusmožemo p
i četverougje poretka pekta. Izračuoces. Pošto pomjeri mi
injući od moramo o njegov
mniku se objekta.
kojem su
rikazane. Za svaki gledišta, stavljaju
objekte. postojati: adržavati navljanje ezultirati
slučaju ecanjem i se da e koji su s od tri podijeliti gao, tako postojati unavanje poredak ponovo
5.
Dbizaprlinprnamkočvjeto
Zaot
i
Stpr
.1 Definic
a bismo doinarnu podjajedno sa strostora je dnijom , oresijecanja astavlja sve
modeliran, nonačne podjvor odgovaednodimenzom slučaju o
Sli
a hiperravtvoren polup
tablo binarnrostoru je de
Ako jsačuvsačuv
cija BSP s
obili osjećajjelu prostortablom kojeobijena rekonda podijne samo de dok u svnaravno, kadjele; dio obara linije pionalni obje
odgovarajuć
ika 5.2 Bin
an :prostor ogra≔ {( ,≔ {( ,
ne podjele pefinisano ka
je ( )van kao ovajvan u listu o
stabala
j šta je BSra (BSP –e odgovara kurzivnom pelimo gorna sijeku ravvakom regiao binarno bjekta koji lpodjele; ovaekti (duži),ći unutrašnji
narna podje+ +aničen sa , … , ):, … , ):
prostora, ili ao binarno s≤ 1 onda j list. Ako jznačen sa
22
P stablo, pbinary spa
toj podjeli. podjelom ranji dio ravnvan, već siionu ne os
stablo. Svleži na straa linije je onda objeki čvor čuva
ela prostora⋯+i neka b: +: + BSP stablostablo sa
je list; dije list označ( ).
ogledajmo ace partitio
Kao što seavni linijomni sa , aijeku i objetane po savaki list o
anici je sačusačuvana
kti mogu bove objekte
a (BSP) i o+ = 0bude negativ+⋯+
+⋯+o, za skup sljedećim o
io objekta učen sa , on
sliku 5.2. On) za skup
e može vidjm: prvo podia donji dioekte na dijeamo jedan vog stabla
uvan kao liskao čvor. iti sadržanie u listi.
dgovarajuć0, neka van otvoren+
+ objekata u
sobinama:
u (ako ponda je (vjero
Ova slika pp objekata eti, binarnaijelimo cijeo sa itdelove. Dijeldio. Taj p
a odgovara st. Svaki unKada su n
i u linije po
će stablo
bude pn poluprosto> 0}
< 0}. u -dimezio
ostoji) je ekovatno praz
pokazuje u ravni,
a podjela elu ravan d. Linije ljenje se roces je stranici
nutrašnji na sceni odjele; u
pozitivan or:
onalnom
splicitno an) skup
VstnaprPrčustst
Limje⋄5.
Ako skupostablastabla
Veličina BSPabla. Drugiastanu nakorazan potprrecizno govuvanje, jer nabla kako abala za dat
istovi u BSmožemo idene presjek po= + ako je 3 prikazuje
je ( )om ( ) obja za skua za skup
P stabla je im riječima
on podjele. rostor, ondvoreći, veline kaže ništsmo definiti skup obje
Sl
SP stablu prntifikovati kluprostora
desno podse ovo: sivi čv
) > 1 ondajekata koji cup ≔ {p ≔ {
ukupna vea, veličina Ako BSP na je broj čičina stablata o količinisali je dob
ekata.
lika 5.3 Od
redstavljaju konveksnu r⋄ gdje je
stablo. Regivor odgova
DijeproizpriklUobželimskupulaz
23
a korijen cijeli sadrža∩ : ∈∩ : ∈eličina skupBSP stabla
ne sadrži bčvorova sta
a ne govorii memorije
bra mjera u
nos između
stranice poregiju sa svapredak od
ija koja odgara sivoj reg
eljenje hipzvoljno. Zaladno ogran
bičajeno ogmo konstruip kandidataznih dijelova
od čuvani u . Lij}, a desn}. pova ( )a je ukupaeskorisne liabla linearai ništa o kpotrebne za
u poređenju
u čvorova i
odjela koje akim čvorom
i ⋄= −ak
govara korijgiji ∩ ∩erravni ko
a svrhe izračničiti skup dgraničenje jisati BSP zaa za pravea. BSP koja
va hiperravjevo dijete o
no dijete od
između svan broj dijeinije podjelan u odnos
količini mema jedan dio.
u sa kvalite
regiona
BSP inducim u BSP ko je lijev
enu od je ∩ .
orišteno u čunavanja, kdozvoljenih e sljedeće.a skup dužipodjela je
a koristi tak
van , zajod je korid je korij
vih čvorovaelova objekle, linije kosu na BSPmorije potr. Ipak, veličetom različi
ira. Generastablu : ov
vo podstablo
e čitav prost
BSP mokako god, m
h podjela hip Pretpostav
i u ravni. Oe skup prodkve linije po
edno sa ijen BSP jen BSP
a BSP kata koji oje dijele P stablo. rebne za čina BSP itih BSP
lnije, mi va regija o od , a
or. Slika
ože biti može biti perravni. vimo da čigledan dužetaka odjela se
zoBogm
5.
Pr
koda
izdammdionna
A1 2a3 4 5 6 7 8 9 1011121314
Prštnj
ove samopoSP koja sagraničenje s
minimalne ve
.2 BSP sta
retpostavimobjekata u
oristiti daa prikažem
bude taznad ravni pa onda nije
može zaklonmožemo sig
ijelove objenih u . Pa isti način.
Algoritam SNeka je k
ako je listondaUu sup
0 1 2 3 4
rimijetimo do su poligojih.
odjela (autoamo koristi samopodjeleličine, vidj
abla i Slik
mo da smo izu 3D pros
a dobijemo pmo skup
ačka gledištpodjele sačuedan od obniti nijedan gurno prikaekata) u po
Poredak za dOvo je sum
LIKAREVAL
korijen od t Učitaj dijelo
protnom ak on u
da mi ne crni 2D objek
o-partition).ravni kroz
le strogo. Aet ćemo da
karev algo
zgradili BSstoru. Pitanjporedak po slikarevim ta i pretpos
uvane u korbjekata ispo
od objekatazati sve odstablu dijelove obj
mirano u slje
LGORITAM(.
ove objektako ∈ndaSLIKARE
UčitajSLIKA
suprotnom
rtamo poligkti i zbog to
24
. Za skup pz ulazne poAli, mada sće dati razu
oritam
P stablo nje je kako
dubini akoalgoritmom
stavimo da rijenu od .od ravni poata iznad. Sobjekte (p prije prik
jekata u dvedećem algo
( , )
a u ( ).
EVALGORIT
j dijelove obAREVALGOR
m akoondaSLIK
Uč SL
u suprotn SL
SL
gone u ( )oga nisu vid
planarnih poligone kaosamopodjeleumno mala.
na skupu omožemo moramo m. Neka
leži Jasno je
odjele ne Stoga, mi preciznije, kazivanja a podstablaoritmu.
TAM( ,bjekta u (RITAM( ,∈
KAREVALGO
čitajdijeloveLIKAREVAL
nom (*LIKAREVAL
LIKAREVAL) kada dljivi sa tačk
oligona u 3o ravni pode neće uvij
a i d
) ). )
ORITAM(e objekta u
LGORITAM(∈ *) LGORITAM(LGORITAM(
leži na ravke koja leži
Ilu
3D, samopodjele. Čini ek dati BS
dobije se rek
, ) ( ). , ) , ) , )
vni podjelei u ravni koj
ustracija
odjela je se da je
SP stabla
kurzivno
e zato ja sadrži
EfkoBtaPrdaobstsklebijeprtrisk
5.
Kneslj
AUIz1.2. 3.4.5.
fikasnost ovoji koristi BSP stabla.
akav način rije nego mati mala BSbjekata dozabla zato
krivenih poetenja. Poštismo tipoednostavnimredstavljati iangulisanekup trouglov
.3 Konstr
Kada god želeki uvid razjedećem od
Algoritam 2D
Ulaz. Skup dzlaz. BSP sta ako ( onda
u sup
vog algoritBSP stablaZbog togada podjela
možemo razvSP stabla, mzvoljavamo.
što trebaovršina, recto je brzinaove objek
m: ne bismkao polie
. Tako mi zva u 3D pro
ruisanje B
limo da rijezmatranjem
dlomku.
DBSP( ) duži = {ablo za . ) ≤ 1
Napravi ssačuvan evrati
protnom (*K
tma, ili biloa, zavisi uva moramo a objekata viti strategijmoramo od
Zainteresoamo brz cimo za poa naša glavkata na mo trebali edarske oblzapravo želiostoru.
BSP stabla
ešimo neki 3m planarne v
Neka je Sćemo naškoje sadrlinije podkonstrukcduž .
, , … , }stablo koje seksplicitno.
Koristi (← { ∩ (25
o kojeg algveliko od v
izabrati rabude minije podjele k
dlučiti koje ovani smo značin uklaotrebe simuvna briga,
sceni zkoristiti k
like. Pretpimo da kons
a
3D problemverzije prob
S skup od šu pažnju nrže jedan oddjele. Namciju BSP. N
}. se sastoji od
)kao liniju ( ) : ∈
goritma veličine vni na imalna. koja će tipove
za BSP anjanja ulatora trebali
zadržati krive površostavićemo
struišemo B
m, obično nijblema. To j
nepresijecna samopodd dijelova u
meće se sljeNeka je sa (
d jednog čvo
podjele.*)}; ←2
šine, već o da su sv
SP stablo m
je loša idejae ono što ć
cajućih duždjele tako du S razmatraedeći rekur( ) označen
ora lista, gd
2DBSP( )
bismo sveve strane
male veličin
a da prvo stćemo da ur
ži u ravni. Oda ćemo samati kao kandrzivni algorna prava koj
dje je skup
)
e trebali poliedra
ne za dati
teknemo radimo u
Ograničit mo linije didate za ritam za ja sadrži
6.7. (8.
Jastumdapoduraćere
Dko
A1.2.3.
Prpropprinodkostrskdupombiunu davaodpo
( )}.
asno je da ablo? Moždmjesto slijea uzmemo ohlepno: použije trošeandomizacijemo nasumiezultuje pril
a bismo imonstrukcije:
Algoritam 2D
Generiši n ←2DBS
vrati
rije nego rimijećujemptimizacija.rvih nekolnduciraju dgovaraju onstruišemoranicu . M
kroz. Odabiuži za presiodjelu drug
može biti iski nerazumnnaprijeđenasuprotnom.
a kažemo darijable sa sd već dodanodjela.
Kr
vr
ovaj algorida bismo mpog uziman∈ takvoostoje postanje vremei: ako je tešice uzeti duično malim
mplementir
DRANDOMBasumičnu pP( ′) analiziramo
mo da je mo Pretposta
liko pravihpotpodjelučvorovima
o. Razmoogu postojaranjem jednijecanje ngih duži unključena iz no ne isk strategija j. Da bismo
da li je dio svakim dijelnih linija po
← { ∩ (reiraj BSP s
, de
rati
tam konstrumogli malo v
nja prvog seo da ( ) savke duži kna. Šta oško odreditiuž da bismo
BSP stablim
ali ovo, st
BSP(S) permutaciju
o nasumičnoguća jedna
avimo da h podjele. u ravni a u BSP otrimo jeati duži kojene od ovih pneće uzrokonutar , dodaljeg razm
koristiti pre da uzmemimplementislobodna plom koje goodjela. Kad
26
( ) : ∈stablo sa čvesnim podst
uiše BSP sviše truda uegmenta iječe što mkod kojih o
onda još mi pravi izbo
o napravili pma.
tavljamo du
= ,…ni algoritaa jednostavsmo izabr
Ove pračijestrani
stablu koednu take presijecajpresijecajućovati nikakok sama dmatranja. Brednosti tamo slobodneirali ovu op
podjela. Da ovore da li da ove varij
}; ←2vorom korijetablom , i
stablo za skuložiti na bir
. Jedan prilmanje drugihovaj pristupmožemo urr, mi ćemo
podjelu. Kao
uži u nasu
, skupa
am, vna rali ave ice oje
kvu u ćih
kvu duž ilo
akvih sloboe podjele kaptimizaciju, bismo zavrlijeva i desnable postan
2DBSP( )enom , lijei sa ( ) =kup . Ali, ranju pravolaz koji namh dijelova. p ne radi. Draditi? Odto uraditi no što ćemo
umični pore
.
odnih podjad je god mo
mi moramoršili ovo, drna krajnja t
nu tačne, on
) evim podsta= { ∈ ∶ da li je on
og dijela za m pada na uAli, ovo jeDalje, traže
dgovor se nasumice. D
vidjeti kasn
edak prije
djela. Daklmoguće, a na
o biti u moržimo dvijetačka leže nnda je dio s
ablom ⊂no malo podjelu, um jeste
e previše enje ove krije u
Dakle, mi nije, ovo
početka
le, naša asumične gućnosti
e logičke na jednoj slobodna
Sajene
Pogene
prilupoveve
L
Disj
ud
ada analiziednostavnime prave razl
očinjemo anenerisani. Neke premut
rimjer, razmustrovano uoredak, naseličina BSPeličinu BSP
ema 5.1 ( log ). Dokaz: Neka
ječene kada
daljenosti du
dist
iramo prefm, analizirat
iku asimpto
nalizirajući Naravno, ovtacije mogu
Sl
motrimo kolu dijelu (a)suprot, dajeP stabala varP stabla, koj
Očekivan
a je fiksana je ( ) do
uži sa pošto
= bro
formanse aćemo verzi
otski.)
veličinu Baj broj uskou dati mala
lika 5.4. Raz
ekciju od 3) ove slikee samo tri drira sa koriše je,prosječ
broj dijel
n dio u . Modana algori
N
pmk
k
oo
ovanjem fikojdužikoji27
algoritma 2iju bez slob
BSP stabla io zavisi od pa BSP stab
zličiti porec
duži na sli, onda je rdjelića, kaoštenim permčna veličina
lova gener
Mi ćemo anaitmom kao s
Na slici 5.4
presječen kamože biti prkoje su tako
i . Slje
korištena pr
ono šta se dod . Ovksne duži :sijeku ( )+∞
2DRANDOM
bodnih podj
ili, drugim posebne pe
bla, dok dr
ci daju razli
ci 5.4. Ako rezultat da o što je pri
mutacijama, a među svih
risanih alg
alizirati očesljedeća lini
4 možemo
ada je ( )resječena skođer presječedeće, kad
rije ( ), o
događa na slva razmatra: )između
MBSP. Da bela. (Ustvar
riječima, brrmutacije gruge daju v
čita BSP
su dijelovi imamo pet
ikazano u dmi ćemo an! permutac
goritmom 2
ekivan broj ija podjele.
vidjeti da l)dodana, uzkroz sa (čene sa ( )a je prava
onda ona šti
lici 5.4.(b): anja vode
i ako
bismo ga ri, slobodne
roj dijelovagenerisane uveoma veli
obrađeni kt djelića. Ddijelu (b). Znalizirati očcija.
2DRANDOM
ostalih duži
li je ili nij
zimajući u ), ovisno o)i koje su "a kroz tak
iti od
dio zaštinas do d
( )siječeinače
zadržali e podjele
a koji su u liniji 1: ka. Kao
kao što je Drugačiji Zato što čekivanu
MBSP je
i koje su
e dio
obzir da o dužima između"
kvu duž
. Ovo je
itio je definicije
28
Za bilo koju konačnu udaljenost, postoje najviše dva dijela na toj udaljenosti, jedan sa svake strane .
Neka je ∶= dist , i , , … , duži između i . Postavlja se pitanje koja je
vjerovatnoća da ( ) siječe kada je dodana kao linija podjele. Da bi se ovo desilo,
mora doći prije u nasumičnom redanju i, još više, mora doći prije bilo koje duži
između i , koje štite od . Drugim riječima, od skupa { , , , . . . , } indeksa,
mora biti najmanji. Zbog toga što je poredak dijelova slučajan, ovo implicira da je
Pr ( )siječe ≤ 1dist + 2. Primijetimo da mogu postojati duži koje nisu presječene sa ( ), ali čije produžetke štiti
. Ovo objašnjava zašto izraz iznad nije jednakost.
Sada možemo ograničiti očekivani ukupni broj presjeka generisanih sa :
E broj presjekagenerisanih sa ≤ 1dist + 2
≤ 2 1+ 2
≤ 2 ln
Zbog linearnosti očekivanja možemozaključiti da očekivani ukupni broj presjeka generisanih svim dijelovima iznosi najviše 2 ln . Kako smo počeli sa duži, ukupni očekivani broj dijelova je ograničen sa + 2 ln .
Ovim smo pokazali da očekivana veličina BSP stabla koje je generisano sa 2DRANDOMBSPiznosi + 2 ln . Kao posljedicu, dokazali smo da BSP veličine + 2 ln postoji za bilo koji skup od duži. Dalje, najmanje polovina od svih permutacija vodi do BSP-a veličine + 4 ln . Možemo koristiti ovo da bismo našli BSP te veličine: Nakon pokretanja 2DRANDOMBSPmi testiramo veličinu stabla i ako ona prelazi granicu, jednostavno pokrenemo algoritam ponovo sa novom slučajnom permutacijom. Očekivani broj pokušaja je dva.
Ovdje smo analizirali veličinu BSP-a koje je napravljeno sa 2DRANDOMBSP. Postavlja se pitanje šta je sa vremenom izvršavanja. Opet, ovo zavisi od slučajne permutacije koja je korištena, tako da moramo gledati očekivano vrijeme izvršavanja. Izračunavanje slučajne permutacije zahtijeva linearno vrijeme. Ako zanemarimo vrijeme za rekurzivne pozive, onda je vrijeme potrebeno za izvršavanje algoritma 2DBSP linearno u odnosu na broj dijelova u . Ovaj broj nije nikad veći od , ustvari, on postaje manji sa svakim rekurzivnim pozivom. Konačno, broj rekurzivnih poziva je očito ograničen ukupnim
br
T
Iadoovkonerara
sa
Prpo
skPrpr
AratroodOtj.sako
AUIz1.2. 3.4.5.6.
rojem gener( log ), eorem 5.2 ( log ).
ako je očekobra, vrijemvo nije takonstruisanjaevjerovatnoazočaravajućadu nećemo( log ) uamopodjelu,
rirodno pitaoboljšana. D( ) za bilokupovi dužrimijetimo rostora za jo
Algoritam koavni možeodimenziond neprespet ćemo se. koristit ćemadrže trougloja ga sadrž
Algoritam 3D
Ulaz. Skup zlaz. BSP sta ako card(S onda
u sup
risanih dijeltako da dob
BSP velič
kivana veličme izvršavanko važno za je kvadrao da se desi uće. Koristeć
o razmatratiu ( log ), kako god,
anje je da li Da li bi na o koji skup ži za kojeda algoritamoš malo pob
oji smo ope biti genali prostor.ijecajućih te ograničiti mo samo ralove iz . Zži označavam
DBSP(S) = { , , …ablo za S. S) ≤ 1
Kreiraj st savrati T
protnom (* ← { ∩← { ∩
lova, koji jebijamo sljed
čine ( ločina BSP-anja algoritmzato što seatno samo u praksi. Ipći se prilazo, ovo može) vremenu si u praksi d
veličina BSprimjer bilod radvo
e bilo kojim koji smoboljšanja.
isali za sluneralizovan. Neka je trouglova una samopod
avni podjelea trougao rmo sa ( ).… , } troug
ablo T kojeačuvan eksp
Koristi (∩ ( ) :∩ ( ) :29
e ( logdeći rezultatog ) može
a koje je kma je pomalo
e konstrukkad je BS
pak, s teoretsom zasnovane biti poboljsa determin
daje BSP ko
SP-a generilo moguće ojenih dijeloi BSP mo
o predstavili
učaj u n na
skup u ℝ . djele, e koje ravan .
glova u ℝ .
e se sastoji opilicitno. ) kao rava∈ }; ∈ };
). Stoga, ukt:
biti izraču
konstruisanoo razočaravcija izvodi
SP veoma nske tačke glnim na segmljšano: možnističkim algoje je neznat
isanog sa 2D
smisliti algova linija u ora imati i ne dostiže
od jednog čv
an podjele. *T+ ←3T– ←3
kupno vrijem
unato u oč
o sa 2DRA
vajuće. U mn off-line. nebalansiranledišta vrijementnim stae se konstrugoritmom. tno veće.
DRADNOMBgoritam koji
ravni. Odgveličinu (
e ovu grani
vora lista, g
*) 3DBSP(S+) 3DBSP(S–)
me konstru
čekivanom v
ANDOMBSP nogim aplikUostalom,
ano, što je eme konstruablima, kojiruisati BSP Ovaj prilaz
BSP može bi daje BSP govor je ne:( log / loicu, dakle m
gdje je skup
uisanja je
vremenu
prilično kacijama
vrijeme prilično
uisanja je i u ovom veličine
z ne daje
biti bitno veličine
: postoje g log ). mora biti
S
7. 8.
Vdiočdoalal
5.
jeprPoskstr
ilupokakopriz
Veličina rezuijelova od očekivanu veobar rezultlgoritma teolgoritma, pr
.4 Veličin
e koristimo resječene sostoji jedankroz beskorrani, onda j
Slika ustracije, pooslije obradao da je genoristi ( ) rava podjelzmeđu ( )
Kreiraj B stavrati T
ultirajućeg ostalih. Kaeličinu prvoat u praksoretski. Zatremda je alg
na BSP sta
u svim ćea . (Jedno
n izuzetak odrisna za ćelie ne dijelim
5.5 pokazotpodjela k
de dijelova nerisana pro
kao pravu e u potpro i ( ) zato
SP stablo Tablo T+, i sa
BSP-a opeto u planarno stavljanjei. Kako goo ćemo u s
goritam opis
abala u 3D
elijama preostavna rekd pravila, a iju zato što
mo.
zuje ovo noja je prika
, i (uomijenjenim
podjele u storu desnoo što je to o
30
T sa čvoroma ( ) = {t zavisi od nom slučajuem trouglovod, nije posljedećem psan iznad vj
D prostor
Slučajni 3D propoglavljuopisan slučajnogod je msada kanepovezkoristim
esječenim tkurzivna imto je da mi
o svi trouglo
na dvodimeazana je genu ovom por
m algoritmopotprostoru
o od ( ). ovdje beskor
m korijenom ∈ : ⊂poretka tro
u, možemova u slučajoznato kakpoglavlju anjerovatno su
ru
algoritam ostoru koji u je skoro iznad: uzm poretku moguće. Sl
ad trougao ane ćelije. o neku ravatom ravni, mplementacdijelimo sv
ovi u toj će
enzionalnomnerisana algetku). U dijm. Primijetu ispod (
Prava ( )risno.
v, lijevo po( )}. ouglova; neo pokušati djni poredak
ko analiziranalizirati jeuperioran u
za konstrukćemo an
isti kao pzima u o
i pravi slolobodna po
iz dijeJedina raz
an ( ) kaone samo u
cija stoga nve ćelije sa eliji leže po
m primjeru.goritmom pelu (b) potp
timo da prom), i da je ) nije koriš
odstablo T–,
eki poreci dda dobijem
k. Ovo običati ponašanednu varijan
praksi.
kciju BSP nalizirati upoboljšani aobzir trougobodne podjodjela se poeli ćeliju nzlika je ta o ravan podu ćelijama nije više m( ): kad je
otpuno na je
. U dijelu prethodog ppodjela je pmijenjeni a( ) korištštena u pot
, desno
daju više mo dobro čno daje nje ovog ntu ovog
stabla u u ovom agoritam glove u djele kad ojavljuje na dvije da kada
djele, mi koje su
moguća.) e podjela ednoj od
(a) ove poglavlja rikazana lgoritam tena kao tprostoru
Pr
AUIz1.2.3.4.
Sl
Lizm
Dtro
linbuslkojekorajepruzna– navabr
romijenjeni
Algoritam 3D
Ulaz.Skup zlaz. BSP sta Gener zai ← radi K
ljedeća lem
ema 5.3 Očmeđu n!mog
Dokaz. Dokaougao ∈≔ { ,… ,nija sijeku ude skup sobodnih pooje je ednostavno ojeI inducirazumjeli, rae tretiresijeca ; zrokuje nijea inducir
takvu straapravljena kanjskimstranroj podjela
Slik
algoritam m
DRANDOMB= { , , …ablo za S. riši slučajnu← 1don
Koristi (Napravi s
a analizira b
čekivani brogućih perm
azat ćemo presječen} je sku, a neke n
svih presjeodjela broj
isječen obroj stranicra na . Dazmotrimo tiran, uzimas druge str
ednu podjeluranog sa ∖anicufzovemkroz ovaj dnicama, tj. na uzro
ka 5.5 Orig
može biti su
BSP2(S) … , } trougl
u permutacij)da podijelisve moguće
broj fragme
oj fragmenautacija je
granicu nan. Za trougaup od najvišne. Za linijueka . Zbofragmenata
općenito nica u uređen
Da bismo ovtrenutak kaajući da rane u na . Seg∖ { }. Ako,
mo unutrašndio od . Dstranicama
okovanih sa
31
ginalni i mo
umiran na sl
lova u ℝ .
iju , , … ,iš svaku ćel slobodne p
enata generi
ata objekta g( ). a očekivanoao sa <še − 1 linu koja preog
a u nije nju vo
ada
ne gment , takvastrannjom stran
Drugačije rekoje su inc
a ( )je
odificirani a
ljedeći nači
, skupa
liju gdje je ppodjele.
isanih algori
generisanih
om broju f< definisaćnija koje ležesijeca d
može presjnicaf nije incnicom – onečeno, (cidentne sa ednak je br
algoritam
n:
.
podjela kori
itmom.
h algoritmom
fragmenata ćemo ≔že u ravni efinišemo
jeći nekolikcidentna sa nda je slob) samo ujednom odoju ivica k
isna.
m 3DRANDO
u kojem j( ) ∩ (( ). Neke≔ ∩
ko stranica ujednom od
bodna podjuzrokuje prd tri ivice koje d
OMBSP2
e fiksan ). Skup od ovih . Neka I
uređenja ivica
jela već resjeke u
. Stoga, doprinosi
vavatrePopi
Zol. e1
prsk
AondupeočstsadasakofrU
Kod
Dčese
Lko
anjskim straažno da je etirani. Ovoostavlja se itanje moram
onapravel uPokazuje s
1, e2 i e3 ivresjekli unukupom L na
Ako je ukupnda je prouži (1). ermutacija, čekivan brooga očekiva
a ( )izaje očekivaa svakom ronstantan. Oagmenata u
Ukupan broj
Kvadratna gdmah dokaz
ostignuta gemu se nadae ne možem
ema 5.4 Pooja samopod
anicama urekolekcija
o nije slučajpitanje koj
mo prvo ogr
u uređenju pse da za urevice od iutra morajua ravni ( )pan broj iviosječan bro
Zato što onda je
oj ivica na dan broj frag
znosi (1). an broj fragravni podjeOvo implicunutar kojefragmenata
granica na zuje da BSP
granica je jamo kada im
mo nadati iče
ostoje skupodjela ima ve
eđenja na vanjskih st sa algoritmji je očekivraničiti uku
pravih u raveđenje od mi neka ( )u biti zona ). Stoga, uk
ica vanjskihoj ivica ko
je , … ,to i , … ,
duži je gmenata na Isti argume
gmentacijanele ( ) kira da je og je pres
a je stoga
očekivanojP stablo kva
jako obeshrmamo skup emu boljem
ovi na n neeličinu Ω(
32
inducirantranica nez
mom u prethvani broj taupan broj ivi
vni definišem linija kom) bude linij
od ili (kupan broj i
h lica (oje leže n
slučajn. Dakl
konstantanuzrokova
ent pokazujna generisakroz (očekivan brosječen (
= veličini p
adratne velič
rabrujuća. Kod 10 000
m ako se ogra
epresijecaju).
nog sa I. (Uzavisna od hodnoj sekcakvih ivica.ica vanjskih
e se kao skumpleksnost z
ja kroz z), ( ) ilivica vanjsk),
na na e,
n i an je an ) oj ). = ( ). podjele genčine postoji
Kvadratna trouglova. aničimo sam
ućih trouglo
U analizi kojporetka u iji, koji je uDa bismo
h stranica.
up lica uređezone iznosiOza i = 1, 2,i ( )u ure
kih lica izno
nerisanom s.
veličina BSSljedeći teo
mo na samo
ova u 3D pr
oja slijedi, vkojem su
uzrok modif odgovorili
đenja presječO(m). Neka, 3. Ivice keđenju indu
osi ( ).
sa 3DRAND
SP stabla norem nam gopodjele.
rostoru za
veoma je , … , fikacije.) i na ovo
čenog sa a su sada koje smo uciranog
DOMBSP
nije ono govori da
koji bilo
Dčečeskyz(Ptrovi
movtv1)po
općeko(p
Pr5.nu
odpoko
Dokaz. etverouglovetverouglovkupa čz-ravni kaoPrimjer takouglova, aizualizirati.)∶= (
minimalna vakvu konvrdimo da je) − 1. Doko + . T(1, 0) i pćenitosti, pe podijeliti oja moraju bpostavka). A
retpostavim4 ograničen
užno ima k
dvojimo skuodjele nisu onfiguracija
Posmatrajmva koji se sava paralelničetverouglovo što je ilukođer radiali četvero) Neka je ), i nveličina
nfiguraciju e ( , )kaz se iz
Tvrdnja je o(0,1) pa spretpostavimsve četverobiti tretiran
Ako m označ(mo da se nisnje na samokvadratnu v
Slika
up od skuu stanju da
a se dobij
mo koastoje od skuih sa xy-rva paralelnstrovano nai i sa skuglove je ∶= (
neka je (samopodjel(postavku= ( + 1)
vodi indukočigledno tasada razmomo da samoouglove u e rekurzivnčava broj če, ) = 1= 1= (smo ograničopodjele je deličinu, čak
a 5.6 Gener
upa sa ra daju malia na sljed
33
lekciju upa ravni i nih sa a slici. kupom
lakše ( ), a , ) le za
u). Mi )( +kcijom
ačna za otrimo slučopodjela bira
. Štaviše,no imaju tačetverouglov1 + ( ,1 + ( + 1)( + 1)(čili na samodefinitivno k i kad mož
ralna konst
ravni paralei BSP za kdeći način
čaj gdje je a četveroug, konfiguracčno istu formva u koji l) + ( −)( + 1) −+ 1) − 1
opodjele. Uloša ideja: žemo lako
trukcija do
elnom sa xzonfiguraciju. Počinjem
+ >gao r iz skupcije (postavmu kao i poleže iznad r− 1, ) 1 + ( −donjoj gra
pokazali smdobiti linea
nje granice
z-ravni. Ali u (postavku
mo uzimaju
> 1. Bez gpa . Ravavke) dvije početna konfir, onda imam
− )( + 1anici u dokamo da takvaaran BSP a
e
čak i neogu) na slici 5ući rešetku
gubljenja an kroz r podscene iguracija mo
1) − 1
azu leme a podjela ako prvo
raničene 5.6. Ova uu ravni
34
napravaljenu od /2 linija paralelnih sa x-osom i /2 linija paralelnih sa y-osom. (Umjesto linija mogli smo uzeti veoma duge i tanke trouglove.) Iskrivimo malo ove linije da bismo dobili konfiguraciju na slici 5.6; linije sada leže na tzv. hiperboličkom paraboloidu. Konačno, pomjerimo linije paralelno ka y-osi malo gore tako da se linije više ne sijeku. Ono šta smo dobili je skup linija = , = ∶ 1 ≤ ≤ 2 ∪ = , = + ∶ 1 ≤ ≤ 2
gdje je ε mala pozitivna konstanta. Ako je ε dovoljno malo, onda BSP mora presjeći najmanje jednu od četiri linije koje omeđuju ćeliju rešetke u neposrednom susjedstvu te ćelije. Formalni dokaz ove činjenice je elementaran, ali naporan i ne osobito poučan. Ideja je pokazati da su linije iskrivljene na takav način da se nijedna ravan ne uklapa istovremeno kroz četiri "otvora" na svojim ćoškovima. Pošto je broj ćelija rešetke ovdje kvadratni broj, ovo će rezultirati sa ( ) fragmenata.
Teorem 5.5 Za bilo koji skup od n nepresijecajućih trouglova u ℝ postoji BSP stablo veličine ( ). Štaviše, postoje konfiguracije (postavke) za koje je veličina bilo kojeg BSP ( ).
5.5 BSP stabla za slabo zbijene scene
U prethodnoj sekciji smo opisali algoritam koji konstruiše BSP stablo za skup od razdvojenih trouglova u ℝ . On uvijek daje stablo veličine ( ). Također smo dali primjer skupa od n trouglova za koji bilo koji BSP ima veličinu ( ). Stoga, ( ) gornja granica je čvrsta u najgorem slučaju i sa teoretske tačke gledišta izgleda da je problem riješen. Čvrsta kvadratna granica nam može dati utisak da su BSP stabla beskorisna u praksi. Na sreću ovo nije slučaj: u mnogim praktičnim situacijama BSP stabla se primijenjuju veoma uspješno. Evidentno, teoretska analiza pada kod predviđanja performansi BSP stabala.
Ovo je uznemirujuće, jer ako sebaziramo samo na teoretsku analizu, moglo bi se dogoditi da odbacimo strukturu koja je prilično korisna u praksi. Problem je da određeni ulazi, npr. poput rešetke iz primjera iznad, forsiraju BSP da siječe mnoge objekte, dok oni koji se inače pojavljuju u praksi daju BSP koji siječe tek nekoliko objekata. Željeli bismo da naša analiza daje različite granice za različite tipove ulaza. Ovo znači da više ne možemo raditi analize samo u odnosu na veličinu ulaza . Moramo uvesti novi parametar koji razdvaja lagane ulaze od teških. Sad se postavlja pitanje šta su lagani ulazi. Intuitivno, lagani ulazi su ulazi gdje su objekti relativno dobro razdvojeni, dok teški ulazi imaju objekte koji su pakovani blizu jedan drugog. Primijetimo da da li su objekti blizu jedni drugih ili ne nije stvar apsolutne udaljenosti između njih, već udaljenosti relativne u odnosu na njihovu veličinu. S druge strane, skaliranje cijele
scpa
Ndenadelo
Lataredi
udlo
S
PoscakdrJealmBdapo
Ntro
cene bi nasarametar ko
Neka diam(efinisana kaajviše obefiniciju. Propta proizvo
ako je konsakav. Kada ešetke figurijelovi duži,jediničnih
daljenosti imopti ima zbij
Slika 5.7 Sknj
ogledajmo šcene u sljedko je zbijenrugima.Daljedna mogulgoritam iz
mala. NažaloSP čija je oaiskoristi potreban nov
Neka je skouglove itd
s odvelo doji ćemo zva) označavao najmanjbjekata irimijetimo doljnog polup
struisati skusu objekti
re 5.6, na p, a ne pune lopti takvih
ma zbijenosjenost (1)
kup od osamih imaju pr
šta sad imadećem smislnost velika je, želimo pćnost bi mprethodne
ost, ovo nijeočekivana vprednosti u vi algoritam
kup objekatd. i neka je λ
o različitihati zbijenost
va dijametai broj taz tako dda definicijaprečnika čiji
up od obograničeni
primjer, imaprave. S druh da su bil
st 1. Ustvari, čak i ako i
m duži sa zrečnik man
mo. Imamolu: ako je zb
onda postpokazati da,mogla biti
sekcije i pe slučaj: čaveličina kva
situacijam.
ta u ℝ – λ zbijenost
35
h rezultata, t scene, kak
ar objekta ako da vrijeda je diama govori o bi centar mo
bjekata čijai, zbijenosta zbijenost uge strane, lo koje dviji, može se dimaju jako r
zbijenošću 3nji od prečn
o definisan bijenost matoje regioni ako je zbijda pažljivi
pokažemo dak i za ulazadratna. Dru
ma kad je u
koji može od . (Algo
što je nepko slijedi.
. Zbijenosedi sljedećem( ) ≥ diambilo kojoj lože biti bilo
a je zbijenot također m( ) čak izbijenost taje lopte raz
dokazati da brazličite vel
3. Disk B pnika B pa s
parametar, ala onda su i sa mnogoenost mala,ije analizir
da daje male male zbijugim riječimulazna scen
sadržavati oritam prika
poželjno. S
st skupa e: bilo kojam( ). Slikaopti: nije ogdje u prost
st : bilo kmože biti v
ako su objakođer možezmaknute zabilo koji skuličine.
presijeca pese one ne ra
zbijenost, kobjekti raz
o objekata k moguće je
ramo randolu BSP akoenosti taj a
ma, ovaj algna lagana.
segmente (azan ispod t
Stoga, defin
objekata ua lopta pa 5.7 ilustrobjekat u toru.
koji skup pvelika. Konbjekti u kone biti mala: a više od j
kup od dis
et duži,ali dačunaju.
koji hvata szumno razdvkoji su bli
e pronaći maomizirani (o je zbijenoalgoritam mgoritam ne Slijedi da
(dijelove), također rad
nisaćemo
u ℝ je presijeca ruje ovu , nego je
pravih je strukcija
nstrukciji skup od edinične
sjunktnih
dvije od
složenost vojeni, a zu jedni alu BSP. slučajni)
ost ulaza može dati
uspijeva nam je
diskove, di i u ℝ ,
usℝskobpr
N(bosČujejezasepoječu
,leobsadeod
Lun
Dpojena
A′na
prpona
stvari, čak iℝ .) Ideja kokup tačaka bjekata i orecizirati ov
Neka ( )bounding bosno-poravnauvari koje
ednostavno e ( ) multia objekte u e čvorovi odudarati. Kednom za svuvari u (, broj objek
ema ovo prbjekata kojiadrži mnogefinicija zbidnosu na kv
ema 5.6 Bnutrašnjosti
Dokaz.Neka ostoji najviše ′ skup ostajviše . Mo
Ako objekat ′, kvadrat ( ) na x-oa y-osi sadrž
rečnik od okrijmo sajmanje jed
i u većim dioja stoji iza(zvaćemo ihnda dopust
vu ideju. ) označavox) od , tjat četveroue smo dečetiri čvorskup od 4
. ( ( ) jegranični
Kada se ovovaki objekat) su predstkata koji prerecizira. Prii presijecajuge čuvare ijenosti (u 2vadrate.
Bilo koji osi presijeca n
je osno-pše objekatalih objekaoramo poka
iz ′ pres ne sadrži
osu sadrži prži projekciju
najmanje sa četiri disan od ovih d
dia
imenzijamaa ovog algoh čuvari) tatiti konstru
va graničnj. ( ) je
ugao koji sefinisali zara od ( čuvara def
e multiskup h okvira
o desi, želimt za koji su tavnici raspesijecaju imijetimo du kvadrat, abez presije2D) koristi
sno-paralelanajviše +aralelan kv
ata koji imajata iz , tj. azati da najv
sijeca , ončvor od
rojekciju odu od na y
dužina stranka (kruga) diskova .
am( ) ≥ di36
a. Radi jednoritma je daakvih da je
ukciji BSP-a
ni okvir namanji
sadrži . a su ). Neka finisanih zato što
mogu mo da ovi ččvor granič
odjele od nije mnogo
da sljedeća ali ne i donecanja jedndiskove, o
an kvadrat 4 objekat
vadrat sa aju čuvara (t
onih bez čviše 4 obje
nda ( )oč( ) u svod na x-osiy-osi (ili obo
nice od , , . . . , p Dopunimo
am( )√2 > d
ostavnosti,a za svaki o
raspodjelaa da bude
čuvari budu čnog okvira u sljedeće
o veći od blema daje
nju granicu:nog objektsobina čuva
koji sadržta iz .
čuvara u svtj. čvor grančuvara unutaekata iz ′ mčigledno takojoj unutraši ili projekcioje) – vidjet
tako da jedprečinka di
o do . Im
diam( )2 =
ubuduće ćeobjekat izčuvara prevođena ču
stavljeni u a.) Kada im smislu: zroja čuvarasamo gornsasvim je
a. Primijetara datih u
ži k čuvara
vojoj unutraničnog okvar . Jasno
može presjeć
kođer presijnjosti. Ali ija od ( )ti sliku 5.8. diam( ) ≥am( )/2. Omamo
diam( )
emo se ograz definišeedstavnik rauvarima. Sa
u ( ) više ima malu zbza bilo koji
a unutar . nju granicu moguće da
timo još dsljedećoj l
a iz ( ) ašnjosti. Oč
vira) unutar o, zbijenost ći .
jeca . Po donda proje) na y-osi oOvo implicdiam( )/√Objekat p
aničiti na mo mali
aspodjele ad ćemo
puta, po bijenost, i kvadrat Sljedeća na broj
a kvadrat da mada emi je u
u svojoj
čigledno, . Neka
od ′ je
definiciji ekcija od od ( ) cira da je √2. Sada presijeca
Kna′na
Lekoob
Uje(ktapoB
inreprbuAse
Slika 5.8 K
Kako ′ imaajviše put′. Dodavanalazimo da
ema 5.6 ponstrukciju bjekte iz u
U prvoj fazi ednog čuvakvadstablo) ako što prvoodijelimo sSP stablo n i na prim
nformacija nezultirajućojrecizni. Druudu dobro r
Ako su objekekciji 5.3 sv
Kvadrat σ pse
a zbijenost ta. Stoga,
njem najviš presijeca
predlaže slBSP. Nek
u njegovoj u
rekurzivnoara u svojna ( ). D
o podijelimovaku polov
na skupu (mjer, ustvarnije sačuvanj podjeli pruga faza algrazdvojeni. kti duži na
ve do fragme
presijeca seegmenta je
najviše , presijeca n
še objeknajviše +
ljedeći dvoka je kvadunutrašnjost
dijelimo joj unutraš
Dijeljenje kvo kvadrat navicu horizon( ). Slika5.9ri ista linija;na u čvorovresijeca samgoritma ondKako je dr
a primjer, menata duži u
37
egment (dioe najmanje
svaki jnajviše obkata koji n+ 4 objeka
ofazni algodrat koji sti.
u kvadratešnjosti. Drvadrata na na dvije jednntalnom lin9 ilustruje o; ono što se
vima u BSP mo nekolikda dijeli svruga faza u
možemo priu svakom li
o), ali ne saivica dužin
je punjen bjekata iz
nisu u ′ ata iz .
oritam za sadrži sve
e sve dok srugim riječnjegova četinake polovicnijom. Stogovo. Primijerazlikuje jestablu. Pre
ko objekatavaki list regurađena tačnimijeniti 2D
st regionu.
drži čuvarane od σ.
svaki kvadračima, konsri kvadrantace vertikalnga nam quaetimo da su e koji dio linma lemi 5.6
a, najviše 1gion dalje, no zavisi odDRANDOMB
a. Stoga, pr
rat ne sadržstruišemo qa može biti nom linijomadtree podjneke linije
nije je bitan6 svaki list 1 + 4 , da sve dok ob
d tipa objekBSP algorita
rečnik
i najviše quadtree urađeno
m, a onda ela daje podjele,
n, ali ova region u budemo
bjekti ne kata u . am dat u
Prprprugda
Prčupa
Dm
njqu
resudna osorva faza daroblem: brojgla u početnaje linearan
rva modifikuvara unutraarametar
ruga modimoramo pod
Slik
jih sadrže uadtree podj
Slika 5.9
obina algoraje list regij list region
nom kvadrabroj list reg
kacija je da va, već stajem≥ 1. O razl
fikacija je ijeliti kvadr
ka 5.10 Pri
čuvara u svdjele: dijelim
9 Quadtree
itma koji smije koji prena može bititu . Zbog giona. Ovo j
više ne nastmo kad kadogu za ovo
sljedeća. rat . Razm
imjeri quad
vojoj unutramo u četir
38
e podjele i o
mo upravo esijecaju nei velik. Ovotoga modifje urađeno
tavljamo doda region sai za biranje
Pretpostavimotrimo čet
dtree podje
ašnjosti, onri kvadranta
odgovaraju
skicirali jeekoliko objeo se dešava nfikujemo prvkako slijedi
ok svaki regadrži ili me ćemo go
imo da u tiri kvadrant
ele i skuplja
nda nastavljaa tako što g
uće BSP sta
e ta da za sekata. Nažanpr. kada dvvu fazu algoi.
gion ne budemanje čuvaraovoriti kasni
proceduri ta od . Ak
ajući korak
amo kao pria prvo podi
ablo
slabo zbijenalost, postova čuvara leoritma da z
e imao samoa, za neki pije.
rekurzivne ko najmanje
k sa k = 4
rije primjenjijelimo vert
ne scene oji jedan eže blizu asigurno
o jednog prikladan
podjele e dva od
jivanjem tikalnom
linhoqukvprkvkvbitoskunPridsjjeskD′odzadi
A
AUIz1.2.3. 4. 5. iz6. ču7.
re8.
nijom (orizontalnomuadtree podvadranata nrimijenimo vadranta povadrant, reciti oprezni: o može uzekupljajući knutrašnjostiretpostavim
dentična. Severozapad
e čuvara ikupljeni kvaijelimo ′ t′, a onda pod ′ – vidjasebnom ′ijeljena dalj
Algoritam PH
Algoritam PUlaz. Regija zlaz. BSP sta ako ( onda Kre u sup
znad.
uvaju
egije. vrati
σ), a onm linijom
djele, vraćamne sadrži
quadtree ostaju list cimo ′, sa svi čuvari m
eti mnogo qkorak. Intu od ′.
mo da je Skupljamo du – ′ zadržzvan unutraadrant. Primtako što ga odijelimo dveti sliku 5., jedina rege je kvadrat
HASE1 sažim
HASE1( ,, skup čuv
ablo tako ) ≤ eiraj BSP stprotnom ak
Kr Za
nda svaku( )(slikamo se na kvviše od podjelu; regioni. Aviše od
mogu biti vquad podjeuitivno, sku
Preciznije,′ sjeveroza′ pomijeržava oblik kašnjosti od mijetimo daprvo podije
va preostala10. Ovo di
gija koja mot.
ma procedur, ) vara u unuda svaki lis
ablo kojeko tačno
onda u sup
reiraj BSP s(σ)(σ)amijeni svak
rekurz
39
u polovicua 5.10). Navadrante. A čuvara, u ovom
Ako postojičuvara, u nveoma blizuela prije neupljamo , skupljajuapadni kvadrajući njegkvadrata tok′. Kršeći ma ′ ima naelimo vertika dijela horiijeli u če
ože sadržava
ru rekurzivn
utrašnjosti ost region sa
e se sastoji ojedan kvad
unutrašnjoOdredi lin ko
rotnom Od
stablo sa tkao njegovkao njihovuki list od
zivno na reg
u podijeliakon primje
Ako nijedan onda takoslučaju čei tačno jed
njemu morau ćoška i ongo ih razdv′ sve dok ući korak drant od gov donji kom ovog smalo notaciajmanje jedkalnom linijizontalnom etiri regije ati više od
ne podjele.
od i cijelidrži najviše
od jednog čvrant od saosti nije podjela orak, kako jedredi linije p
quadtr
tri unutrašnjvu liniju podu liniju podj
sa BSP st
giji koja odg
mo ene od đer
etiri dan
amo nda vojimo. Sto
najmanje se nastav
; ostala trdesni uga
skupljajućegiju, koristim
dnog čuvarajom (σ) klinijom (σod kojih su čuvara i z
i broj ≥ 1e čuvara.
vora lista. adrži više od(σ) i (σe objašnjenopodjela (σree podjelu,
nja čvora; kodjele, a oba djele. tablom iz
govara i č
oga primije čuvara
vlja kako ri slučaja sao dijagong procesa –
mo ′ da oba na svojoj kroz desnu σ) kroz donu dvije kvazbog toga m
1.
d k čuvara uσ) za skupljo iznad. σ) i (σ) za, kako je obj
orijen od djeteta od k
zračunatim
čuvarima un
enjujemo nisu u slijedi.
su skoro alno ka
– sve dok bilježimo
granici. ivicu od nju ivicu adrati. U može biti
u svojoj
jajući
a jašnjeno
čuva korijena
nutar
40
Lema 5.7 PHASE1( , ( ), ) daje BSP stablo sa ( / ) listova, gdje svaki list region presijeca najviše + 4 objekata.
Dokaz. Dokazat ćemo prvo granicu za broj listova. Ovaj broj je za jedan veći nego broj unutrašnjih čvorova pa je dovoljnoda se ograničimo na potonji broj.
Neka ( ) označava maksimalan broj unutrašnjih čvorova u BSP stablu kreiranih sa PHASE1( , , ) gdje je card( ) = . Ako je ≤ , nijedna podjela nije primijenjena pa je tako ( ) = 0 u ovom slučaju. Inače, quadtree podjela ili skupljajući postupak je primijenjen na na . Ovo rezultuje u tri unutrašnja čvora i četiri regije u koje se vraćamo.Neka , . . . , označavaju brojeve čuvara u četiri regije i neka je ≔ { : 1 ≤ ≤ 4i > }. Kako je regija koja sadrži ili manje čuvara list region, znamo da ( ) = 0 za ∉ . Stoga,
( ) = 0, akoje ≤3 + ( )∈ , usuprotnom
Dokazat ćemo indukcijom da vrijedi ( ) ≤ max(0, − 3). Ovo je očigledno
tačno za ≤ , zato pretpostavimo da je > . Čuvar može biti u unutrašnjosti najviše jedne regije, što znači da ∑ ≤∈ . Ako najmanje dva kvadranta od sadrže više od čuvara, onda je ( ) ≥ 2 pa imamo
( ) ≤ 3 + ( )∈ ≤ 3 + 6 /∈ − ( ) ∙ 3 ≤ 6 − 3, što je bila tvrdnja. Ako nijedan od kvadranata ne sadrži više od čuvara, onda su sve četiri regije list regioni i ( ) = 3. Zajedno sa pretpostavkom > ovo implicira ( ) ≤ (6 / ) − 3. Preostali slučaj je gdje tačno jedan kvadrant sadrži više od čuvara. U ovom slučaju radimo skupljajući korak. Zbog načina na koji je skupljajući korak primijenjen, skupljeni kvadrant sadrži manje od − čuvara i druge dobijene regije sadrže najviše čuvara. Stoga, u ovom slučaju imamo
( ) ≤ 3 + ( − ) ≤ 3 + 6( − ) − 3 ≤ 6 − 3. Slijedi da je u svim slučajevima ( ) ≤ ( ) − 3, što je bila tvrdnja. Ovo dokazuje
granicu za broj unutrašnjih čvorova.
Ostaje da se dokaže da svaki list region presijeca najviše + 4 objekata. Po konstrukciji, list region sadrži najviše čuvara u svojoj unutrašnjosti. Stoga, ako je list region kvadrat, lema 5.6 implicira da on presijeca + 4 objekata. Mogu postojati list regioni koji nisu kvadrati i tada ne možemo primijeniti lemu 5.6 direktno. Nekvadrat list
reko5.čiskovbrnaimsakvlem
LezabrrePopoas
OtotrinaredrO
AUIz1.2.3.4.5.6.7.8.9.
10
egion ′′ moraku, kao10.Podsjeti
im ili vkupljenog kvih čuvara mroj čuvara va granici omplicira da a najviše vadrat je poemi 5.6, ova
mnogo objek
ema 5.7 obja veće ćemroj objekataegiona kolikostavljanje oređeno sa simptotski –
vdje postojoga ga ne mik. Pretpostašom pretpoezultujućemrugom fazovo vodi ka
AlgoritamLO
Ulaz. Skup zlaz. BSP sta Neka ( ) ← 1; ur dok nijeur radi ← za zv ra za zvaki li radi Izrač
0. vrati
mora biti proo što je imo se da više čuvarkvadranta mora biti n
vanjskih od d ′) mora′′ može bčuvara u sv
okazan sivomaj kvadrat pkata.
jašnjava zašmo imati ma po list regko god je ≔ će u1), dok – ide samo o
i jedan promožemo kortavimo malostavkomka
m BSP stablom algoritmsljedećem a
OWDENSITY
od objekablo za ) bude skuprađeno←nerađeno 2 ; ← Pvaki list oadi Izračunaj
akost od čunaj BSP s
oduciran u prikazan
skupljajući ra nije u ′. Najmanna granici o′ (ne računa biti manjbiti pokrivevojoj unutram bojom napresijeca na
što može bimanje list reggionu. Doba
moguće buraditi ovo:
se maksimod 1 + 4 d
oblem: mi nristiti kao pu vrijednos
ao vrijednošlu presijeca
ma; u suproalgoritmu.
YBSP2D( )kata u ravni..
p od 4 grantačno; ←PHASE1( ,d
aj skup ( )( ( )) > stablo za
41
skupljajućeno na sli
proces staunutrašnjos
nje jedan ood ′, tako dnajući čuvai od . Ov
en kvadratoašnjosti; ova slici. Premajviše + 4iti povoljno giona. S druar izbor za bez značajn: broj list rmalan broj do 5 .
ne znamo unparametar ust za , recšću za i
a najviše 5otnom, udup
) .
ničnih okvira←ograničav( ), ); u) fragmenat5 ondaura
a ( ) i zam
em ici aje sti od da
are vo
om vaj ma 4 objekata
za koristiuge strane,
je onda onog povećaregiona će s
objekata p
naprijed , u algoritmu.imo = 2.onda provje objekata.
plamo našu
a čvorova ovajući kvadr
rađeno ← t
ta objekata uađeno ← ne
mijeni sa
a pa tako ′iti vrijednosveće će t
onaj koji ćenja objekatse smanjiti po list regi
zbijenost u. Zbog toga Onda pokerimo da li Ako je ta
upretpostavk
od objekata urat od .
tačno
u regionu odetačno
.
′′presijeca i
st koja je vetakođer znae reducirati ta po list za faktor
ionu neće
ulazne scena koristimo
krenemo PH
i svaki list rako, nastavlku i probam
u .
d .
isto tako
eća od 1: ačiti veći
broj list regionu. (što je
povećati
ne i zbog sljedeći
HASE1 sa region u ljamo sa mo opet.
42
Kada se ulaz sastoji od nepresijecajućih duži u ravni možemo koristiti 2DRANDOMBSP za izračunavanje BSP-ova u liniji 9, što vodi sljedećem rezultatu.
Teorem 5.8 Za bilo koji skup od disjunktnih duži u ravni postoji BSP veličine ( log ) gdje je zbijenost od .
Dokaz.Prema lemi 5.7, PHASE1( , ( ), ) rezultira sa BSP stablom gdje svaki list region presijeca najviše + 4 objekata. Stoga, test u liniji 7 od LOWDENSITYBSP2D je garantirano netačan za ≥ . (Ako je < , test može, a i ne mora biti netačan.) Dok-petlja završava najkasnije kada postane veće od prvi put. Kako se uduplava svaki put, ovo implicira da je ≤ 2 kada stignemo do druge faze u liniji 8.
Neka ∗ označava vrijednost kada stignemo do linije 8. Upravo smo potvrdili da je ∗ ≤ 2 . Test u liniji 7 garantira da svaki list region presijeca najviše 5 ∗ segmenata. Stoga, prema lemi 5.1, svako stablo ima (očekivanu) veličinu ( ∗ log ∗) kada je
2DRANDOMBSP korišten u liniji 9. Zbog toga, postoji ( / ∗) list regiona, a ukupna veličina BSP stabla je ( log ∗). Kako je ∗ ≤ 2 , ovo dokazuje teorem.
Granica u teoremu 5.8 nikad nije gora od ( log ). Drugim riječima, algoritam opisan iznad je jednako dobar i kao algoritam dat u sekciji 5.3 u najgorem slučaju, ali dokazivo profituje kada je zbijenost ulaza mala.
Podsjetimo se da je razlog za uvođenje koncepta zbijenosti bio kvadratna granica u najgorem slučaju za BSP-ove za trouglove u ℝ . Algoritam koji smo upravo opisali radi veoma dobro za duži u ravni: producira BSP čija je veličina ( log ) u najgorem slučaju i ( ) kada je zbijenost ulaza konstanta. Postavlja se pitanje šta se dešava kada primijenimo ovaj prilaz na skup trouglova u ℝ . Ispostavlja se da ovaj pristup vodi ka dobrim rezultatima, kao što je navedeno u sljedećem teoremu.
Teorem 5.9 Za bilo koji skup od disjunktnih trouglova u ℝ postoji BSP veličine ( ), gdje je zbijenost od .
Granica u teoremu 5.9 interpolira se lijepo između ( )i ( ) kako se mijenja od 1 do . Zbog toga algoritam producira BSP čija je veličina optimalna u najgorem slučaju. Ali, rezultat je čak jači: ( ) granica je optimalna za sve vrijednosti . Tačnije, za bilo koje i bilo koje sa 1 ≤ λ ≤ postoji kolekcija od trouglova u ℝ čija zbijenost je i za koje bilo koji BSP mora imati granicu ( ).
5.6 Neka dodatna zapažanja i komentari
BSP stabla su popularna u mnogim aplikativnim područjima, posebno u kompjuterskoj grafici. Aplikacija spomenuta u ovom poglavlju je uklanjanje skrivenih površi sa slikarevim algoritmom. Druge aplikacije uključuju generisanje sjene, skupovne operacije na poliedrima i pretprocesiranje vidljivosti za interaktivne prolaze. BSP stabla također mogu biti korištena u metodama dekompozicije ćelije u planiranju kretanja, za
43
pretragu ranga i opće strukture indeksiranja (GIS). Dvije druge dobro poznate strukture, kd-stabla i quadstabla,ustvari su specijalni slučajevi BSP stabala, gdje su korištene samo ravni ortogonalne podjele.
Studija BSP stabala sa teoretske tačke glediša je inicirana od strane Patersona i Yaoa. Oni su također dokazali granice na BSP stablima u višim dimenzijama: bilo koji skup ( − 1)-dimenzionalnih simpleksa u ℝ , daje stablo veličine ( ). Paterson i Yao su također dobili rezultate za ortogonalne objekte u višim dimenzijama. Na primjer, oni
su dokazali da bilo koji skup ortogonalnih kvadrata u ℝ daje BSP veličine ( √ ) i da je ova granica čvrsta u najgorem slučaju. Ispod ćemo diskutovati o rezultatima koji su dobiveni do sada. Mnogo opsežniji pregled je dat od strane Toth-a.
Dugo vremena nije bilo poznato da li bi bilo koji skup od nepresijecajućih duži u ravni dao BSP veličine ( ), ali je Toth dokazao da ovo nije slučaj konstruišući skup duži za koji BSP mora imati veličinu ( log / log log ). Primijetimo da ovdje još postoji mala rupa između ove donje granice i trenutno poznate gornje granice, koja je ( log ). Postoji nekoliko specijalnih slučajeva, kakogod, gdje je ( ) veličina BSP-a moguća. Na primjer, Paterson i Yao su pokazali da bilo koji skup od disjunktnih duži u ravni koje su ili horizontalne ili vertikalne daje BSP veličine ( ). Do istog rezultata su došli i d'Amore and Franciosa. Toth je poopćio ovaj rezulat na duži sa ograničenim brojem orjentacija. Drugi specijalni slučajevi gdje je BSP linearne veličine uvijek mogućaje za duži sa više ili manje istom dužinom i, kao što smo vidjeli, za skup objekata konstantne zbijenosti.
U poglavlju 5.5 bavili smo se BSP-ovima za slabo zbijene scene. Ovo je bilo inspirisano činjenicom da se po pitanju veličine najgoreg slučaja BSP-ova za 3D scene ima malo toga za uraditi sa praktičnim performansama. Slična situacija često proizilazi u studiji geometrijskih algoritama: često se mogunaćiulazni skupovi za koje dati algoritam nije veoma efikasan, ali u mnogo slučajeva ulazni skupovi nisu mnogo realistični. Ovo može imati dva nedostatka. Prvi, analiza najgoreg slučaja algoritma ne mora biti mnogo informativna da li je algoritam koristan u praksi. Drugo, kako su algoritmi tipično dizajnirani da imaju najbolje performanse u najgorem slučaju, oni mogu biti okrenuti ka situacijama koje neće biti prisutne u praksi i zbog toga mogu biti bespotrebno komplicirani. Razlog za ovo je, obično, činjenica da vrijeme izvođenja geometrijskih algoritama nije određeno samo veličinom ulaza nego je pod jakim uticajem oblika ulaznih objekata i njihove prostorne distribucije. Za prevazilaženje ovog problema, može se probati definisati parametar koji hvata geometriju ulaza – kao što smo radili u sekciji 5.5
Parametar koji je korišten najčešće u ovom kontekstu je debljina. Trougao se naziva β-debelim ako su svi njegovi ulgovi najmanje β. Pokazano je da je kompleksnost unije od presijecajućih β-debelih trouglova u ravni blizu linearne po ako je β konstantno;
trenutno, najpoznatija granica je ((1/ )log(1/ ) loglog ). Koncept debljine je
generalizovan na proizvoljne konveksne objekte pa čak i na nekonveksne objekte. Jedan od najgeneralnijih definicija data je od van der Stappena koji je definisao objekat u
44
ℝ da bude β-debeo ako vrijedi sljedeće: za bilo koju kuglu B čiji centar leži na i koja potpuno ne sadrži u svojoj unutrašnjosti, imamo da vol( ∩ ) ≥ ∙ vol( ), gdje vol(∙) označava zapreminu. Postoje mnogi problemi koji mogu biti efikasnije riješeni za debele objekte nego za obične objekte. Primjeri su pretraga ranga, lociranje tačke, planiranje kretanja, uklanjanje skrivenih površina, pucanje zrakom i izračunavanje redova dubine.
Parametar korišten u sekciji 5.5, zbijenost, je također studiran mnogo. Može se pokazati da bilo koji skup disjunktnih β-debelih objekata ima zbijenost (1/ ) i tako bilo koji rezultat dobijen za slabo zbijene scene odmah daje rezultat za disjunktne debele objekte. Algoritam za konstruisanje BSP-a za slabo zbijene scene opisan u sekciji 5.5 je modifikovana i malo unaprijeđena verzija konstrukcije po de Bergu. Neki od rezultata spomenuti iznad za debele objekte su u stvari bazirani na ovoj konstrukciji i stoga se također primijenjuju na slabo zbijene scene.
45
6.Uklanjanje skrivenih površina
6.1 Pozadina problema
Potreba za uklanjanjem onoga što nije vidljivo je bila i uvijek će biti ekstremno visoka u industriji igara, bez obzira na to što su se jake grafičke karte razvile jako brzo i stvari koje su bile istinite prije nekoliko godina, ovih dana nisu ni izbliza. Kada je igra kreirana, ciljni frame rate je postavljen. Najniži prihvatljivi rate na ciljanom sistemu mora biti oko 30 okvira/sekundi. Prije nekoliko godina, stavljanje preko 5000 teksturiranih poligona po okviru bi bilo neizvodljivo. Danas postoje grafičke karte na tržištu sa mogućnošću iscrtavanja stotina miliona poligona u sekundi pod optimalnim uvjetima. Međutim, još uvijek postoji potreba za uklanjanjem skrivenih površina. Naime, svaki skriveni poligon koji je nacrtan mogao bi biti zamijenjen poligonom koji je vidljiv.Samim tim se povećavaju detalji na sceni, praveći igru vizuelno atraktivnijom. Pitanje je koliko daleko ćemo ići sa uklanjanjem skrivenih površina. Potrebna su složena izračunavanja da bi se uklonile skrivene površine, kao što su uklanjanje pogledom krnje piramide (view frustum culling) i portal renderovanje (portal rendering). Procesorsko vrijeme potrebno da bi se uradila ova izračunavanja može biti iskorišteno za povećanje drugih efekata u igri kao što su AI i detekcija sudara. Otuda, postoje mnoge stvari koje treba uzeti u razmatranje kada se prave algoritmi za uklanjanje skrivenih površina. Skoro da nema igre koja je otišla toliko daleko da ukloni svaki nevidljivi poligon. Većina igara se zadovoljava sa uklanjanjem cijelog skupa poligona, kao što su čvorovi, objekti itd. Ne razmatraju se individualni poligoni, pa se čini ispravnim načinom prihvatiti neka precrtavanja kako bi se ograničila izračunavanja kod uklanjanja skrivenih površina.
Najčešća tehnika za uklanjanje skrivenih površina kada kreiramo pucačinu u prvom licu (FPS) je portal renderovanje. Ova tehnika je vrlo dobro prilagođena za korištenje prednosti BSP stabala, iako korištenje BSP stabala nije neophodno. Razmatrali smo da koristimo ovo, ali smo smatrali da statičnija reprezentacija može dati brže renderovanje BSP stabala. Portal renderovanje ima neke lijepe sporedne efekte kao što su ogledala i nadzorne kamere koje ne možemo uraditi sa našom tehnikom, ali u drugu ruku, naša tehnika zahtijeva mnogo manje izračunavanja tokom vremena izvršavanja.
7
SvkonaOPoophaop
Opokrpozapopo
NKutdo
D3D
2[T
. Portal
vijet može onveksan i ačin da se nvo znači dostavljanje pisali iznadardverski ubpisati kako t
snovna idejozicije sa pornje piramidogledom kra rekurzivneogled krnjeogled krnje
Na figuri iznKada F1 naiđ
tiču portali otjera na F5
a bismo izoD mašinu, p
Tyberghein, Jorr
rendero
biti opisan zatvoren sk
nacrta linijada svaka ruportal polig
d, potreba brzanih Z-sto uraditi na
eja sa portaogledom krde. Susjednrnje piramide funkcije. Me piramide o
piramide m
Slik
nad gledatelđe na portaP2 i P3 pa
5, a F4 na F6
ostavili objepostoji niz
rit. The Portal Tec
ovanje
kao nekolikup poligona u sektoru dupa u svakgona može za konvek
spremnika,a stari način
al mašinom rnje piramidi sektor je r
de. Ovo je vMnogi objekograničen s
može biti isje
ka 7.1 Odsij
lj je poziciol poligon P
a budu odsje6. Ovaj proc
ekat u mašinkoraka koji
chnique for Real-ti
46
iko sektora na gdje se pda bi se iza
kom čvoru biti urađen
ksnim sektopa mnoge
n.
je kada sede i nailaženrenderovan veoma jednkti koji su vsamo na onečen u porta
jecanje pog
oniran na VP1 on je odsečeni na F3ces je dobro
ni portal reni se mogu n
ime 3D Engines].
koji su pood zatvoren
ašlo iz sektomora biti
no ili ručnoorima je uigre preska
e renda (prnjem portaliz iste gled
nostavan prividljivi lagano što se taal mašini.
gleda krnje
V, originalnisječen i pre3 i F4. Kado prilagođen
nderovanja,napraviti za
ovezani kroznošću misli ora bez nailpopunjena
o ili automglavnom n
aču ovaj kri
rikazuje) scl poligona, pdateljske poilaz i veom
ano mogu biačno vidi. I
e piramide
i pogled krnimenovan ua se naiđe nn za rekurzi
, kao bitno a ubrzanje o
z portale. Sna to da ne
laženja na pportal pol
matski. Kao nestala sa piterij. Ali, m
cena iz gledportal siječe
ozicije, ali sma dobro pr
iti izostavljeIspod je sli
rnje piramidu F2. Poslijna portal Pivne funkcij
pitanje za bovog proces
Sektor je e postoji poligon.2 ligonom. što smo
pojavom mi ćemo
dateljeve e pogled sa novim ilagođen eni jer je ika kako
de je F1. e, na F2
P4, F3 se je.
bilo koju sa. Prvo,
tresaobASlis
Onestrm
Iztaprkourpotrebipo
Dkrnozako
eba izračunadržavati svbjekta. Ond
Ako je čitavalika ispod ocrtava.
bjekat 1 naegativnoj strrane lijeve
može biti izo
zvorna idejaako da samorocesorskogoja crta scenradimo ovoosljednji okebalo biti niti označeniostojaće gre
a bismo birnje piramidormali ovihatvaranje zaoji opisuje k
nati graničnve čvorove nda, ta se sfea sa negativopisuje situa
a slici je na rani lijeve rravni, dok
ostavljen.
a je bila da po vidljive og vremena. nu, mi mora jeste da oz
kvir kada jenacrtano u k da bi se m
eške u Z-spr
li u mogućde sastoji. Ph ravni je lapremine odkako izračun
u sferu za onekog objekera testira uvne strane biaciju gdje je
Slika 7
pozitivnoj sravni, stoga je samo dij
portal mašinoblasti budu
Kako se namo znati dznačimo po poligon bi
krnjoj pirammoglo reći da
remanju.
ćnosti rendePogled krnjelicem premdnosi na unnati da li je
47
objekat; grakta. Optimau odnosu nailo koje od edan objeka
7.2 Uklanja
strani desnea je izostavljjelom sa po
ne uopće neu crtane. U na poligon mda li je poligoligone sa bio crtan. Ov
midi F5 i krna li su bili c
erovati scene piramide
ma unutrašnjnutrašnjost k
poligon un
anična sferaalno, ovo sea svaku ravravni, objek
at izostavlje
anje objeka
e ravni u pojen. Drugi oozitvne stra
emaju precrtdanašnje vr
može naići gon bio ranbrojačem okvo je slučajnjoj piramidcrtani u ovo
nu, moramoje strukturajosti pogledkrnje piram
nutar krnje p
a je najmanuradi jedno
van u poglekat nije vidln i ne iscrta
ata
ogledu krnjeobjekat (2) jane desne ra
tavanja odsirijeme to jeviše puta u
ije crtan ili kvira koji p
za desni zidi F6, tako om okviru il
o definisati a koja sadržda krnje pir
mide. Ispod piramide ili
nja sfera koom tokom kedu krnje p
dljiv i ne iscava se, dok
e piramide, je čitav sa pavni, tako d
ijecanjem pe preveliko u rekurzivnne. Dobar
pokazuje koid u figuri da poligonli ne. U sup
od čega seži ravni, siramide, takse nalazi ane.
oja može kreiranja
piramide. rtava se. se drugi
ali je na pozitivne da on ne
poligona, trošenje
noj petlji način da
oji je bio 4, što bi i moraju protnom,
e pogled svaka od ko da se algoritam
48
Algoritam UnutarKrnjePiramide( , ) Ulaz. Krnja piramida , poligon . Izlaz. Da li je poligon unutar krnje piramide ili ne. 1. za svaku tačku u 2. unutra ← tačno. 3. za svaku ravan u 4. ako(KlasifikujTačku( , )!= ispred) 5. unutra ← netačno 6. ako(unutra) 7. vratitačno 8. vratinetačno.
7.1 Postavljanje portala
Kao što smo spomenuli ranije, jedan od velikih problema u portal mašini jeste postavljanje portala. Ručno postavljanje portala je proces koji troši mnogo vremena, bez da spominjemo sposobnosti potrebne kod dizajnera mape. Kao i sa drugim stvarima, ovo vrijeme može biti bolje iskorišteno na drugim mjestima. Stoga, potreban je dobar algoritam za postavljanje portala. Andreas Brinck ima dobro rješenje za ovaj problem. Da bismo koristili njegovo rješenje, biće nam potrebna upravo BSP stabla.
Generalna ideja jeste da se svaki portal u drvetu treba podudarati sa ravni koja je definirana podjelom poligona u drvetu. Od svake pojedinačne ravni stvara se portal poligon, koji je, u početku, četverostranični poligon koji prelazi granični okvir čvora u kojem je smješten. Svaki portal poligon je potisnut podstablima čvora u kojem se nalazi. Kada portal poligon prođe kroz čvor u jednom od njegovih podstabala, ravan definisana dijeljenjem poligona u tom čvoru siječe ga. On je također presječen poligonima u čvoru ako je čvor list. Ako je poligon presječen, dva dobijena dijela su potisnuta sa vrha stabla. Kada portal poligon nema potrebu za sječenjem, onda je potisnut u podstablo čvora koji je trenutno posjećen. Ovo znači da ako se on nalazi sa pozitivne strane ravni, biće potisnut u desno podstablo, a ako je sa negativne strane, onda će biti potisnut u lijevo podstablo. Ali, ako je podudaran sa ravni definisanom dijeljenjem poligona u trenutnom čvoru, biće potisnut u oba stabla.
Da bismo bili u mogućnosti definisati algoritam koji postavlja sve portale u stablo, trebamo definisati kako presjeći poligon, a za ovo moramo pretpostaviti da postoji funkcija nazvana TackaPresjeka koja vraća tačku presjeka između ravni i linije između dvije 3D tačke.Koristi se također i funkcija KlasifikujTačku koja prima ravan i tačku, a vraća rezultat da li je tačka ispred, iza ili koincidentna sa ravni.
Efekat sljedećeg algoritma je da siječe poligon sa ravni definisanom kao poligon sjekač. Ako poligon ne pokriva sjekača, jedan od rezultujućih dijelova će biti prazan poligon.
49
Algoritam SijeciPoligon(S, P) Ulaz. Sjekač S je ravan/poligon koji siječe druge poligone. P je poligon za sječenje. Izlaz. Dva rezultujuća komada nakon sječenja. 1. DesniDio ← {} 2. LijeviDio ← {} 3. za svaku tačku ivice E u P 4. Strana1 ← KlasifikujTacku(S, E.Tacka1) 5. Strana2 ← KlasifikujTacku(S, E.Tacka2) 6. ako(Strana1 != Strana2 i Strana1 != koincidentna i Strana2 != koincidenta) 7. TP ← TackaPresjeka(S, E) 8. ako(Strana1 == ispred) 9. DesniDio ← DesniDio U E.Tacka1 10. DesniDio ← DesniDio U TP 11. LijeviDio ← LijeviDio U TP 12. LijeviDio ← LijeviDio U E.Tacka2 13. ako(Strana1 == ispred) 14. LijeviDio ← LijeviDio U E.Tacka1 15. LijeviDio ← LijeviDio U TP 16. DesniDio ← DesniDio U TP 17. DesniDio ← DesniDio U E.Tacka2 18. u suprotnom 19. ako(Strana1 == ispred ili Strana2 == iza ili Strana1 == koincidentna i Strana2 == koincidentna) 20. DesniDio ← DesniDio U E.Tacka1 21. DesniDio ← DesniDio U E.Tacka2 22. ako(Strana1 == iza ili Strana2 == iza) 23. LijeviDio ← LijeviDio U E.Tacka1 24. LijeviDio ← LijeviDio U E.Tacka2 25. vrati(DesniDio, LijeviDio)
Sada možemo rasporediti portale u BSP stablu. Sljedeći algoritam je algoritam Andreasa Brincka. Algoritam se inicijalno poziva sa portal poligonom koji je veći od graničnog okvira korjenog čvora stabla.
Algoritam PostaviPortale(PP, N) Ulaz. PP je portal poligon za potisnut stablo. N je čvor koji trenutno posjećujemo. Izlaz. Ništa. Efekat. Potiskuje portal poligon dole kroz stablo sijekući kada je potrebno. Izlaz ove funkcije će biti taj da svaki čvor sadrži listu portal poligona gdje svaki portal povezuje tačno dva čvora.
50
1. ako(JeList(N)) // Portal je provjeren u odnosu na svaki poligon u čvoru. Kada portal pokriva ravan // definisanu poligonom biće isječen u odnosu na tu ravan. Dva rezulutujuća dijela biće // opet potisnuta s vrha stabla. 2. za svakipoligon P2 u N 3. JePresječen ← netačno 4. ako(IzračunajStranu(P2, PP) == pokriva) 5. JePresječen ← tačno 6. (DesniDio, LijeviDio) ← SijeciPoligon(P2, PP) 7. PostaviPortale(DesniDio, KorjeniČvor) 8. PostaviPortale(LijeviDio, KorjeniČvor) 9. ako(nije JePresječen) 10. Ukloni dijelove portal poligona koji su koincidenti sa drugim poligonima u ovom čvoru. // Vidi opis ispod. 11. Dodaj ovaj čvor skupu povezanih čvorova u ovom portal poligonu. 12. usuportnom 13. ako(dijeleći poligon ovog čvora nije potisnut) 14. Kreiraj poligon P koji je veći od graničnog okvira koji sadrži sve poligone u podstablu ovog čvora koji leži u istoj ravni kao dijeleći poligon. 15. PostaviPortale(P, N.LijevoDijete) 16. PostaviPortale(P. N.DesnoDijete) 17. Strana ← IzračunajStranu(N.Djeljitelj, PP) 18. ako(Strana == pozitivna) 19. (DesniDio, LijeviDio) ← SijeciPoligon(P2, PP) 20. PostaviPortale(DesniDio, KorjeniČvor) 21. PostaviPortale(LijeviDio, KorjeniČvor) 22. ako(Strana == pozitivna ili koincidentna) 23. PostaviPortale(PP, N.DesnoDijete) 24. ako(Strana == negativna ili koincidentna) 25. PostaviPortale(PP, N.LijevoDijete)
Ova funkcija je izrazito kompleksna za analizu pa je nećemo analizirati. Samo ćemo objasniti liniju 10. Da bismo je razjasnili, moramo pokazati šta se dešava kada uklonimo koincidentne dijelove između portal poligona i drugih poligona u čvoru. Za tu svrhu potrebno je pogledati sliku 7.3.
Na ovoj slici portal poligon je dostigao list. Tamnosiva oblast označena sa 1 je uklonjena tokom potiskivanja stabla. Dijelovi 2, 3 i 4 koji su obojeni svijetlosivom su koincidentni sa poligonima na kraju čvora, stoga su uklonjeni. Preostali dio je je dio označen sa 5; on će biti korišten kao portal.
Prethodni algoritam na prvi pogled može izgledati veoma kompleksno, ali je ustvati veoma jednostavan i intuitivan. Na kraju, svaki portal poligon će završiti u tačno dva
čvprvora. Ovo rimijenjenog
S
su dva pog algoritma
Slik
Slika 7.4. P
ortala koji a.
ka 7.3. Ukla
rimjer map
51
će biti vi
anjanje ko
pe za autom
idljivi jedan
incidentnih
matsko pos
n sa drugo
h dijelova
stavljanje p
og. Slijedi
portala.
primjer
1.
2. U p2ne 3.
4. Kačv 5.
6. NiSa 7.
Portal polig
p1 i p2 ulaz
čvoru s2, p12 (zato što jee isjeca zato
p1 i p2 ulaz
p3 i s3 ulaz
ako ni p2 nivoru n3, a p2
p3 i s3 ulaz
p2 i p4 ulaz
ijedan od poamo se s4 šal
p2, p4 i s4 u
gon 1 (s1) ul
ze u čvor s2.
1 se zajedno sa negativnešto ne presije
ze u čvor n2
ze u čvor n3.
i p3 nisu pre2 i p3 se potis
ze u čvor n3
ze u čvor s4
oligona ne trlje ka n5.
ulaze u čvor
lazi u čvor n
.
sa poligonoe strane s2) secaju poligon
2.
.
esječeni, oni skuju ka čvo
reba sječenje
r n4
52
n1.
U n1jedanod ppoligmije
om podjele s2se zajedno san podjele s2
U n2nemkoinkoji sada
sepotiskujuoru s4.
U n2uklanzove
e, tako da se
1poligon podn dio se uklapoligona u gona, imenanjaju s1.
2 šalje u čvoa s2 šalje dalj.
2 p1 se prihvijenja u čvor
ncidentan sa je u prethod
a se zove p3.
"nizbrdo" za
2 p3 se prihnja iz istog
e p4.
oba p2 i p4
djele se isjecanja jer je kostubu. Ovo a p1 i p2.
r n2, jer je sje, dolje ka s
vaća kao portru n1, a dio o
poligonom dnom koraku
ajedno sa s3
hvaća kao prazloga kao
4 šalju dolje
ca tako da poincidentan s
nas ostavljaOva dva
sa pozitivne ss3 i nijedan o
tal tako da sod s3 se uklau stubu. Po
ku poslan do
. p3 i s3 idu
portal i dio o i prije. s3
ka n4 zajed
pristaje, a sa jednim a sa dva poligona
strane s2. od njih se
e također anja jer je oligon s2 olje ka s3
u dolje ka
od s3 se 3 se sada
dno sa s4.
8. Ovdr 9.
Odo
7.
PoidštstIdtrestPVcrpr
PVlis
3 O
Ništa ne ula
vaj čvor nećrugi čvor.
Rezultat
vo je sve šobar "frame
.2. Predlo
ortal mašinadeja bila koro se sva sjeatično rješe
deja je sličnaenutnom vrablu kreira VS je skuprtanja, većtarimjer.
VS se račustova. Kada
Opis u rječnik
azi u čvor n
će imati por
što trebamoe rate".
oženo rješ
a je veoma ristiti portal
ečenja dešavenje da bisa portal maremenu izvrse potencij
p listova kojakođer mož
una tokom pa treba izra
ku rada
5
tale, kako n
o za gradnj
šenje
fleksibilna l mašinu, alvaju kada issmo izbjeglšini, jedino ršavanja, to alno vidljivji su vidljive biti korist
prerenderovčunati scen
53
Ni puklosa po
nije vidljiv iz
PortaPortaPortaPorta
ju jednostav
struktura kli postoje n
scrtavamo scli skupa izršto se umjeizvodi u pr
vi skup odnovi iz prvog tan kada se
vanja mapenu, prvo se
p2 ni p4 ne tpe u čvor. Aoligonom u s
z bilo kojeg
al p1 je u obal p2 je u obal p3 je u obal p4 je u ob
vne portal
koja ima nekneki problemcenu. Zbog računavanjaesto izračunrerenderovaosno PVS3
lista. On n računa rad
e. U svakomnacrta list
trebaju sječenAli, s4 je komstubu pa se st
čvora i ne
a, n1 i n2. a, n1 i n4. a, n2 i n3. a, n3 i n4.
mašine koj
ke lijepe osmi s portal m
toga smo oa tokom vrenavanja šta tanju mape. Z(Potentially
nije koristandiozitet i opt
m listu čuvu kojem je
enje, osim zampletan kointoga i uklanj
može vidjet
ja će dati r
sobine. Prvomašinama,
odlučili pronremena izvrtreba biti naZa svaki lisy Visible Sen samo toktizovanje m
va se skup kamera, a
a to da se ncidentan a.
ti nijedan
relativno
obitno je posebno naći više ršavanja. acrtano u st u BSP et). Ovaj
kom faze mreža, na
vidljivih onda se
nabrha
7.
Dbinebi
Ku talis
Umprtakako
acrta svaki rine o precrardverski ub
.3. Izraču
a bismo izrismo vidjelieke tačke uiti što manje
Kao sa portastablu, zato
ačka koja lesta, zraka m
U slici iznad mora proći k
repriječena ačaka uzoraako rasporeoje raspoređ
Raspointervokviraravni
OcistikoincKomp
list u PVS-rtavanjima. brzane Z-sp
unavanje P
računali PVi da li je ije
uzorke, izmee da bi se iz
lima u porto što se saži u centru
mora proći k
jasno vidimkroz otvor u
te stoga nka u otvoriditi tačke uđuju tačke u
oredi_tackevalom duž a čvora. Fupodjele u gi_tacke(Cvo
cidentne sapleksnost:
u. Ovo zahKao što sm
premnike, št
PVS-a
S, moramo dna tačka ueđu kojih s
zbjegla ogro
al mašini, tamo otvori
lista smatrakroz otvor u
Slika 7.4 V
mo da bi taččvoru. Ovo
ne bi bilo vima čvorov
uzorke u BSu čvoru. One
(Cvor) –ravni podj
nkcija vraćagraničnom oor, SkupTaa poligono( ), gdje
54
htijeva da mmo spomento je sasvim
uraditi stanu listu vidljie vidljivost
omna izraču
tačke uzorciizmeđu lista vidljivomlistu.
Vidljivost i
čka bila vidlo je očito, jevidljivosti i
va mora bitiSP stablu. Zae su:
Ova funkdjele nadolaa skup tača
okviru, a vacaka) – Ukom u čvore je broj u
moramo imanuli ranije,
m dovoljno.
ndardno praiva iz drugot može prat
unavanja. Pr
i mogu biti tova moraju
m u odnosu n
između čvo
ljiva iz druger ako je prizmeđu dviji adekvatana ovu funkc
kcija raspoazećeg čvoaka. Komplevisina. klanja tačkru ili izva
u čvoru, a
ati neku vrstdanašnje gr
aćenje zrakeog lista. Svatiti. Ovih taroblem je ka
raspoređenu provjeriti na zraku ko
orova
gog čvora liošla nekud ije tačke. Zn. Ispod smciju trebamo
oređuje tačra, unutar
eksnost: (e iz skupa an graničnbroj tačaka
tu algoritmagrafičke kar
e između lisaki list trebaačaka uzoraako ih raspo
ne duž ravnii za vidljivooja dolazi iz
inija vidljivdrugo. linij
Zbog toga rmo opisali a
o pomoćne
čke sa odgranica gr) gdje je
tačaka kojnog okviraa u skupu.
a koji se te imaju
stova, da a da ima
aka mora orediti.
i podjele ost. Ako z drugog
osti, ona ja bi bila raspored
algoritam funkcije
dređenim raničnog
e širina
je su ili a čvora.
55
Funkcija: Rasporedi_tacke_uzorke Ulaz. Cvor – Trenutni koji posjećujemo. SkupTacaka – Skup tačaka koje će se rasporediti u podstablu čvora. Izlaz. Nema Efekat: Raspoređuje tačke duž ravni podjele ovog čvora. Onda dijeli nadolazeće tačke prema ravni podjele i uklanja tačke koje su koincidentne sa poligonom u ovom čvoru ili su izvan graničnog okvira ovog čvora. Novokreirane tačke će biti dodane i u pozitivni i u negativni skup. Kada skup tačaka dostigne čvor list te tačke su tačke uzorci ovog lista.
Rasporedi_tacke_uzorke(Cvor, SkupTacaka) 1. OcistiTacke(Cvor, SkupTacaka) 2. ako(je_list(Cvor)) 3. Stavi skup tačaka da budu tačke uzorci ovog čvora 4.u suprotnom 5. DesniDio ← NoveTacke 6. NoveTacke ← RasporediTacke(Cvor) 7. DesniDio ← NoveTacke 8. LijeviDio ← NoveTacke 9. za svaku tačku P u SkupTacaka 10. Strana ← klasificiraj_tacke(Cvor.Djeljitelj, P) 11. ako(Strana ==koincidenta) 12. DesniDio ← DesniDio U P 13. LijeviDio ← LijeviDio U P 14. ako(Strana == ispred) 15. DesniDio ← DesniDio U P 16. ako(Strana == iza) 17. LijeviDio ← LijeviDio U P 18. Rasporedi_tacke_uzorke(Cvor.LijevoDijete, LijeviDio) 19. Rasporedi_tacke_uzorke(Cvor.DesnoDijete, DesniDio)
Slijedi analiza kompleksnosti. Svaki poziv ove funkcije je reda ( + ) (zbog kompleksnosti funkcija Ocisti_tacke i Rasporedi_Tacke). Da bismo izračunali punu kompleksnost, možemo formulisati sljedeću funkciju (pretpostavićemo da je skup tačaka jednako raspoređen u oba skupa): ( ) = 2 ( /2) + ( + ) Koristeći poznati master teorem4, dobijamo red kompleksnosti ( + ).
4[Cormen, Thomas H. Leiserson, Charles E. and Rivest, Ronald L.: Introduction to Algorithms]
56
Ova funkcija se prvo poziva sa korjenim čvorom stabla i praznim skupom kao parametrima. Funkcija radi sljedeće. Počinje raspodjelom tačaka u ravni definisanih poligonom podjele u korjenom čvoru BSP stabla. Kako je ravan beskonačnog oblika, ovo će generisati beskonačan broj tačaka uzoraka pa stoga moraju postojati neke granice unutar kojih se tačke raspoređuju. Ove granice su granični okvir (kutija) korjenog čvora.
Nakon što su tačke raspoređene, sve sešalju dalje u oba podstabla. Kada skup tačaka uzoraka uđe u čvor, one sedijele u dva skupa, jedan skup za tačke sa pozitivne strane ravni podjele u čvoru i jedan skup za tačke na negativnoj strani. Tačke koje su tačno na ravni stavljaju u oba skupa. Zatim se tačke raspoređuju duž ovih čvorova dijeleći ravan sa ovim graničnim okvirima čvorova kao granicama. Nove raspoređene tačke se stavljaju u oba skupa. Sada, pozitivan skup se potiskuje u desno podstablo, a negativan skup se potiskuje u lijevo podstablo. Proces se ponavlja sve dok skup tačaka ne uđe u list. Nakon ovih operacija, svaki list sadrži skup tačaka uzoraka koje su raspoređene u otvorima čvora.
Ako bismo pratili zrakom između svakog čvora u ovoj etapi, to bi trajalo jako dugo. Ali, ako znamo koji listovi su povezani sa drugima bilo bi mnogo lakše, jer bi se to moglo iskoristiti da preskočimo praćenje između nekih listova. Veoma je jednostavno pronaći koji listovi su povezani sa drugim listovima; dovoljno je provjeriti tačke uzorke u svakom listu u odnosu na tačke uzorke svakog drugog lista. Ako dva čvora dijele istu tačku uzorak, ova dva čvora su povezana jedan sa drugim, zato što tokom raspodjele tačaka uzoraka kroz stablo, svaka tačka će završiti ili ni u jednom ili u dva lista. Kada znamo koji listovi su povezani, možemo definisati algoritam za praćenje vidljivosti. Međutim, prvo moramo da definišemo neke pomoćne funkcije.
U cilju praćenja vidljivosti potreno je neko osnovno praćenje zrakom. BSP stabla su veoma dobra struktura za praćenje zrakom, jer se mogu zanemariti ogromni dijelovi svijeta sa veoma malim troškom. Skup funkcija koje trebamo za naše rješenje je:
Poligon_je_pogođen(Poligon, Zraka) – Vraća da li zraka siječe poligon ili ne.
Zraka_presijeca_nešto_u_stablu(Čvor, Zraka) – Vraća da li zraka presijeca nešto u podstablu čvora ili ne.
Presijeca_sferu(Sfera, Zraka) – Vraća da li zraka presijeca (ima interesa) sferu ili ne.
Kreiraj_zraku(Tačka1, Tačka2) – Vraća zraku između dvije tačke.
Zraka_presijeca_nešto_u_stablu je najzanimljivija funkcija od ovih iznad jer pokazuje neke prednosti sa BSP stablima i kako BSP stabla mogu biti korištena za optimizovanje uobičajenog praćenja zrakom. Ovo je rekurzivna funkcija koja se prvo primjenjuje na korjeni čvor stabla. Algoritam je formulisan na sljedeći način:
Ulaz. Čvor – Čvor kroz koji će se pratiti. Zraka – Zraka za test presjeka. Izlaz. Da li zraka presijeca nešto ili ne.
57
Efekat. Provjerava da li zraka presijeca nešto u ovom čvoru ili ijedan od čvorovih podstabala.
Zraka_presijeca_nešto_u_stablu(Čvor, Zraka) 1. za svaki poligon P u Čvoru 2. Poligon_je_pogođen(P, Zraka) 3. početnaStrana ← Klasifikuj_tačke(Zraka.PočetnaTačka, Čvor.Djelitelj) 4. krajnjaStrana ← Klasifikuj_tačke(Čvor.KrajnjaTačka, Čvor.Djelitelj) //Ako zraka pokriva ravan podjele ovog čvora ili ako je zraka koincidentna sa ravni, //pošalji dolje ka oba djeteta. 5. ako((početnaStrana == koincidentna i krajnjaStrana == koincidentna) ili početnaStrana != krajnjaStrana i početnaStrana != koincidentna i krajnjaStrana != koincidentna) 6. ako(Zraka_presijeca_nešto_u_stablu(Čvor.LijevoDijete, Zraka)) 7. vrati tačno 8. ako(Zraka_presijeca_nešto_u_stablu(Čvor.DesnoDijete, Zraka)) 9. vrati tačno //Ako je zraka samo sa pozitivne strane ravni podjele pošalji zraku dolje u desno dijete. //Ili u ako izrazu je zato što jedna od tačaka može biti koincidentna sa ravni. 10. ako(početnaStrana == ispred ili krajnjaStrana == ispred) 11. ako(Zraka_presijeca_nešto_u_stablu(Čvor.DesnoDijete, Zraka)) 12. vrati tačno //Ako je zraka samo sa pozitivne strane ravni podjele pošalji zraku dolje u desno dijete. //Ili u ako izrazu je zato što jedna od tačaka može biti koincidentna sa ravni. 13. ako(početnaStrana == iza ili krajnjaStrana == iza) 14. ako(Zraka_presijeca_nešto_u_stablu(Čvor.LijevoDijete, Zraka)) 15. vrati tačno //Nije bilo presjeka nigdje, proslijedi to iznad. 16. vrati netačno
Sada ćemo analizirati kompleksnost ove pomoćne funkcije. Najgori slučaj je taj da zraka prođe kroz baš svaki čvor u stablu u kojem slučaj treba biti testiran u odnosu na svaki poligon. To nam daje red ( ), gdje je broj poligona u stablu. Tipično, zraka će proći kroz svaki čvor u stablu, što reducira broj poligona za provjeru. Najbolji slučaj je ako je zraka ograničena na samo jedan čvor, u čijem slučaju kompleksnost funkcije će biti negdje oko (lg ), zavisno od strukture stabla.
Slijedi algoritam za funkciju Provjeri_vidljivost.
Provjeri_vidljivost Ulaz. Čvor1 – Početni čvor. Čvor2 – Krajnji čvor. Izlaz. Da li je Čvor2 vidljiv iz čvora 1 ili ne.
58
Efekat. Prati izmeđtu tačaka uzoraka u oba lista da vidi da li postoji vidljivost između dva čvora.
Provjeri_vidljivost(Čvor1, Čvor2) 1. Vidljiv ← netačno 2. za svaku tačku uzorak P1 u Čvor1 3. za svaku tačku ozorak P2 u Čvor2 4. Zraka ← Kreiraj_zraku(P1, P2) 5. ako(ne Zraka_presijeca_nešto_u_stablu(Čvor1.Stablo.KorjeniČvor, Zraka) 6. Vidljiv ← tačno 7. vrati Vidljiv
Funkcija Provjeri_vidljivost je računski ekstremno skupa. Kada pratimo između dva lista između kojih nema vidljivosti, mora se uraditi praćenje iz svake tačke uzorka u čvoru 1 ka svakoj tački uzorka u čvoru 2. U najgorem slučaju, svako od ovih praćenja mora biti provjereno naspram svakog poligona u stablu, stoga će kompleksnost funkcije biti ( 1 2 ), gdje je 1 broj tačaka uzoraka u čvoru 1, 2 je broj tačaka uzoraka u čvoru 2 i je broj poligona u stablu. Generalno ponašanje je mnogo bolje, bliže ka ( 1 2lg ) zbog redukcije poligona koja je potrebna za provjeru naspram u praćenju zrakom kroz stablo.
Konačno, možemo dati kod i za funkciju Prati_vidljivost:
Prati_vidljivost Ulaz. Stablo – BSP stablo za praćenje vidjivosti u njemu. Izlaz. Ništa. Efekat.Za svaki list u stablu prati vidljivost ka listovim povezanim čvorovima. Svaki čvor za koji se utvrdi da je vidljiv biva dodan u PVS tog čvora. Kada je pronađen vidljiv list mi moramo pratiti vidljivost ka vidiljivim čvorovima povezanih čvorova.
Prati_vidljivost(Stablo) 1. za(svaki list L u Stabo) 2. za(svaki list C koji je povezan sa L) 3. Dodaj C u L-ov PVS 4. za(svaki list L1 u Stablo) 5. dok(postoji list L2 u L-ovom PVS-u koji je povezan s čvorovima koji još nisu bili provjereni za vidljivost) 6. za(svaki list C koji je povezan sa L2) 7. ako(C nije u L1-ovom PVS-u već i Provjeri_vidljivost(L1, C) 8. Dodaj C u L1-ov PVS 9. Dodaj L1 u C-ov PVS
59
Preostaje da analiziramo kompleksnost i ove funkcije. Ako ne bismo iskoristili prednost optimizacije koju daju povezani listovi, morali bismo pratiti vidljivost između svakog lista, pa bi kompleksnost bila ( ), gdje je broj listva u stablu. Veoma je teško dati aproksimaciju koliko mnogo koju strategija ubrazava proces, jer je to veoma ovisno o tome kako je nivo konstruisan. U nivou gdje je svaki list vidljiv iz svakog drugog lista neće se optimizovati ništa, dok će se nivo gdje su samo jedan ili dva list vidljivi iz svakog drugog lista optimizovati jako dobro, skoro do ( ). Struktura koja je generisana će sada odbaciti veliku količinu poligona u svakom okviru ("frame"-u) u dobroj mapi. Dobra mapa se kreira razmatrajući aspekt vidljivosti, što znači da će se ubaciti objekti koji zaklanjaju pogled, kao što su zidovi da bi prepriječili pogled. Ako mapa sadrži velike sobe sa mnogo detalja, naša mašina nema ništa što može uraditi po pitanju uklanjanja poligona. U ovim lošim slučajevima postoji druga tehnika koja može biti korištena za uklanjanje poligona; ta tehnika se naziva nivo detalja (LOD5 – level of detail).
5 Opis u rječniku rada
60
8.Radiozitet
8.1 Pozadina problema
Originalna ideja za radiozitet je formulisana od strane grupe pisaca, imena Goral, Torrance, Battaile i Greenberg.6 Oni su predložili radiozitet kao simuliranje prenosa energije između difuznih površina. Ovo su površine koje odbijaju svjetlost u svim smjerovima jednako, suprotno sjajnim površinama. Rezultat takve simulacije će dati rezultat nezavisan od tačke gledišta, što znači da će osvjetljenje na površini izgledati isto iz svih uglova gledanja. Ovo je veoma dobro prilagođeno 3D igrama jer je izračunavanja potrebno uraditi samo jednom, tokom prerenederovanja mape.
Mi ćemo dati kratki pregled kako algoritam radioziteta radi i fokusirati se na to kako se BSP stabla mogu koristiti za optimizovanje izračunavanja.
Algoritam radioziteta je dizajniran tako da će osvjetljenje scene biti glatko i prirodno. Ako budemo koristili jednostavni model osvjetljenja gdje svako svjetlo šalje zrake u svijet i osvjetljava ga bez daljeg odbijanja svjetla, sjene će biti veoma oštre i stvari će izgledati veoma neprirodno. Da bi se koristio algoritam radioziteta, svijet se mora podijeliti u djeliće, gdje je svaki djelić mali dio svijeta. Svaki od ovih djelića ima početni energetski nivo, koji je normalno nula osim ako se radi o izvoru emitovanja kao što su sijalice, užareni zidovi ili nešto slično tome.
Postoji nekoliko načina rasprostiranja svjetlosti kroz svijet. Mi smo izabrali da koristimo tzv. iterativni radiozitet. Ovo znači da počinjemo sa slanjem energije vani iz djelića sa najvišim nivoom neposlane energije u sceni, nakon čega se ta neposlana energija djelićapostavlja na nulu. Ovaj proces se ponavlja sve dok postoji djelić čija energija je iznad određenog praga vrijednosti.
Kada šaljemo energiju vani iz jednog djelića (j) ka drugom (i) koristi se sljedeća formula: = + ∗ ∗ /
Pri tome je:
= nivo nivoa energije djelića
= nivo nivoa energije djelića
= faktor oblika između djelića i
6[Goral, Cindy M., Torrance, Kenneth E., Greenberg, Donald P., Battaile , Bennett. Modelling the interaction of light
betweendiffuse surfaces]
61
= površina djelića
= površina djelića
U formuli iznad faktor oblika zahtijeva dalji opis. On se može izraziti u obliku
= ∗ ∗
gdje je
= faktor oblika između djelića i
= udaljenost između dva djelića , = ugao između normale djelića i zrake između djelića
= vidljivost između dva djelića. Ako je samo jedna zraka praćena između dva
djelića, ovo je 0 ili 1. Tipično se koristi više od jedne zrake radi boljih aproksimacija, jer djelići nisu tačke, već površi.
Kao što vidimo iznad, ekstremno je skupo raditi izračunavanja radioziteta na sceni. Ova funkcija je reda ( ) gdje je broj djelića na sceni. Kako ćemo za svaki djelić poslati po jednu zraku najmanje ka svakom drugom djeliću na sceni, to znači da se praćenje kroz scenu potencijalno okreće ka svakom poligonu (zasigurno se može pretpostaviti da je broj djelića u sceni veći od broja poligona). (vidljivost) dio faktora oblika je najskuplji dio za izračunati i to je mjesto gdje možemo iskoristiti snagu BSP stabala.
8.2 Radiozitet u BSP stablima
Prije nego se može izračunati stvarno osvjetljenje, površi se moraju podijeliti u djeliće. Jedna ideja je da su djelići određene veličine od samog početka i kada se energija izračuna u djeliću, ona sedijeli u manje djeliće ako energija previše varira preko djelića. U ovom radu,nije korištena ova ideja, nego je iskorišten pristup koji je bliže vezan sa osnovnom temom rada, odnosno za optimizovanje izračunavanja iskorištena su BSP stabla.
Kreiranje djelića se pokazuje kao izazovan problem, ali kako taj problem nije povezan sa BSP stablima niti može izvući neku korist od BSP stabala,u njega se ovdje nećemo upuštati.
U izvornoj ideji radioziteta, svaki izvor svjetla u sceni bi se trebao posmatrati kao jedan ili više djelića. Mi ćemo to uraditi na drugačiji način. Svaki izvor svjetla se pohranjuje u BSP stablu u listu u kojem je lociran. Prva stvar koja se dešava je da svako svjetlo šalje vani energiju ka svim djelićima. Kada se ovo uradi, izračunavanja radioziteta se mogu
62
završiti i scena će izgledati prilično dobro. Da bismo učinili da ovo izgleda znatno bolje, koristili smo tehniku koja se zove progresivna dorada7, malo modificiranu. U svakoj iteraciji dorade, djelić sa najvećom energijom u svakom od listova će odbijati svoju energiju ka svim drugim djelićima. Ovo će rezultirati širenjem energije sa dobro osvijetljenih djelića ka djelićima u sjenama. Kao u stvarnom životu, ništa nije skroz crno, sve odbija svjetlo, manje ili više.
Zbog skupe prirode izračunavanja radioziteta, moramo uraditi neke optimizacije. Korištenje PVS-a koji je napravljen tokom renderovanja BSP stabla može uštediti mnoga nepotrebna izračunavanja kod biranja koji djelići trebaju primiti energiju. Praćenje zrake je primijenjeno na isti način kao i kad je PVS računat.
Predložena verzija algoritma za distribuciju energije kroz scenu je sljedeća:
Radiozitet Ulaz. Stablo – stablo u kojem će biti primijenjen radiozitet Izlaz. Nema Efekat.Šalje energiju između djelića na sceni.
Radiozitet(Stablo) 1 za(svaki list L u Stablo) 2 za(svako svjetlo S u L) 3 za(svaki list V koji je u L-ovom PVS-u) 4 Šalji S-ovu energiju ka djelićima u V //U ovoj fazi biramo da ovo uradimo tako da dizajner nivoa može provjeriti kako //izgleda scena u bilo kojoj tački i prekinuti slanje energije kada odredi da izgleda //dovoljno lijepo. 5 dok(ne izgleda dovoljno lijepo) 6 za(svaki list L u Stablo) 7 za(svaki list V koji je u L-vom PVS-u) 8 Šalji energiju iz djelića sa najviše neposlane energije u L ka svim djelićima u V.
Ovafunkcija je veoma zahtjevna po pitanju troška izračunavanja. Najgori slučaj je gdje se svaka zraka mora provjeritinaspram svakog poligona u sceni, što je reda ( ) gdje je broj djelićau stablu. Na sreću, optimizacije koje smo uradili reducirat će trošak, ali skoro da je nemoguće reći koliko s obzirom da to mnogo zavisi od strukture stabla.
Ovo daje veoma brzo osvjetljavanje scene kada se iskoriste prednosti BSP stabala. Posebno, posao rađen tokom praćenja zrake može biti skraćen značajno. Dizajner mape može odlučiti kada je renderovanje mape gotovo prekidanjem petlje bilo kada, ako je rezultat dovoljno dobar. Jednostavno je prerednerovati mapu više puta kako bismo vidjeli kako će približno izgledati, umjesto renderovanja do kraja kod svake promjene.
7[Nuydens, Tom. 3D Engine Column, Delphi3D]
63
9. Pravci za dalji rad
Postoji veliki broj stvari koje se mogu uraditi radi unaprijeđivanja stvari predstavljenih u ovom radu. Neki primjeri unaprijeđuju algoritme detekcije sudara, vrše bolje uklanjanje nevidljivih objekata i kreiranje portal mašine sa statičnim PVS-om. Neke druge stvari nisu ni spomenute u ovom radu kao što je predikcija i koja stoga nije ni implementirana.
Objekti su često mnogo kompleksniji od geometrije svijeta, npr. sastoje se od više poligona. Stoga, bilo bi dobro ukloniti što je više moguće nevidljivih objekata. U rješenju predloženom u ovom radu, svi objekti koji su u vidljivom listu se iscrtavaju. Ako se može razviti brzi algoritam da ukloni nevidljive objekte, to bi unaprijedilo performanse.Veoma je teško kreirati algoritam koji uklanja objekte, a koji je jeftiniji od njiihovog iscrtavanja na ekranu.
Ako se kreira portal mašina sa statičnim PVS-om, dobijaju se sve beneficije portal mašine kao što su ogledala i lagano uklanjanje objekata, a izvlači se korist jačine statičnog PVS-a, što znači da je jeftino naći koje sektore crtati i jeftino je osvjetljavanje svijeta.
Predikcija je važna stvar u igrama sa više igrača. Cilj je da klijenti imaju što je moguće tačniju sliku na ekranu, koja se ne razlikuje mnogo od servera.
64
Zaključak
BSP stabla su veoma korisne strukture koje imaju mnogo prednosti za potrebe kreiranja3D mašina. Mada je njihova izvorna svrha korištenja (sortiranje poligona da bi ih bilo moguće iscrtati u pravilnom poretku na ekranu) donekle zastarjela, mnoge oblasti korištenja ostaju, kao što su brza detekcija sudara, uklanjanje skrivenih površina i optimizacije mreže. Još uvijek ima prostora za poboljšanja. Slijede neke prednosti i nedostaci BSP stabala.
Prednosti:
Brza detekcija sudara, veliki dio mape može se lako odbaciti jer je jeftino pozicionirati objekat u list. Kada se to uradi, samo poligoni u listu trebaju da se provjere za sudare.
sa PVSom je lako ukloniti nevidljive dijelove mape.
Mogu biti korištena za optimizovanje mreža.
Mogu biti korištena za izračunavanje osvijetljenosti mape.
Nedostaci:
BSP stabla su pogodna samo za statične svjetove. Moguće je dodati ili ukloniti poligone u svijet, ali da bismo uradili ovo potrebno je opet izračunati dio BSP stabla. Korištenje lokalnih BSP stabala, koja su ispresijecana sa glavnim BSP stablom, je također moguća optimizaciona tehnika, ali ostaje činjenica da su BSP stabla bolje prilagođena za statične svjetove.
Da bismo najefikasnije iskoristili BSP stablo potrebno je još dodati PSV (Potentially Visible Set – Skup moguće vidljivosti) ili neke druge slične tehnike. Ako to ne uradimo vjerovatno ćemo završiti sa razmatranjem previše poligona (posebno sa velikim svjetovima).
BSP stablo tehnika je poprilično komplicirana.
BSP stabla će sigurno postojati u industriji igara sljedećih pet do deset godina, ali za nadati se je da će neko pronaći neke pametnije, više dinamične strukture sa istim prednostima koje imaju BSP stabla. Jedan od najvećih problema sa BSP stablima je njihova kompleksnost. Postoji mnogo dijelova potrebnih da bi sve radilo kako treba pa idealno rješenje mora biti jednostavnije i intuitivnije.
Alternativa BSP stablima bi mogla biti neka vrsta grafa scene, gdje je sve objekat koji se dobija iz istog roditelja. Svaki objekat zna u kojem objektu je lociran. Svi objekti znaju kako bi trebali biti prikazani, kako sudari uzimaju mjesto unutar njih, koje susjede imaju, gdje se može vidjeti izvan njih. Ovo bi učinilo jednostavnijim ubacivanje i
65
izbacivanje dijelova svijeta bez reredenderovanja cijelog svijeta. Također bi to bio mnogo elegantniji način rješavanja složenosti koja nastaje kod BSP stabala jer nijedan tip objekta ne treba da zna o bilo kojem drugom tipu objekta. Svi primjenjuju isto sučelje i jedina komunikacija između objekata bi išla kroz to sučelje.
66
Literatura
[1] M. de Berg, O. Cheong, M. van Kreveld,Computational Geometry, Algorithms and Applications (3rd edition),Springer, 2008.
[2] R. E. Samuel, Binary Partioning Trees and Polygon Removal in Real Time 3D Rendering, (2001), 61-62.
[3] E. Saykol, B. Kirimer, Progressive Refinement of Radiosity
[4] S. Teller, Application Challenges to Computational Geometry
[5] M. Firebaugh, Three-Dimensional Graphics – Realistic Rendering
[6] P. Nettle,Radiosity in English
[7] T. Nuydens, 3D Engine Column, Delphi3D
[8] L. Ammeraal, K. Zhang, Computer Graphics for Java Programmers (2nd edition), John Wiley, 2007.
[9] H. Fuchs, Z. M. Kedem, B. Naylor, On visible surface generation by a priori tree structures, Computer Graphics, 14:124–133, 1980. Proc. SIGGRAPH ’80.
[10] N. Chin, S. Feiner, Near real time shadow generation using BSP trees, in Proc. SIGGRAPH ’89, pp 99–106, 1989.
[11] B. Naylor, J. A. Amanatides, W. Thibault, Merging BSP trees yields polyhedral set operations, Computer Graphics, 24:115–124, August 1990. Proc. SIGGRAPH ’90.
[12] W. C. Thibault, B. F. Naylor, Set operations on polyhedra using binary space partitioning trees, Computer Graphics, 21:153–162, 1987. Proc. SIGGRAPH ’87.
[13] C. Ballieux, Motion planning using binary space partitions, Technical Report Inf/src/93-25, Utrecht University, 1993.
[14] M. de Berg, M. Streppel, Approximate range searching using binary space partitions, Computational Geometry, Theory and Applications, 33:139–151, 2006.
[15] J. Nievergelt, P. Widmayer, Spatial data structures: Concepts and design choices, M. van Kreveld, J. Nievergelt, T. Roos, and P. Widmayer, editors, Algorithmic Foundations of Geographic Information Systems, Lecture Notes in Computer Science, vol. 1340. Springer-Verlag, 1997.
[16] M. S. Paterson, F. F. Yao, Efficient binary space partitions for hidden-surface removal and solid modeling, Discrete Computational Geometry, 5:485–503, 1990.
67
[17] C. T´oth, A note on binary plane partitions, Discrete Computational Geometry, 30:3–16, 2003.
[18] C. T´oth, Binary space partitions: Recent developments, In J. E. Goodman, J. Pach, and E. Welzl, editors, Combinatorial and Computational Geometry. 374 MSRI Publications, vol. 52, pp. 529–556, Cambridge University Press, 2005.
[19] C. T´oth, Binary space partition for line segments with a limited number of directions, SIAM J. Comput., 32:307–325, 2003.
[20] F. d’Amore, P. G. Franciosa, On the optimal binary plane partition for sets of isothetic rectangles, Information Processing Letters, 44:255–259, 1992.
[21] M. de Berg, M. de Groot, M. Overmars, New results on binary space partitions in the plane, Computational Geometry Theory and Applications, 8:317–333, 1997.
[22] M. Katz, M. Overmars, M. Sharir, Efficient hidden surface removal for objects with small union size, Computational Geometry Theory and Applications, 2:223–234, 1992.
[23] M. de Berg, Linear size binary space partitions for uncluttered scenes, Algorithmica, 28:353–366, 2000.
[24] M. de Berg, M. Streppel, Approximate range searching using binary space partitions, Computational Geometry Theory and Applications, 33:139–151, 2006.