Sunteți pe pagina 1din 14

Subscribe to DeepL Pro to translate larger documents. Visit for more information.

Algoritm extins de detectare a siluetei marginilor pentru a crea un volum de


umbre în timp real
LJMU Cercetare online
Kolivand, H, Sunar, MS și Rehman, A
http://researchonline.ljmu.ac.uk/id/eprint/5718/

Articolul

raede(vzăvorltuagt perenctrou mcaauntdiliazabtiol rsii ăsăfaacibeățiarcecefesrmireai leaficient la producția devecersrciuetn


șiK/saoulitvipaănrido, cHop, iSe ua noaricră, rMui SartșicioRl (eahrtimcoalen) ,dAin L(2JM01U2R) eAselgarocrh
praivastilsuaeu tpeeinmtruacregricneitalorer npeecnomtreurcaialcăr. eNau uvănpvuotelțui amngdajea îunmdibst

Versiunea prezentată aici poate fi diferită de versiunea publicată sau de versiunea din dosar. Vă rugăm să consultați
URL-ul depozitului de mai sus pentru detalii privind accesarea versiunii publicate și să rețineți că accesul poate
necesita un abonament.

Pentru mai multe informații, vă rugăm să contactați researchonline@ljmu.ac.uk

http://researchonline.ljmu.ac.uk/
REVISTĂ INTERNAȚIONALĂ DE CERCETARE ACADEMICĂ
Beyn=lxalq Elmi Arașdırmalar Jurnalı
Tipărire: ISSN: 2075-4124Volumul4, Numărul 3, pp. 209-
218, 2012

ALGORITM EXTINS DE DETECTARE A SILUETEI


MARGINILOR PENTRU A CREA UN VOLUM DE UMBRE ÎN
TIMP REAL
Hoshang Kolivand1* , Mohd Shahrizal Sunar2
, Amjad Rehman3
1,2
UTM ViCubelab, Departamentul de Grafică pe calculator și Multimedia, Facultatea de Informatică și Știința
Calculatoarelor
Sisteme informatice, Universiti Teknologi Malaysia, 81310 Skudai Johor
(Malaezia)
1
E-mail:shahinkey@yahoo.com,2 E-mail: shah@cs.utm.my,3 rkamjad@gmail.com

ABSTRACT

Se propune un nou algoritm de recunoaștere a siluetei ocluzorului pentru a genera un volum de umbră cu unele
îmbunătățiri ale algoritmului tradițional de volum de umbră. Noul algoritm a fost denumit EESD (Extended Edge Silhouette
Detection). Detectarea siluetei este unul dintre procesele costisitoare ale volumelor de umbre. Algoritmul triunghiular și
algoritmul vizibil-nevizibil, care sunt algoritmi renumiți pentru detectarea conturului ocluzorului, sunt reînnoiți. A fost
realizată o comparație precisă între acești algoritmi și un nou algoritm. Algoritmul detectează silueta și scade costul implementării
volumului de umbre. Rezultatele obținute confirmă superioritatea algoritmului propus în ceea ce privește timpul de procesare în
comparație cu algoritmii tradiționali utilizați anterior. Ultimul algoritm de volum de umbră care utilizează bufferul stencil este
rescris și se propune un algoritm pentru volum de umbră cu detectarea siluetei împreună.

Cuvinte cheie: detectarea siluetei, volum de umbră, buffer stencil, timp real

1. Introducere

Pentru a avea un mediu realist, umbra este cel mai important efect care dezvăluie mai multe informații despre distanța
dintre obiectele din scenă. Acesta este factorul principal al graficii 3D pentru mediul virtual, dar, din păcate, este dificil de
implementat în mediul de afișare, în special în jocurile în timp real. În jocurile pe calculator, umbrele oferă jucătorilor senzații
care ar putea declanșa imaginația că se joacă în lumea reală, oferind astfel o plăcere maximă. Un joc fără umbre nu poate fi atractiv,
mai ales în acest secol, în care imaginația jucătorilor solicită situații mai realiste atunci când se uită la desene animate sau
joacă jocuri.
Există mulți algoritmi pentru a crea umbre, dar volumele de umbră au o mare realizare pentru producătorii de jocuri.
Deși volumele de umbră sunt considerate ca fiind consacrate în industria jocurilor, acestea au două faze costisitoare. Una dintre ele
este actualizarea paselor de redare a volumelor, iar cealaltă este detectarea siluetei.
Pentru a avea un volum de umbră, este necesar să se recunoască limita ocluzorului, iar alte aspecte nu sunt importante.
Detectarea conturului este necesară în fiecare cadru și, ca urmare, necesită timp de procesare din partea procesorului. Este
important să se reducă acest timp și să se mărească numărul de cadre pe secundă (FPS) al filmelor.
Recunoașterea conturului unui obiect poate crește viteza algoritmului. Pentru a afla conturul obiectului, detectarea
siluetei este esențială, deoarece poate reduce costul implementării și este principalul element de îmbunătățire a unui
algoritm. Siluetele sunt partea specială a conturului care poate contribui la realizarea obiectivului. Detectarea siluetelor
este o fază importantă în toate efectele vizuale. Este de menționat faptul că bazele siluetelor sunt vizuale și punctul de vedere.
Pentru a genera o umbră, detectarea siluetelor joacă un rol crucial în detectarea limitei ocluzorului. Doar silueta contribuie la
umbră, iar celelalte contururi ale ocluzorului nu sunt importante.
Detectarea siluetei este o funcție ca f: R3 R2 . În 1987, Richards, Koenderink și Hoffman [1] au fost primii
cercetători care au propus o metodă de interpretare a siluetei unor obiecte arbitrare. În 1990, Saito și Takahashi
[2] au folosit G-buffer pentru a recunoaște silueta. G-buffer-ul este baza Z-buffer-ului produs prin adăugarea unor date
geometrice.
Hertzmann a propus un algoritm pentru suprafețe neregulate cu lipsă de continuitate și siluetă, bazat pe o combinație între
harta normală și harta de adâncime. Acest algoritm hibrid modifică fața obiectului folosind Z- buffer-ul [3]. Raskar și Cohen [4]
au introdus o modalitate de recunoaștere a siluetei prin plasarea feței frontale a poligonului pe fața din spate a acestuia. În
1999, Gooch et al.[5] au folosit o metodă similară pentru a calcula silueta.
În 2000, Northup și Markosion au propus un algoritm, deși este foarte simplu și adecvat, este dificil de găsit punctele de
plecare ale fiecărei coerențe. În algoritmul lor, coerența spațială este atât de impresionantă.
În 2003, Isenberg[7] a clasificat reorganizarea siluetei în trei grupe, care sunt algoritmi de spațiu de imagine care se
concentrează pe procesarea imaginilor , algoritmi de spațiu de obiect care sunt împărțiți în două grupe, formă liberă și plasă
poligonală și al doilea grup este algoritmii hibrizi. Algoritmii din spațiul obiect sunt mai
buni decât ceilalți datorită avantajelor sale în găsirea acurateței siluetei și a stilizării adecvate [9,7].
În 2004, Soon Ki Jun et al.[10] au introdus un algoritm care utilizează împreună coerența spațială și coerența cadrului.
O modalitate ușoară și simplă de a găsi silueta este de a verifica toate marginile. La început, programatorul a folosit acest
algoritm pentru a recunoaște silueta pentru modelele poligonale. Pentru acest calcul sunt necesare informații despre marginile
învecinate, iar
necesită recalcularea atunci când sursa de lumină sau poziția privitorului se schimbă. Dar este o pierdere de timp; prin urmare,
aceștia au întrerupt studiul și au început să cerceteze un algoritm adecvat [5, 18].
Benichou și Elber[8] au utilizat o metodă de calcul al marginilor siluetei paralele a unui obiect poliedric pe baza
sferei gaussiene, pentru vectorii normali care sunt situați pe direcția de vizualizare cartografiată pe o sferă gaussiană. Matt
Olson și Hao Zhang [16], în 2006, au lucrat la spațiul tangențial și s-au axat pe distanța tangențială a obiectelor care urmează să
fie utilizată în detectarea siluetelor din ochiuri poligonale. În 2010, Matt
Olson[11], a proiectat un site care enumeră toate
documente conexe.
În cazul algoritmului EESD, media operațiilor este mai mică decât în cazul celorlalți și, prin urmare, este mai rapidă.
În cazul volumului de umbră tradițional, care utilizează silueta triunghiulară, numărul de operații este mare, ceea ce duce la mai
puține cadre pe secundă.
După introducerea siluetei și a două tehnici celebre de recunoaștere a conturului ocluzorului, se calculează numărul de
înmulțiri, adunări și comparații. În cele din urmă, a fost realizată o comparație precisă între ele.

2. Definiția siluetei
Siluetele au rolul cel mai important de a recunoaște și de a proiecta forma asupra receptorului de umbră. Pentru a crea
o umbră, proiecția siluetei ocluzorului este suficientă pentru a genera o umbră a întregului obiect și, prin urmare, costul
proiecției va fi scăzut. O muchie de siluetă a poligonului este muchia care aparține la două planuri de vecinătate în care
vectorul normal al unuia dintre ele este îndreptat spre lumină, iar vectorul normal al celuilalt plan este îndepărtat de lumină
[6]. Dacă volumul de umbră este dorit punct cu punct, este prea dificil de executat programul. Este nevoie de o mulțime
de calcule și apoi este nevoie de un timp substanțial al procesorului pentru redare. Pentru a îmbunătăți această tehnică,
ar trebui să recunoaștem marginile conturului sau siluetele obiectului și să implementăm algoritmul doar pentru siluete.
Folosirea marginilor siluetei ocluzorului pentru a genera un volum de umbră ar putea optimiza procesul, deoarece cantitatea
de memorie este redusă, prin urmare, randarea se va face mai rapid. Silueta ar trebui recalculată atunci când se schimbă
poziția sursei de lumină sau când ocluzorul se deplasează [21].
În ceea ce privește tehnicile utilizate pentru recunoașterea siluetei, există cinci categorii:
 Marginile siluetei; include toate marginile vizibile care leagă fețele din spate de cele din față.
 muchii de creastă sau muchii ascuțite; acest tip de muchii sunt muchii care au o față plană vizibilă și o față
plană invizibilă.
 muchii de vale; aceste tipuri de muchii au un unghi mai mare sau egal cu unghiul de prag între două fețe plane
care au format muchia.
 Marginile de frontieră; care se mai numesc și margini de frontieră.
 Combinație între conturul umbrei și conturul limitei texturii.
Să presupunem că:
v este un punct
de vedere fi este o
față F fv este un
vertex al lui f

n f este vectorul normal al lui f


e E E este o margine a ocluzorului
e i=1,2 sunt fețe în care se află e
if

p f este un plan al lui f


Distanța dintre v și f este:

Fața frontală

Fața din spate

Fig.1. Efectul detecției siluetei asupra umbrei


||v ,f ||=( v - f v ). n f
Acum, având la dispoziție semnul ||v,f|||, fața poate fi recunoscută ca fiind fața din spate sau fața din față.
Dacă ||v, f ||>0 atunci
f este o față
frontală Else
f este o față din
spate End dacă
Dacă ||v, e ||| ||v, e || <0 atunci
f 12

e este o siluetă
Sfârșit dacă
În cazul fețelor netede, aceasta poate fi normalizată pentru a recunoaște marginea siluetei.

( f  v) n f
Di = vi

|| n |||| f v ||
if i

Dacă atunci
Di>0

este fața
fi
frontală altfel dacă
Di<0
fi este fața din
spate altfel dacă Di=0
atunci
vi este silueta
end if

3. Algoritmi de detectare a siluetei


Deși există mulți algoritmi de detectare a siluetelor, dorim să comparăm algoritmul EESD cu cei mai
cunoscuți. În primul rând, este necesar să enumerăm algoritmii populari și utili, deoarece acest lucru ar putea facilita o
înțelegere mai ușoară.

3.1. Algoritmul triunghiular

În acest algoritm propus de Harlen și Ilaim[12] în 1999, este necesar să se împartă fiecare față a ocluzorului în
ochiuri triunghiulare. Aceasta înseamnă că fiecare muchie trebuie să fie împărțită de doar două triunghiuri. Pentru a
determina care muchie este silueta, este necesar să se știe care muchie este împărțită între fețele dinspre sursa de lumină și
fețele dinspre sursa de lumină [22].
În primul rând, să avem un tablou cu toate marginile (S)
For p=1 to Number Of Faces
If p.visible=True then
Pentru q=1 la Numărul de laturi
Dacp ăq v v v-1 aparține lui S,
atunci Șterge vpvq din
S
Else
Adaugă vpvq în S
End if
Urm
End if ătoru
Urmă l
torul
S este o listă de siluete

Fig.2. Plasă triunghiulară


Înainte de a începe acest algoritm, toate fețele ocluzorului trebuie împărțite în triunghiuri, iar toate aceste muchii ale
triunghiurilor trebuie să fie introduse într-o matrice (S). Apoi, din prima matrice, dacă inversul fiecărei muchii aparține de S,
aceasta nu este o siluetă și trebuie omisă din matrice. Pe de altă parte, în cazul în care nu face parte din matrice, este o siluetă
și trebuie introdusă în matrice, până la sfârșitul acesteia.

3.2. Algoritmul vizibil-neconservabil

În acest algoritm propus de Soon Ki Jung în 2004[10], toate marginile care au doar o singură față vizibilă sunt siluete.
Aceste muchii care au exact o față vizibilă și una invizibilă sunt siluete, dar, dimpotrivă, fiecare muchie cu două fețe vizibile
sau două fețe invizibile nu este considerată siluetă.
Pentru E=1 la numărul de muchii
Pentru F=1 la numărul de fețe
Dacă F.visible =True atunci
E_ counter =E_counter+1
Sfârçitul dacă
Următorul
Dacă e_counter=1 atunci
Adăugați E la S

Următorul
S este o listă de siluete

Fig.3. Detectarea siluetei

Acest algoritm este foarte simplu. Să presupunem că sursa de lumină este situată în ochii privitorului. Marginea ad
din figura 3 aparține unei fețe vizibile și unei fețe invizibile, deci este o siluetă, în timp ce marginea ab aparține la două
fețe vizibile, deci nu este o siluetă. Marginea hg aparține la două fețe invizibile și, de asemenea, nu este o siluetă.

3.3. Algoritmul EESD

Aici propunem un nou algoritm, numit algoritmul EESD, care va fi descris în cele ce urmează. Să presupunem că
punctul sursei de lumină și punctul de vizualizare sunt situate într-un singur loc și se află în ochii privitorului. Pentru fiecare
muchie v1v2, se extinde v1 la v1+∆v1 unde ∆v1 0. Apoi se face o rază (R) de la sursa de lumină la v1'=v1+∆v1 și se
prelungește până la infinit. Dacă aceasta are o intersecție cu una dintre fețele ocluzorului, nu este o siluetă, dar, dimpotrivă, dacă
nu are nicio intersecție cu ocluzorul, este o siluetă.
Pentru e1=1(v1v2) la numărul de muchii
v1'=v1+ ∆v1
R= raza sursei de lumină
către v1' pentru f=1 la
Numărul de fețe
dacă Intersecția(R,f)=false atunci
Adăugați v1v2 la S
Sfârçitul dacă
Urm
Urm ătoru
ătoru l
l

Dacă se presupune că sursa de lumină este situată în punctul de vedere și cu ajutorul figurii 4, imaginați-vă o
rază R din punctul de vedere până în punctul v1' și continuați raza până la infinit. Dacă aceasta are o intersecție cu
două fețe ale ocluzorului, nu este o siluetă. Dimpotrivă, dacă nu are nicio intersecție cu ocluzorul (muchia verde), este
o siluetă.
Fig.4. Detectarea siluetei

4. Volum de umbră folosind algoritmul EESD

În 1977, Crow [13] nu a putut implementa algoritmul său din cauza lipsei de hardware suficient la acea vreme.
Heidmann [14], în 1991, a completat algoritmul volumului de umbră al lui Crow și l-a implementat. El a putut astfel să
creeze umbra pe un obiect arbitrar. Algoritmul, în cuvinte simple, este următorul:
Trebuie trasată o linie de la punctul de sursă de lumină la fiecare vertex și continuată până la infinit. După
recunoașterea fiecărei perechi de raze vecine, se desenează un poligon de la marginea ocluzorului până la receptorul de umbră.
Această metodă se mai numește și poligon de delimitare a volumului de umbră sau pur și simplu poligon de umbră. Aceste
poligoane formează o piramidă trunchiată infinită, în care partea situată sub ocluzor este volumul de umbră, care este un
cvadrilater seminifinit cu două vârfuri finite și alte două vârfuri situate la infinit, reprezentate prin linii verzi în figura 5.

Fig.5. Volumul umbrei

Pentru a accelera algoritmul propus, fiecare cvadrilaterală infinită a fost redusă la o cvadrilaterală finită între ocluzor și
receptorul de umbră. Pentru a găsi o lungime minimă a volumului în fiecare pixel, se propune un

nou pixel:
Acum, dacă un obiect sau o parte a obiectului se află în interiorul acestei piramide trunchiate, acesta se află în umbră
și ar trebui să fie întunecat, dar obiectul sau partea de obiect aflată în afara acestei piramide trunchiate este luminată și nu are
nevoie de nicio modificare[19]. Apoi, volumul de umbră ar putea fi generat folosind împreună bufferul de stencil și bufferul de
adâncime. În rezumat, acest algoritm este următorul:
1- Dezactivați lumina și redați scena doar cu iluminare ambientală și de emisie.
În acest fel, memoria tampon de culoare va fi plină pentru toate punctele obiectului din umbră și, de asemenea, memoria tampon Z
va fi plină cu valoarea de adâncime.
2- După dezactivarea bufferului Z și a bufferului de culoare pentru scriere, redați scena cu iluminare.
3- Prin scăderea acestor două valori de adâncime se obține volumul umbrei.
Fig.6. Volum de umbre utilizând bufferul de çablon çi detectarea siluetei

După generarea volumului de umbră, trebuie să trecem raza de la ochi la fiecare punct al obiectului de pe receptorul
de umbră. După cum s-a menționat anterior (în bufferul stencil), dacă raza trece prin fața frontală a volumului de umbră, se mărește
bufferul stencil, iar când raza trece prin fața din spate a volumului de umbră, se micșorează umbra stencil[20]. În cele din urmă,
dacă numărul bufferului stencil nu este zero, acesta se află în umbră. Vom spune că acesta este un algoritm de detectare a
siluetei:

1-Rendare scenă fără iluminare 2-


Activare tampon stencil
3 -Dezactivează memoria tampon de adâncime pentru a scrie și împiedică scrierea în memoria tampon de culoare.

7-Rendare din nou scena cu


iluminare 8-Puteți scrie în
memoria tampon de culoare 9-
Dacă (~Stencil % 2)
Păstrați Stencil
NE este numărul de muchii. NF
este numărul de fețe. NP este
numărul de poligoane. S este
numărul de muchii.
Pi este un poligon.
Rv este o rază de la sursa de lumină la fața cu muchia v.
Algoritmul Z-pass este utilizat atunci când ochii sunt în afara umbrei. În cazul în care ochii sunt în umbră,
algoritmul Z-fail trebuie utilizat după cum urmează:
De fapt, întregul algoritm este similar cu algoritmul Z-pass, cu excepția etapelor 5 și 6:
Etapa 4 este algoritmul EESD. Pasul 5 este algoritmul Z-pass, în care raza trece în volum și, ca urmare, se mărește
memoria tampon a stencilului. Pasul 6 este cel în care raza iese din volum, după care bufferul stencil este micșorat.

5. Estimări de performanță

Să presupunem că există n vârfuri, fn fețe și en muchii, iar numărul de vârfuri din fiecare plan este m. Unele informații
sunt aceleași pentru toți cei trei algoritmi enumerați, cum ar fi calculul ecuației tuturor planurilor. În această secțiune sunt
comparați acești trei algoritmi. Este necesar să se cunoască următoarele informații despre numărul de operații:
Un produs punctat are nevoie de 3 înmulțiri și 2 adunări. O adunare de vectori sau de raze necesită 3 adunări. În
cazul în care există n fețe, deși numărul de vârfuri și muchii nu este exact evident, un număr rezonabil de vârfuri va fi 2n și,
pentru acest număr de fețe, numărul de muchii va fi 6n[15].
Acest raport se bazează pe ideea lui Chris L. Gorman [17], care a sugerat că raportul dintre vârfuri și fețe este de 2
și, de asemenea, raportul dintre numărul de muchii și numărul de vârfuri este de 3.

5.1. Calculul estimativ al algoritmului triunghiular

Pentru a calcula vizibilitatea fiecărei fețe, este necesar să se calculeze fața normală a planului și o rază a sursei de lumină
în plan și să se calculeze semnul produsului de puncte. Pentru a determina dacă o muchie aparține matricei, trebuie să se facă o
comparație.

Pentru p=1 la Numărul de fețe fn


Dacă p.visible=True, 
2Adds+1Compare+8Citere
Pentru q = 1 la numărul de sidem
Dacă vpvq-1 aparține lui S,  Comparați +1Invers +en Citiți

Șterge vpvq din S1 citire +2 scriere


Altfel1 citire+2 scriere
Adaugă vpvq la S1 scrie
Sfârșitul dacă
Urm
End if ător
Urmă ul
torul
Numărul de fețe este fn. Pentru a determina dacă un plan p este vizibil sau nu, trebuie calculat vectorul
normal al fețelor și este nevoie de 3Adds și 3Mults. Pentru a obține o rază de la sursa de lumină la plan, sunt necesare 4Mults și
3Adds și, în final, produsul punctat necesită 3Mults și 2Adds. Pentru a determina dacă produsul punctual este pozitiv sau
negativ, este necesară o comparație.
Numărul mediu de laturi pentru fiecare plan este considerat m. Pentru a determina dacă pvqv v-1 aparține sau nu lui
S, trebuie calculat un Inverse sau 1Mults și apoi trebuie efectuată o căutare în matricea care are nevoie de en Comps și trebuie
citite toate acestea.
Suma tuturor calculelor este:
fn(8A+10M+1C+8R+(m(enC+en R+1M+1R+2W)))
=n(8A+10M+1C+8R+6nmC+6nmR+1mM+1mR+2mW)
=6n2 mC+(6n2 m+ mn+8n)R+
(m+10)nM+8nA+2mnW Complexitate=O(n2 )

5.2. Calculul estimativ al algoritmului vizibil-nevizibil

Vizibilitatea planurilor este importantă în acest algoritm. Pentru a calcula vizibilitatea fiecărei fețe, este necesar să
se calculeze fața normală a planului și, de asemenea, este necesară o rază a sursei de lumină în plan și trebuie calculat semnul
produsului punctual.

Pentru E=1 la numărul de muchii


Pentru F=1 până la Numărul de fețefn Dacă
F.visible =True, atunci
3Adds+3Muls+4Muls+3Adds+3Mults+ 2Adds+1Compare+8Citere

E_ counter =E_counter+1 1 Adăugați


Sfârșitul dacă
Următorul
Dacă e_contor=1  Comparare + 1 Citire Adăugare E la
 1 Scriere
Urm
ător
ul
Suma tuturor calculelor este:
e*(f*(10M+8A+1C+8R+1A)+1C+1R+1W)
= 6n*(n*(10M+9A+1C+8R)+1C+1R+1W)
=60n2 M+54n2 A+(6n2 +6n)C +(48n2 +6n)R+6nW
Complexitate=O(n2 )

5.3. Calculul estimativ al Algoritmului de margine extinsă

Pentru a extinde fiecare muchie trebuie calculate trei adaosuri. Pentru a determina dacă o rază are sau nu o
intersecție cu un plan, este necesară introducerea razei în ecuația planului și compararea cu zero.
Pentru e1=1(v1v2) până la numărul de muchii
v1'=v1+ ∆v13Add+1Read+1W
R=raza sursei de lumină la v1 3Add+3Multiplu+1Citere+1W
pentru f=1 la Numărul de fețefn
dacă Intersecția(R,f)=false
atunci3Multiplu+3Aadăugați+1Comparați Adăugați v1v2
la S1Adaugați
Sfârșitul dacă
Urm
Urm ător
ător ul
ul
O rază este x=x0+αn. Este nevoie de 3Multe și 3Ad-uri. Numărul de fețe este fn, iar pentru a calcula starea de
intersecție, raza R trebuie să se mențină pe planul f. Dacă ecuația planului este ax+by+cz+d=0, atunci dacă
aRx+bRy+cRz+d=0, atunci raza a intersectat planul.
Suma de calcul este:
e(6A+3M+2R+2W+f(3M+3A+1C)
=6n(6A+3M+2R+2W+n(3M+3A+1C))
=(18n2 +18n)M+(18n2 +36n)A+6n2 C+12nR+12nW
Complexitate=O(n2 )

6. Rezultate și discuții

Pentru a compara acești algoritmi, să presupunem că numărul de vârfuri de pe colțul ocluzorului este de 10, iar
numărul de vârfuri din fiecare plan este de 5. Cu aceste date ca intrări, numărul de operații va fi cel indicat în cele ce urmează:
Tabelul 1. Complexitatea cu n=10,m=5
n=10,m=5 Mai multe Adăug Comparați Citește Scrieți
ați
Triunghi 150 80 3000 3110 100
Algoritm
Vizibil - nevăzut 6000 5400 660 4860 60
Algoritm
Exten 1980 2160 600 120 120
dedEdge
Algoritm

Odată cu creșterea lui n și m, rezultatul va fi mai evident:

Tabelul 2. Complexitatea cu n=100,m=10

n=100,m=10 Mai multe Adăugați Comparați Citește Scrieți


Triunghi 2000 800 600000 601800 2000
Algoritm
Vizibil - nevăzut 600000 540000 60600 48600 600
Algoritm
Exten 181800 183600 60000 1200 1200
dedEdge
Algoritm

Următoarele diagrame ilustrează comparația dintre algoritmul EESD și ceilalți algoritmi cu n


vârfuri , fn fețe, en muchii și m vârfuri în fiecare față.
Cele două diagrame ilustrează faptul că, odată cu creșterea numărului de muchii, timpul consumat de noul algoritm este
mai mic decât cel al celorlalți algoritmi și, prin urmare, viteza algoritmului nou propus este mai bună decât a celorlalți.
Având în vedere ciclurile din procesor, se adună 4 cicluri, se adaugă 2 cicluri, se compară 3 cicluri, se citește
1 ciclu și se scrie 2 cicluri:
Fig.7. Complexitatea cu n=10,m=5

Fig.8. Complexitatea cu n=100,m=10

Fig.9. Comparație finală între cei trei algoritmi

După implementarea acestor algoritmi, FPS poate dovedi afirmația noastră cât mai bine posibil. Figura 10
(stânga) reprezintă implementarea volumului de umbre utilizând algoritmul triunghiular cu o medie de 69,93 FPS cu o
singură sursă de lumină. Figura 10 (dreapta) ilustrează FPS-ul este de 65,51 pentru volumul de umbră folosind algoritmul
Vizibil-Nu vizibil. În cele din urmă, figura 11 arată că FPS este de 73,16 pentru volumul de umbre folosind algoritmul
EESD. Toți algoritmii au fost implementați în C++ OpenGL cu aceeași versiune și au rulat în același computer după ce
au pornit direct calculatorul.
Fig.10. Rezultatul volumului de umbră folosind algoritmul Triangle și volumul de umbră folosind
algoritmul Visible-Non Visible

Fig.11.: Rezultatul volumului de umbră folosind algoritmul EESD

7. Concluzie

Sunt descriși doi algoritmi populari, algoritmul triunghiular și algoritmul vizibil și nu vizibil. Algoritmul EESD este
propus pentru a recunoaște silueta unui obiect. Algoritmul EESD este utilizat pentru a crea un volum de umbre în timp real.
În comparație cu ceilalți algoritmi, acesta este mai rapid. Baza acestui algoritm este legată de matematică și vizualizare. Pentru a
utiliza acest algoritm în volumul de umbră, bufferul stencil și bufferul Z sunt instrumente convenabile. Avantajul algoritmului
EESD este adecvat atunci când numărul de margini ale ocluzorului crește.
Două metode sunt folosite pentru a demonstra că algoritmul EESD este mai rapid decât ceilalți. Pentru a demonstra
această afirmație se utilizează demonstrația matematică cu notația Big-Oh și FPS.Acest algoritm este, de asemenea, convenabil
pentru scene complexe. Rezultatul este bun și este potrivit pentru a fi utilizat în jocurile comerciale și în mediul virtual în
timp real.

REFERINȚE

[1] W.A. Richards, J.J. Koenderink, D.D. Hoffman, "Infer-ring three-dimensional shapes from two-
dimensional silhouettes", Journal of the Optical Society of America, 4:1168-1175 (1987).
[2] T. Saito, T. Takahashi, Comprehensible rendering of 3-D shapes, ACM SIGGRAPH Computer
Graphics (ACM Press) 24:4, 197-206, (1990).
[3] D. Scherzer, M. Wimmer, W. Purgathofer, A Survey of Real-Time Hard Shadow Mapping
Methods, Computer Graphics Forum, 30: 169-186 (2011).
[4] R. Raskar, M. Cohen, Image precision silhouette edges, In: Spencer SN, editor. Proceedings of the
conference on the 1999 symposium on interactive 3D graphics, New York: ACM Press, 135-40
(1999).
[5] B. Gooch, P.P.J. Sloan, A. Gooch, P. Shirley, R. Riesenfeld, Interactive Technical Illustration, în
Proceedings of the 1999 Symposium on Interactive 3D Graphics, Atlanta, Georgia, Statele Unite, 31-38
(1999).
[6] M.C.P. Matos, M.A.M. Ferreira, M. Andrade, Code Form Game, International Journal of
Academic Research, 2:1, 135-141 (2010)
[7] T. Isenberg, B. Freudenberg, N. Halper, S. Schlechtweg, T. Strothotte, A developer's guide to
silhouette algorithms for polygonal models, IEEE CG & A, 28-37 (2003).
[8] F. Benichou, G. Elber, Output sensitive extraction of silhouettes from polygonal geometry, In Proc. of
Pacific Graphics 1999, 60-69 (1999).
[9] J. Buchanan, M. Sousa, The edge buffer: A data structure for easy silhouette rendering, în Proc. of
NPAR 2000, 39-42 (2000).
[10] S.K. Jung, S.I Kwon, K.J. Kim, Real-time Silhouette Extraction Using Hierarchical Face Clusters, 1-
8 (2004).
[11] M. Olson, oferă un site despre toate lucrările în siluetă intitulat A Survey of Silhouette
Papers, http://www.cs.sfu.ca/~matto/personal/sil_papers.html , (2010).
[12] H.C. Btagelo, I.C. Junior, Real-Time Shadow Generation using BSP Trees and Stencil Buffers,
XII Brazilian Symposium on Computer Graphics and Image Processing, 93-102 (1999).
[13] F. Crow, Shadow Algorithms for Computer Graphics, Computer Graphics, 11(2): 242-247 (1977).
[14] T. Heidmann, Real Shadows Real Time, IRIS Universe, 18: 28-31 (1991).
[15] D.A. Hostetler, Silhouette Edge Detection Algorithms for use with 3D Models, Graphics Algorithms
and 3D Technologies (G3D) Intel Architecture Labs (IAL), (2002).
[16] M. Olson, H. Zhang, Silhouette Extraction in Hough Space, Proceedings of Eurographics, 273-282 (2006).
[17] http://www.linkedin.com/in/clgorman, (2011).
[18] Mustafa, S. Fawad, membru, IACSIT, LOD based Real Time Shadow Generation for Subdivison
Surfaces, International Journal of Computer and Electrical Engineering, 2:1, 170-174 (2010).
[19] A.B.M. Azahar, M.S. Sunar, D. Daman, A. Bade, Survey on real-time crowds simulation, Technologies
For E-Learning and Digital Entertainment, Proceedings , 5093: 573-580 (2008).
[20] H. Kolivand, M.S. Sunar, A. Amirshakarami, Z Ranjbari, Real-Time Volume Shadow using Visible-
Non Visible Algorithm, Journal of Computer Science, 7:7, 980-985 (2011).
[21] H. Kolivand, M.S. Sunar, Silhouette Detection for Real-Time Shadow in Virtual Environments,
The International Journal of Virtual Reality, 10(3): 45-52 (2011).
[22] H. Kolivand, M.S. Sunar, To Combine Silhouette Detection and Stencil Buffer for Generating Real-
Time Shadow, International Journal of Computer Graphics, 2(1): 1-8 (2011).

S-ar putea să vă placă și