Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaGéza Deák Megváltozta több, mint 8 éve
1
Térbeli adatszerkezetek Jeni László Attila jedi@inf.elte.hu ELTE IK Számítógépes Grafika II.
2
2 Áttekintés Miért kellenek nekünk térbeli adatszerkezetek? Láthatósági probléma Mi az amit látok a színtérből? Metszéspontok számítása Mit talált el a játékos? Ütközésfigyelés Nekiütközött-e a játékos egy falnak? Térbeli lekérdezések Hol van a legközelebbi Medikit?
3
3 Láthatósági probléma (már megint?!) „Klasszikus” módszerek Hátlap eldobás, Látógúlával metszés Festő algoritmus, Z-puffer, Warnock BVH (Bounding Volume Hierarchy) BSP-fa, KD-fa, Octree, Grid-ek „Modern” módszerek Cellák és portálok (portal culling) PVS (Potentially visible set) Virtuális takaró objektumok, Hierarchikus Z-puffer Hierarchical occlusion maps …
4
4 Motiváció (1) Cél: Mint ahogy a legtöbb gyorsítási módszernél, itt is az a cél, hogy ne végezzünk redundáns tevékenységeket a rajzolás során Alapötlet A nem látszódó geometriát ne rajzoljuk ki MegoldásokObjektum-térben: ami nem vetülhet a képernyőre, azt eldobjuk Képernyő-térben: takarásvizsgálat a képernyőre vetülő objektumok között
5
5 Motiváció (2) Miért foglalkozunk még mindig ezzel? Objektum-térben: látógúlával metszés, hátlap eldobás Képernyő-térben:Z-puffer Mert ezek a módszerek nem hatékonyak! Futási idejük lineáris a geometriai primitívek függvényében.
6
6 Módszerek osztályozása Osztályozhatjuk a módszereket a pontosságuk és a hatékonyságuk szerint Konzervatív módszerek Felülbecslik a láthatóságot és néhány nem látszó poligont is láthatónak tekintenek (újabban max. kb 30%). Jó eredményt adnak, de nem optimálisak. Agresszív módszerek Alulbecslik a láthatóságot és látható poligonokat is eldobnak. Ha kicsi a hibájuk, akkor esetleg használhatóak olyankor, amikor a konzervatív módszerek már túl lassúak. Közelítő módszerek Rosszul becslik, mind a látható, mind a nem látható poligonokat. Akkor használhatóak, amikor nincs lehetőségünk egy költséges előfeldolgozási lépésre. Pontos módszerek Csak azokat a poligonokat tekinti láthatónak, amik ténylegesen megjelennek a képernyőn.
7
7 Klasszikus módszerek Backface culling, View frustum culling Painter, Z-Buffer, Warnock BVH (Bounding Volume Hierarchy) BSP-tree, KD-tree, Octree, Grids
8
8 Befoglaló testek (1) (BV - Bounding Volumes) Egy egyszerű geometriájú objektum, amely egy bonyolultabb objektumot teljes egészében tartalmaz Néhány fajtája gömb (BS – bounding sphere), téglatest (AABB - axis aligned bounding box), illesztett (OBB – oriented bounding box), poliéder (k-DOPs - discrete oriented polytopes)
9
9 Befoglaló testek (2) (BV - Bounding Volumes) K-oldalú, illesztett poliéder
10
10 Befoglaló testek (3) (BV - Bounding Volumes) Melyik az ideális befoglaló test?
11
11 Befoglaló testek hierarchiája (BVH - Bounding Volume Hierarchy) A befoglaló testeket hierarchikus rendszerbe szervezzük Ha egy befoglaló testet metsz a sugár / látógúla, akkor csak a gyerekeit kell megvizsgálni a metszés szempontjából Jelentősen csökkenti a sugár - befoglaló test, illetve a sugár – objektum teszteket
12
12 Térfelosztás (1) Térbeli adatszerkezeteket használunk, amik a teret valamilyen fajta részekre, cellákra osztják Általában síkokat használunk, amelyek elválasztják az egyes féltereket Szinte mindig valamilyen fa-struktúrába szervezzük ezeket Minden egyes cellához meghatározzuk hogy mely objektumok esnek ezekbe a kisebb térrészekbe Minden egyes cellára el tudjuk dönteni, hogy bele esik-e a látógúlába vagy sem, így csak a látható cellákban levő objektumokat kell kirajzolni A leggyakoribb térfelosztó módszerek Szabályos rács Nyolcas (négyes) fa Kd-faBSP-fa
13
13 Térfelosztás (2) Felosztási módszerek
14
14 Térfelosztás (3) Általában a legtöbb geometriai lekérdezésre, problémára nagyon időigényes pontos megoldást adni Viszont általában tudunk adni egy gyors, közelítő konzervatív megoldást Erre megfelelő egy olyan fa, amely rendelkezik az alábbi térbeli felosztó tulajdonságokkal Egy szülő csúcs térrésze teljes egészében tartalmazza a gyermek csúcsok térrészeit Ha egy lekérdezés sikertelen egy szülő csúcsra, akkor tudjuk, hogy sikertelen lesz a gyermek csúcsokra is Ha egy lekérdezés sikeres egy szülő csúcsra, akkor megvizsgáljuk a gyermek csúcsokat is Ha elértünk egy levélhez, akkor itt végrehajtjuk az időigényes lekérdezést Általában a térfelosztásokat ilyen módon használjuk Például ha nem látunk egy teljes térrészt, akkor ennek a gyermekeit sem láthatjuk
15
15 Szabályos felosztás (uniform grid) Azonos méretű cellákra osztjuk fel a teret. Minden cella tartalmazza a benne levő objektumok listáját Könnyű lekérdezni a szomszédos cellákat Hátrány: A felosztás teljesen független a színtér struktúrájától Előny:Egyszerű! Könnyű meghatározni egy sugár által metszett cellákat (Bresenham alg. 3D-ben)
16
16 Kitérő: ray-casting Sok megszorítással építjük fel a színteret: Uniformizált háló: egy cella egy objektum Minden fal ugyanolyan magas A falak 90 fokos szöget zárhatnak be egymással Padló, plafon nincs textúrázva
17
17 Quadtree / Octree (1) definició A gyökércsúcs a teljes színtér befoglaló doboza. Ha az aktuális cellában a belógó befoglaló dobozok száma nagyobb, mint egy előre definiált érték, akkor a cellát a felezősíkjai mentén 8 egybevágó részcellára bontjuk (négyesfánál 4 részre). A keletkező részcellákra ugyanazt a lépést rekurzívan megismételjük. A gráf-építő folyamat egy adott szinten megáll, ha elértünk egy előre definiált maximális mélységet, illetve ha az adott cellában az objektumok száma egy előre definiált érték alá esik.
18
18 Quadtree / Octree (2) definició 1 2 3 131 1221
19
19 Quadtree / Octree (3) a csúcsokban tárolt adatok Miket célszerű tárolni egy-egy csúcsban? Gyerek-mutatók (8 vagy 4) Szülő-mutató Hasznos, ha visszafelé kell mozogni a fában A cella kiterjedése Ez számítható is a fából, de könnyebb itt tárolni A cellába tartozó adatok Ezek lehetnek teljes objektumok, befoglaló testek, poligonok, … Néhány algoritmusnál szükség lehet a szomszédos cellákra is gyorsabb, mintha visszalépnénk a fában
20
20 Quadtree / Octree (4) az oktális fa felépítése Kell egy buildNode eljárás Veszi a csúcspontot a hozzá tartozó kockával és a kockába tartozó objektumok listájával Létrehozza a gyerekcsúcsokat, szétosztja az objektumokat a gyerekcsúcsok között és folytatja a rekurziót a gyerekcsúcsokon, vagy Beállítja a csúcsot egy levélnek ha már nem kell tovább osztani Kezdetben meghatározzuk a gyökércsúcshoz tartozó kockát, létrehozzuk a gyökércsúcsot és meghívjuk rá a buildNode eljárást, átadva neki a színtér összes objektumát a listában
21
21 Quadtree / Octree (5) egy példa
22
22 Quadtree / Octree (6) objektumok hozzárendelése egy cellához Alapművelet: Egy objektum metszése egy cellával (kockával) Hogyan tudjuk ezt gyorsan elvégezni? Olvasnivaló: Graphics Gems http://www.acm.org/tog/GraphicsGems/ http://www.acm.org/tog/GraphicsGems/ [GG3] Voorhies, Douglas, Triangle-Cube Intersection [GG4] Greene, Ned, Detecting Intersection of a Rectangular Solid and a Convex Polyhedron, [GG5] Green, Daniel, and Hatch, Don, Fast Polygon-Cube Intersection Testing
23
23 Quadtree / Octree (7) egy objektum több cellában TFH: egy objektum egynél több cellát is metsz Tárhely miatt nem probléma, hiszen az objektumra mutató pointereket minden cellában tárolhatjuk De néhány tesztnél ekkor kétszer (többször) vesszük ezt az objektumot figyelembe (pl. kirajzolás). Megoldás: Megjelöljük egy flag-el az adott objektumot a teszt során és a következő teszt előtt töröljük a flag-et Egy jobb megoldás ha az aktuális képkocka számával jelöljük meg a feldolgozott objektumokat
24
24 Quadtree / Octree (8) szomszédos cellák Néhány esetben hasznos lehet, ha ismerjük egy cella szomszédos celláit Milyen messze lehetnek ezek egymástól a fában? (hány hivatkozáson keresztül lehet elérni őket?) Hogyan használhatjuk fel a szomszédsági információt pl. egy sugár metszéspontjának számításához? Egy „A” cella szomszédja: Van egy közös oldalsíkjuk Az „A” cella összes csúcspontja a közös oldal szomszédos területére esik Nincs olyan gyermeke, amely rendelkezne ezekkel a tulajdonságokkal
25
25 Quadtree / Octree (9) szomszédos cellák megkeresése Egy bináris fában egy csúcs jobboldali szomszédja a legközelebbi jobboldali részfa legbaloldalibb eleme Visszafelé haladunk a fában, hogy megtaláljuk a jobboldali részfát Ebben lefelé és balra haladunk, hogy megtaláljuk a legbaloldalibb csúcsot (de nem megyünk mélyebbre, mint ahonnan indultunk!) Hasonló az eljárás a baloldali szomszédra Az összes csúcs összes szomszédját egy inorder bejárással találhatjuk meg Ez a módszer kiterjeszthető quad/octree-re
26
26 Quadtree / Octree (9) látógúlával metszés El szeretnénk dobni azokat a térrészeket, amik nincsenek benne a látógúlában Mikor látható egy cella? A cella csúcspontjait vizsgáljuk a látógúlával: ha teljesen kívül esnek a gúla egyik síkján, akkor nem látható a cella Különben a cella biztosan látható? A gyökérből haladva végezzük el ezt a tesztet: Ha sikertelen, akkor a cella nem látszik Ha sikeres, akkor néhány objektum látható lehet Ismételjük meg a tesztet a gyerek cellákra is
27
27 Quadtree / Octree (10) látógúlával metszés
28
28 Quadtree / Octree (11) egy példa
29
29 Quadtree / Octree (12) problémák A fa nagyon kiegyensúlyozatlan lesz, ha a színtéren objektumok nem egyenletes eloszlással szerepelnek Sok csúcspont nem fog objektumot tartalmazni Ez a probléma abból származik, hogy mindig azonos részekre osztjuk fel a teret
30
30 Kd-fa (1) definíció A kd-fa a következő tulajdonságokkal rendelkezik Minden csúcs egy egyenes oldalú térrészt reprezentál (az oldalak tengelyekre illesztettek) Minden csúcshoz tartozik egy sík (tengelyre illesztett), ami két részre bontja a térrészt, és minden egyes részhez tartozik egy gyerek csúcs A vágósíkok iránya váltakozik ahogy daraboljuk a területet Gyakorlatilag az octree/quadtree általánosítása, ahol a vágósíkok nem csak egyforma méretűre bonthatják a teret
31
31 Kd-fa (2) példa
32
32 Kd-fa (3) mit tároljuk egy csúcsban? Mutatókat a gyerek csúcsokra (mindig kettőt) Egy mutatót a szülő csúcsra hasznos ha visszafelé akarunk lépkedni a fában A csúcs által meghatározott cella kiterjedését x max, x min, y max, y min, z max, z min A tartalmazott objektumokra mutató pointerek listáját A szomszédsági viszony definiálása nehézkes a kd-fák esetében, általában nem szokták a szomszédos cellákat tárolni
33
33 Kd-fa (4) a fa felépítése Kell egy buildNode eljárás Veszi az adott csúcsot a hozzá tartozó cellával és a tartalmával Meghatározza a vágósíkot, létrehozza a gyerek csúcsokat, szétosztja a tartalmazott objektumokat a gyerekek közt és folytatja a rekurziót, vagy Beállítja a csúcsot egy levélnek Meghatározzuk a gyökércsúcshoz tartozó cellát, létrehozzuk a gyökércsúcsot és meghívjuk a buildNode eljárást az összes objektum listájával Hogyan válasszuk ki a vágósíkot és mikor álljunk meg az építési folyamatban?
34
34 Kd-fa (5) a vágósíkok kiválasztása Két cél lebeg a szemünk előtt, amikor kettévágunk egy cellát Minimalizálni szeretnénk a kettévágott objektumok számát Kiegyensúlyozott fát szeretnénk építeni Minden sík egyenlően ossza két részre az objektumokat Test középvonal módszer Egy lehetséges módszer ( a sík merőleges az x- tengelyre) Rendezzük az összes objektum összes csúcspontját az x koordinátájuk szerint A középső csúcspont x koordinátájára illesztjük a vágósíkot
35
35 Kd-fa (6) vágás egy költségmodell szerint A fa felépítése során becsljük azt az átlagos időt, amelyet egy sugár a kd-fa bejárása során felhasznál és ennek a minimalizálására törekszünk. Egy megfelelő költségmodell szerint úgy felezzük a cellát, hogy a két gyermek cellában lévő testek összes felülete közelítőleg megegyezzen, így a metszés ugyanakkora valószínűséggel következik be a gyermek cellákban.
36
36 Kd-fa (7) alkalmazás A látógúlával történő vágás egyszerűen kiterjeszthető kd-fákra is Kd-fa bejárása (metszés egy sugárral) Szekvenciális bejárás Rekurzív bejárás Lásd: sünis könyv
37
37 BSP-fa (1) definíció Binary Space Partition Vágások sorozata, amely egy térrészt két részre oszt A vágósíkok iránya tetszőleges lehet A kd-fák általánosítása kd-fa = tengely-illesztett BSP-fa A teret konvex cellákra bontja Elég elterjedt Általában megfelelő a legtöbb színtérhez
38
38 BSP-fa (2) példa A vágósíkok félsíkok: a szülő csúcs síkjával történő metszésig tartanak A belső csúcsok a vágósíkokat, a levelek pedig a térrészeket jelölik 1 4 56 7 8 A B C D 2 3 1 4 2 375 BAout8 D 6 C
39
39 BSP-fa (3) egy másik példa (Quake-stílusú) Konvex sokszöghalmazokra vágjuk szét a teret 1 2 3 A D C B 1 A2 B3 CD
40
40 BSP-fa (4) mit tárolunk a csúcsokban Pointerek a gyerek csúcsokra Szülő csúcsra mutató pointer Levelekben: a cella kiterjedését Ezt hogyan kellene? Belső csúcsokban: a vágósík Pointerek a cellában tartalmazott objektumokra Szomszédok? Általában csak a levelekben szokták tárolni Egy cellának sok szomszédja lehet Portálokat (később)
41
41 BSP-fa (5) vágósík kiválasztása Célok: Minél kevesebb cella legyen A vágósíkok essenek egybe a színtér poligonjaival Minél kevesebb objektumot vágjunk szét Heurisztikák: A színtér poligonjainak síkjait választjuk Kezdjük a legnagyobb poligonnal Olyan síkot választunk, ami nem vág szét sok poligont Olyan síkot választunk, ami egyenlően osztja szét az objektumokat Véletlenszerűen választjuk a síkokat (meglepő, de ez sem olyan rossz választás néha)
42
42 BSP-fa (6) az objektumok rendezése A BSP-fa felhasználható a benne levő objektumok rendezésére (előröl hátra, vagy fordítva) Bejárjuk a fát egy adott nézőpontból Az egyes vágósíkok nézőpont felöli oldalán levő objektumok, mindig a sík másik oldalán levő objektumok előtt helyezkednek el Rendezés hátulról előre Ekkor nincs szükségünk Z-pufferre Helyes sorrendet ad az átlátszó poligonok kirajzolására is Z- pufferrel (nem kell két lépésben) Rendezés előröl hátra Csökkenti a felülírást a Z-pufferben software rendering (pl. Doom, Quake)
43
43 BSP-fa (7) látógúlával metszés Ha egy vágósík nem metszi a látógúlát, akkor csak a kamerát tartalmazó féltér lesz látható Példák: #1: A, B, D, 2 #2: A, C, G, 7, 8 #3: A, B, E, 4, C, F, 5 HA a csúcs levél AKKOR látható KÜLÖNBEN HA a vágósík nem metszi a gúlát AKKOR HA a kamera a bal féltérben van AKKOR a teljes jobb részfa nem látható folytatjuk a rekurziót a bal gyerekre KÜLÖNBEN a teljes bal részfa nem látható folytatjuk a rekurziót a jobb gyerekre VÉGE KÜLÖNBEN folytatjuk a rekurziót a bal gyerekre folytatjuk a rekurziót a jobb gyerekre VÉGE VÉGE
44
44 Modern módszerek Cellák és portálok (portal culling) PVS (Potentially visible set) Virtuális takaró objektumok, Hierarchikus Z-puffer Hierarchical occlusion maps …
45
45 Cellák és portálok (1) bevezetés Cél egy belső színtér bejárása Épületek, labirintusok, … Egy ilyen belső színtér általában természetes módon felbontható cellákra Szobák, fülkék, folyosók, … Az egyes cellákat átjárók (angolul portal ) kötik össze, amelyek átlátszóak Kapualjak, bejáratok, ablakok, … Az egyik szobából a másikba csak egy ilyen átjárón nézhetünk át
46
46 Cellák és portálok (2) működési elv Kezdetben tekintsük az eredeti látógúlát Az aktív cella az a szoba lesz, amelyikben éppen tartózkodunk (ahol a kamera van) Kirajzoljuk a jelenlegi cellában található objektumokat (ami a látógúlába beleesik) Minden egyes látható átjáróra az aktuális cellában: A látótér vágósíkjait elvágjuk úgy, hogy csak akkora teret foglaljon magának, amekkorát a portál megenged Átlépünk a átjáró másik oldalán található szobába és kirajzoljuk azt a módosított látógúlával Ha a módosított látógúlába ebben a szobában is belelóg egy portál, akkor rekurzívan folytatjuk az eljárást
47
47 Cellák és portálok (3) példa Kamera
48
48 Cellák és portálok (4) példa Kamera
49
49 Cellák és portálok (5) példa Kamera
50
50 Cellák és portálok (6) példa Kamera
51
51 Cellák és portálok (7) példa Kamera
52
52 Cellák és portálok (8) példa Kamera
53
53 Cellák és portálok (9) a csökkentett látógúla meghatározása Az új gúla közeli vágósíkja az átjáró síkja lesz, a távoli vágósík nem változik Az új gúla oldalsíkjai pedig a portál poligon körvonalának meghosszabbítása a nézőpontból Egy portál és a látógúla metszésének eldöntésekor sorban elmetsszük az oldalsíkokat és a távoli vágósíkot a portállal Fontos, hogy a közeli vágósíkkal nem metszünk! Hiszen akármilyen közel is vagyunk a portálhoz, mindig átlátunk rajta.
54
54 Cellák és portálok (10) oldalsíkok meghatározása A portál poligon élei és a C kamerapozíció határozzák meg a látógúla oldalsíkjait Az oldalsík normálvektora egyszerűen számítható az élek végpontjai és a kamerapozíció vektoriális szorzatából: Innen pedig már a látógúla síkja adott: = 0 Hogy elkerüljük a kerekítési hibákat ezt a síkot eldobhatjuk ha a V i, V i+1 pontok nagyon közel vannak egymáshoz Ezáltal határt is szabhatunk az oldalsíkok számának drasztikus növekedésének
55
55 Cellák és portálok (11) konvex portálok Konvex portálokra van szükségünk Ha egy portál konkáv, akkor eldobhatunk olyan részeket is a színtérből, amik látszódnak Ha mindenképp konkáv portálokat szeretnénk, akkor használjuk a portál konvex burkát (és esetleg stencil puffert is)
56
56 Cellák és portálok (12) előnyök-hátrányok Hátrányok: A vágások száma nagyon magas Minden olyan szoba összes sokszögét vágni kell a látógúlával, amibe belátunk Csak belső színtereken működik Célszerű konvex térrészeket biztosítani neki Konkáv térrészeknél elveszítjük azt az előnyt, hogy egyetlen pixelt sem rajzolunk felül Előnyök Gyors, egyszerű rekurzív algoritmus Dinamikusan változó színterek létrehozása portálok ki/bekapcsolgatásával, behelyezésével
57
57 Cellák és portálok (12) példa portálmotorokra Descent Duke Nukem 3D
58
58 Cellák és portálok (13) példák: tükrök, teleportkapuk
59
59 PVS (1) bevezetés PVS (Potentially Visible Set) Cellák, területek, objektumok vagy poligokon halmaza, amelyek láthatóak egy adott cellából Egy előfeldolgozási lépésben számítjuk ki a színtérhez Statikus objektumok Tárhely foglalás pontosság Az egyiken csak a másik rovására javíthatunk Először vizsgáljuk meg, hogyan működik ez a módszer cellák szintjén (cell-to-cell pvs)
60
60 PVS (2) bevezetés
61
61 PVS (3) cell-to-cell Ebben az esetben a láthatósági reláció azt jelenti, hogy a két cella között van-e egy összekötő szakasz Ha van ilyen szakasz, akkor az még nem jelenti azt, hogy kirajzoláskor a nézőpontot tartalmazó térrész bármely pontjából látható a másik térrész Egy egyszerű színtér: A D H F CB E G
62
62 PVS (4) szomszédsági gráf Szükségünk lesz még egy szomszédsági gráfra Bejárjuk a gráfot és minden cellára meghatározzuk, hogy melyik másik cella látható onnan A láthatósági információt tárolhatjuk egy mátrixban Annyi oszlopot és sort tartalmaz, ahány cellánk van Elemei bitek, ha van összekötő szakasz két cella közt, akkor a mátrix adott eleme 1 lesz, különben 0 Ez viszonylag nagy lesz, pl 10’000 cellánál kb. 12Mb Tömöríteni a nagy üres részek miatt (pl. RLE-vel) Szimmetrikus lesz a mátrix, elég csak az alsó vagy felső háromszögét tárolni A D H F CB E G H BCDFG EA ABC… A101. B010. C101. …....
63
63 PVS (5) példa A D H F CB E G H BCDFG EA
64
64 PVS (6) példa A D H F CB E G H BCDFG EA
65
65 PVS (7) példa A D H F CB E G H BCDFG EA
66
66 PVS (8) példa A „C” cellából nem látszik a B, F, G A „H”-ból nem látszik az F A D H F CB E G A D H E A D H F CB E G A D CB E G
67
67 PVS (9) láthatósági relációk meghatározása Induljunk ki a színtér BSP-fájából (Quake-stílusú) Ez „leveles” volt (leafy), azaz csak a levelekben vannak sokszögek (konvex sokszöghalmaz, a normálvektorok befelé mutatnak), a belső csúcsokban csak osztósíkok vannak A feladat a levél-levél láthatóságok meghatározása A feladat két részből áll Helyezzünk be portálokat a BSP-fa osztósíkjai mentén A portálok segítségével meghatározzuk a levél-levél láthatósági viszonyokat 1 2 A B C 1 A2 BC
68
68 PVS (10) portálok elhelyezése Három lépésben fogjuk elvégezni Első lépésben létrehozunk egy befoglaló testet a színtér köré és az osztósíkokon sokszögeket hozunk létre Ezeket elmetsszük a befoglaló objektum oldalaival, így nagyméretű négyszögeket kapunk Ezután minden ilyen négyszöget elmetszünk a BSP-fa összes osztósíkjával, így nagyon sok lehetséges portált kapunk 1A B C 2 A B C x y z w
69
69 PVS (11) portálok elhelyezése Van rengeteg különböző méretű poligonunk, de mindegyik egy- egy vágósíkon fekszik Ezeket nyomjuk le a BSP-fába, amíg el nem érünk egy levélhez Ha a poligon a vágósík jobb oldalán van, akkor a jobb oldali részfába Ha a bal oldalán, akkor a bal oldali részfába Ha pont a síkon van, akkor mindkét részfába letoljuk Egy levélhez érve ott eltároljuk a poligon azonosítóját A B C x y z w 1 A2 BC x y z x w z wz wz wz w
70
70 PVS (12) portálok elhelyezése Harmadik lépésben eldobjuk azokat a poligonokat, amik csak egy levélbe jutottak le („y” kiesik) Amelyek két levélbe lejutottak, azokat elmetsszük a két levél összes sokszögével A „z” kiesik, mert teljesen kívül van a B térrészen A „w”-ből és az „x”-ből a sokszögek pedig kivágják azokat a részeket, amik kívül esnek a két levél közötti átjárható részen A B C x y z w 1 A2 BC x y z A B C x w x w z wz wz wz w
71
71 PVS (13) láthatóság meghatározása Antipenumbra-vágással határozzuk meg Penumbra = félárnyék Antipenumbra = ennek az ellentétje (azaz pl. egy résen keresztüláramló fény által meghatározott tér) Szemléltetés: Az „A-B” cellát összekötő portál a fényforrás A „B-C” cellát összekötő portál a rés A bal oldalon látható felületen vizsgáljuk az árnyékot és a megvilágított részt A vastagabb szakasz és a sötétszürke terület a teljesen megvilágított terület bármely pontja összeköthető a fényforrás bármely pontjával A vékonyabb vonal és a világosszürke rész azok a pontok, amik a fényforrás nem minden pontjával köthetőek össze, de meg vannak világítva
72
72 PVS (14) láthatóság meghatározása Mire jó ez nekünk? „A” szobában állunk „B” szoba természetesen látható innen „C” szoba látható a konvexitási feltételek miatt A „D” szobára vizsgáljuk a láthatóságot Ez a szoba akkor és csak akkor látható az A-ból, ha van olyan portál C és D között, ami az antipenumbrába esik Az algoritmus tovább folytatható a „D” után következő térrészekre is
73
73 PVS (15) láthatóság meghatározása Algoritmus Vesszük a fényforrás csúcspontjait Minden csúcsponthoz vesszük a lyuk egymás melletti csúcspont-párjait Így három csúcspontot kapunk, ez meghatároz egy síkot Csak azokat a síkokat tartjuk meg, amelyek a lyuk és a fényforrás ellentétes oldalán vannak A szaggatott vonallal jelölt síkok nem megfelelőek Az ábrán látható három portálból csak kettő esik bele abba a tartományba, ami látható
74
74 PVS (16) kirajzolás Meghatározzuk, hogy melyik cellában van a kamera Ezt a cellát kirajzoljuk Z-puffer segítségével Ha színtér geometriáját szétbontottuk strukturális (cellák) és részlet-geometriára (cellában levő objektumok), akkor a cella részlet-geometriáját el kell még metszeni a látógúlával A PVS-ben meghatározott minden cellát elmetszünk a látógúlával és ha látszik, akkor kirajzoljuk Ha egy cella látszódik, akkor a benne lévő részlet-geometriát is elmetsszük a látógúlával a kirajzolás előtt
75
75 Portál vs PVS (1) Előfeldolgozási idő A PVS információ kiszámítási nagyon időigényes feladat és ezt egy előfeldolgozási lépésben célszerű elvégezni. Viszont ha már megvan, akkor már nem igényel plusz számítást. A sima portál technika nem igényel előfeldolgozást, de a látógúla módosítása a kirajzolás során jelentős futási idő növekedéssel jár Kevés vagy sok portál A PVS módszer (többnyire) független a portálok számától (persze az előfeldolgozási lépés hosszabb lesz) A látógúla újragenerálása miatt a sima portál technika elég érzékeny az átjárók számára, inkább kevesebb portállal rendelkező színtérnél használható Automatikus vagy manuális portál-behelyezés A jelenlegi portál-generáló algoritmusok nagyon nagy számú portált eredményeznek, így inkább csak a PVS alapú rendszereknél célszerű ezeket automatikusan elhelyezni a színtéren
76
76 Portál vs PVS (2) Statikus vagy dinamikus portálok Mivel a PVS számítása lassú és egy portál mozgatásakor szükséges a PVS információk újraszámítása, így ezek a rendszerek csak statikus portálokkal tudnak dolgozni. A sima portál-technika nem igényel előfeldolgozást, így egy portál szabadon mozgatható a színtéren teljesítménycsökkenés nélkül A szükséges adatszerkezet Egy PVS motor legjobban leveles BPS-fákkal működik, ahol a levelek konvex térrészeket tartalmaznak és portálokkal vannak összekötve Általában a sima portál-technika nehezen ötvözhető leveles BSP-fákkal, mivel ekkor a generálás során túl sok portál keletkezhet
77
77 Takaró objektumok Mit tehetünk ha a színterünk nem alkalmas a cellákra történő felosztáshoz? Keresünk egy takaró objektumot, ami a színtér jelentős részét eltakarja a kamera elől Pont a portál-technika inverze A teljes terünk nyitott és olyan területeket keresünk, amik el vannak takarva Például egy objektum árnyékteste a kamerából nézve takaró objektum árnyéktest síkjai
78
78 Virtuális takaró objektumok A különálló objektumok árnyéktesteinek uniója jelentéktelen, de az egész objektum- együttes árnyéka reprezentálható egyetlen virtuális takaró objektummal
79
79Vége
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.