Documente Academic
Documente Profesional
Documente Cultură
Articolul
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.
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
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
Fața frontală
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
Î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
Î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
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ă.
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
Î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.
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:
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.
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.
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 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
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
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).