Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Térbeli adatszerkezetek Jeni László Attila ELTE IK Számítógépes Grafika II.

Hasonló előadás


Az előadások a következő témára: "Térbeli adatszerkezetek Jeni László Attila ELTE IK Számítógépes Grafika II."— Előadás másolata:

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


Letölteni ppt "Térbeli adatszerkezetek Jeni László Attila ELTE IK Számítógépes Grafika II."

Hasonló előadás


Google Hirdetések