Displylgoritmer: rstrering, klippning, HSE, LOD, Grip, DGI, DOA vt2008 Lrs Kjelldhl, en del bilder lånde v Gustv Txén Implementtion spets for disply of omputer grphis Steps in the rendering proess: Modeling (definition of objets,, e.g. struture with polygons) Geometri proessing (oordinte trnsformtions, lipping, hidden surfe elimintion) Rsteriztion (trnsformtion of objet desriptions to pixels) Disply (disply of frme buffer on sreen, inludes e.g. lising) We will fous on some ommon lgorithms in this proess Objektrum oh bildrum The lipping problem Objektrum Mn rbetr den mtemtisk beskrivningsnoggrnnheten Bildrum Mn rbetr med den noggrnnhet som ges bildpunktern (pixlrn) lines window Det blir ntlet objekt som vgör komplexiteten Det blir upplösningen som vgör komplexiteten The lipping problem Klippning i 2D: Cohen-Sutherlnd window 1001 1000 1010 lines lipped 0001 0000 0010 0101 0100 0110 1
Klippning i 2D: Cohen-Sutherlnd Klippning i 2D: Cohen-Sutherlnd 1001 1000 1010 1001 1000 1010 0001 0000 0010 Båd hr kod 0000: Linjen ligger i fönstret. 0001 0000 0010 En hr kod 0000, den ndr inte. Linjen måste klipps mot fönstret. 0101 0100 0110 0101 0100 0110 Klippning i 2D: Cohen-Sutherlnd Klippning i 2D: Cohen-Sutherlnd 1001 1000 1010 1001 1000 1010 0001 0000 0010 0101 AND 0100! 0000 Linjen syns inte i fönstret. 0001 0000 0010 0001 AND 0100 = 0000 Linjen knske behöver klipps mot fönstret. 0101 0100 0110 0101 0100 0110 Prmeter lipping (Cyrus-Bek, Ling-Brsky) Use p(") ) = (1- ")*p1 + " *p2 Clipping is done by first lulting " for lines tht you might lip (less work thn to lulte both x nd y) To lip with the egde x=xmin we get: " =(xmin- x1)/(x2-x1) P2 "1=0; "2=1; P1 for (ll four edges of window) { " =lulte(edgenr); if entering(edgenr) "11 =mx("1, 1,") ) else "22 =min("2, ")}; if "22 > "11 then drwline("1, "2); Polygon lipping Cn we use the line lipping lgorithm to lip polygon? new point With line lipping the new point ould not be inluded 2
Sutherlnd-Hodgemn's lgorithm Sutherlnd-Hodgemn's lgorithm Clip top s p Clip bottom Clip left Clip right for ll_window_edges { p=polypoint(1); for n=2 to n+1 { s=p; p=polypoint(n); if inside(s) nd inside(p) then sve(p); if inside(s) nd outside(p) then sve(interset interset(s,p)); if outside(s) nd inside(p) then {sve(interset(s,p)); sve(p) } } updte(polypoint polypoint); } Note tht in eh lipping phse of the polygon you hve to keep the order of the verties Wht hppens if the lipping give more thn one polygon? Uppdelening i konvex polygoner (tesseltion) Klippning i 3D x x z z 3
Rstrering Rstrering v linjer: Digitl Differentil Anlyzer (DDA) (x 1, y 1 ) (x 0, y 0 ) Låt linjens lutning vr m = (y 1 y 0 ) / (x 1 x 0 ) oh ntg tt 0 < m < 1. Diskretisering v en mtemtisk linje eller polygon. Sätt x = x 0 oh y = y 0. För vrje x = x + 1, låt y = y + m. Avrund oh rit ut pixel. Fungerr för m < 1 Vd gör vi om m > 1? Rstrering v linjer med heltlsritmetik: Bresenhm Rstrering v polygoner Line eqution n be written s F(x,y)=dy*x-dx*y+B*dx=0 (x p,y p ) NE M E d1 d2 The sign of F(x M,y M ) deides if we should hoose E or NE We denote d1=f(x M,y M )= dy*(x p +1)-dx*(y p +0.5)+B*dx Suppose we get d1<0, hoose E d2=f(x M +1,y M )= dy*(x p +2)-dx*(y p +0.5)+B*dx= d1+dy Similr result if d1>=0 http://en.wikipedi.org/wiki/bresenhm's_line_lgorithm Rstrering v polygoner Rstrering v polygoner Bresenhm för tt hitt x-värden. Lgr interpolerde värden längs med kntern. Fyll oh interpoler värden från vänster till höger. Sorter m..p. x-värden. 4
Rstrering v polygoner Rstrering v polygoner, särskild hntering v kntern kn iblnd behövs Linjär interpoltion Perspetive-orret Multi-Smple Anti-Alising (MSAA) Borttgning v skymd ytor Smplingsmönster Beräkn först pixelvärden för smplingspunktern......nvänd sedn 5 värden vid filtreringen! Hidden surfe removl Bkfe ulling Hdden surfe removl http://medilb.di.unipi.it/web/ium/wterloo/node70.html#section001160000000000000000 Hidden surfe removl Two min pprohes: investigte visibility for every pixel, i.e. resolution dependent (imge spe) investigte visibility for every objet, i.e. lulte intersetions et for ll objets, lines et with the preision of the omputer (objet( spe) Min ides Try to use the properties the objets, suh s: onvex objets? few objets, perhps only one objet? objets non interseting? stti view? dvned rendering wnted? 5
Bk-fe removl Imge spe hidden surfe removl The bk-fing polygons n be removed through simple test bs (#) < 90 or n o v > 0 n! eye v Z-buffer lgorithm Z-buffer lgorithm Use n extr buffer with depth vlues for eh pixel for every polygon { for eh pixel in polygom { if newpolygondepth(x,y) < depthvl_in_zbuffer(x,y) then {depthvl_in_zbuffer(x,y) <- newpolygondepth(x,y); frmebuffervlue <- newpolygonvlue } }} frmebuffer Z-buffer Z-buffring frmebuffer Z-buffer Fördelr: Effektiv. Funkr oberoende v komplexiteten i det som rits. Enkel tt implementer i hårdvr. Nkdelr: Alising! 8 bitr $ 256 distinkt djupvärden. Krävs extr minne på grfikkortet. frmebuffer Z-buffer 6
Depth sort lgorithm 1. Sort ll objet ording to depth 2. Pint (rsterize) them into frme buffer in the sorted order (strt with objet fr wy) Problem med pinter s s lgorithm inresing depth Vi måste del åtminstone någon polygon Binry Spe Prtitioning Trees (BSP-träd) b b Löser sorteringsproblemet för sttisk, pln, konvex polygoner (som dok kn h hur mång hörn som helst). 1) Välj en polygon.,, 2) Del rummet i två delr oh prtitioner. 3) För vrje delmängd, gör om rekursivt. 7
3) För vrje delmängd, gör om rekursivt. Klrt! Pinter s s lgorithm oh BSP-träd Pinter s s lgorithm oh BSP-träd 3 2 1 Kmerposition Kmerposition 3 2 1 2 3 1 Kmern är frmför, så vi sk först rit ut llt bkom, sedn oh sist llt frmför. Kmern är frmför, så vi sk först rit ut llt bkom, sedn oh sist llt frmför. Pinter s s lgorithm oh BSP-träd Vl v prtitionspln Kmerposition 3 2 1 2 3 1 b b Slutordning:,,,. Vl v prtitionspln kn h stor betydelse för slutresulttet. Tumregel: Välj det prtitionspln som skpr minst ntl polygondelningr. 8
Kombintion v BSP-träd oh Z-buffring Overdrw Med pinter pinter s lgorithm kommer polygoner långt bk tt rits över v polygoner längre frm. frm. Betyder tt ljussättning, ljussättning, texturering, texturering, m.m. ppliers i onödn för de flest polygoner! polygoner! Dett problem klls för overdrw overdrw.. Så vrför nvänds BSP-träd om mn lik gärn kunde nvänd z-buffring för tt undvik overdrw? Detil ulling, Level of Detil b1 b1 b2 b2 Osynligt delträd Eftersom kmerns frustum inte korsr :s pln, kn vi strunt i llt som ligger frmför! Använd sedn z-buffring för tt undvik overdrw. Level-of-detil Rit inte sker som är långt bort eller förenkl dem! Kombiners oft med någon form v dimm-effekt. Just Cuse - Avlnhe Studios Ultim IX Asension, Origin Systems Level-of-detil Morrowind, Bethesd Softworks Även om mn måste rit mång objekt kn mn oft spr resurser genom tt nvänd grövre detljnivåer långt bort från kmern. Potentilly Visible Sets / Portler Närliggnde vrint: Del världen i eller (knske m.h.. BSP-träd). För vrje ell C, t red på vilk ndr eller som kn syns från C. Lgr i en list. Vid körning, t red på vilken ell kmern är i. Rit den ellen. Rit ll eller i PVS:en. http://grphis.ls.mit.edu/~seth/pubs/pubs.html 9
Exempel Portler http://www.s.virgini.edu/%7eluebke/publitions/portls.html Portler kn speifiers utomtiskt med hjälp v lgoritmer eller plers ut för hnd i en 3D-editor. Portler Ry sting Skik en riktd linje (ry) från kmern (betrktren) genom vrje pixel oh t red på om/vr den korsr ll föremål. Välj den korsning som ligger närmst kmern. Sätt pixelfärgen till färgen på motsvrnde föremål. betrktren Quke II, Id Softwre Ry tring Bounding volumes Kmern kn se b.v: behndl modellen. Reflektion Skuggor (direkt ljus) Kmern kn delvis se b.v: behndl modellen. Kmern kn inte se b.v: bortse från modellen. Ry tring är en s.k. globl belysningsmodell oh kn ses som en slgs utbyggd ry sting Användbrt för modeller med begränsd utsträkning i rummet oh för sker som flytts omkring. 10
Hierrkisk bounding volumes Exempel på olik sorters bounding volumes Sfär Axis-ligned box Oriented box Oriented plnes Hierrkier kn okså skps dynmiskt under körning för föremål som flytts omkring. Wrnok lgorithm Divide the plne into four squres Qudtrees / Otrees B 0 B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 Vrint v BSP-träd som kn vr enklre tt hnter. Smidig för stor, sttisk modeller med stor detljrikedom. Kombiners med Z-buffring på ungefär smm sätt som i BSP-fllet. 11
Otrees Otrees http://www.gmetutorils.om/tutorils/opengl/otree.htm Olusion ulling Olusion ulling Frustum Frustum Oluder Ög Ög http://www.gmsutr.om/fetures/19991109/moller_hines_01.htm Impostors Impostors Billbord Clouds, Xvier D eoret m.fl. Plerr mn texturern smrt kn mn pproximer föremål på ett sådnt sätt tt mn kn roter dem okså! 12
Impostors Impostors Originl Billbord loud Billbord Clouds, Xvier D eoret m.fl. Impostors Impostors Mirosoft Flight Simultor 2004 Mirosoft Flight Simultor 2004 Moln är ett exempel på objekt som oft kn ersätts v impostors. I flygsimultorfllet lönr det sig tt rbet med impostors i två steg: dels som ersättning för 3D-moln, dels för tt pproximer moln långt från kmern. 13