BSP-fák használata játék- engine fejlesztésében a nagy kiterjedésű zárt terek megjelenítéséhez Előadó: Boromissza Gergely Konzulens: dr. Szirmay-Kalos László
Bevezetés I. BSP-fa használat –1990-es évek: Doom –2000-es évek: Quake –2005: Half-Life 2
Bevezetés II. Videokártyák rohamos fejlődése –Több millió háromszög másodpercenként Felhasználói igények növekedése –Élethű környezet (még több háromszög) –Dinamikus elemek, árnyékok –Minél nagyobb FPS –Rövid várakozási/betöltési idő
Bevezetés III. Teljes terep kirajzolása Részletes kidolgozottság –Nagyon sok háromszög –Lassú megjelenítés (kicsi FPS) Elnagyolt kidolgozottság –Gyors megjelenítés –Csúnya terek
Bevezetés IV. Pálya szétszabdalása –Kicsi pályarészek –Várakozás az új részek betöltésére –Lineáris játékmenet –Dinamikus pályarész betöltés
Bevezetés V. BSP-fák ötlete –Játéktér strukturális felépítése –Csak a szükséges méretű játéktér megjelenítése –Vizsgálatok (pl. ütközésdetektálás) csak az aktuális térrészben –Előfeldolgozási időben számolható –Minimális valós-idejű számítási igény –Lehet részletesen kidolgozott terep –Elfogadható FPS
Kd-fa Kd-fa –A teret a tengelyekkel párhuzamos hipersíkokkal osztjuk ketté úgy, hogy… –a sík két oldalán közel azonos számú poligon legyen, mindaddig… –amíg elegendően kevés poligon nem lesz minden egyes térrészben.
BSP-fa BSP-fa (Kd-fa kiterjesztése) –A teret a pálya egy poligonjának síkjával osztjuk ketté úgy, hogy… –minél kevesebb poligont vágjunk ketté és… –a sík két oldalán közel azonos számú poligon legyen mindaddig… –amíg minden egyes térrészben a poligonok által alkotott alakzat konvex nem lesz.
BSP-fa struktúra BSPNode (root) •cutterPlane •boundingBox BSPLeaf (front) •polygonList •boundingBox BSPNode (behind) •cutterPlane •boundingBox BSPLeaf (front) •polygonList •boundingBox BSPLeaf (behind) •polygonList •boundingBox
BSP-fa használata Különféle vizsgálatokhoz –Csak az aktuális térrészben szükséges Megjelenítéshez –Aktuális térrész –Aktuális térrészből látható térrészek
Aktuális térrész keresése Rekurzív algoritmus 1.Induljunk el a gyökértől 2.A vizsgált pont (aktuális pozíció) és a csomópont vágósíkjának viszonya szerint lépjünk tovább a gyerekek felé (front vagy behind) 3.Ismételjük a 2. pontot rekurzívan mindaddig, amíg levélhez nem érünk. 4.A levél reprezentálja a térrészt, amiben aktuálisan tartózkodunk
Átjárás a térrészek között I. Szükség van rá, mert… –nem feltétlenül csak az aktuális térrész látható az aktuális pozícióból, hanem… –a szomszédosak is látszódhatnak Módszer –A térfelosztás után még előfeldolgozási időben döntsük el minden egyes térrészre, hogy abból mely más térrészek látszódhatnak –Tároljuk el ezt is a struktúránkban
Átjárás a térrészek között II. Megvalósítás –Számoljunk a térrészekhez befoglaló dobozt –Amennyiben a befoglaló dobozoknak van közös részük, mondjuk azt, hogy van átjárás a térrészek között –Tároljuk ezt az információt egy vektorban, ahol egy bit jelöli az átjáró létét a két térrész között
Megjelenítés I. A látható térrészek összegyűjtése 1.Keressük meg, mely térrészben tartózkodunk aktuálisan 2.Gyűjtsük össze az innen látható térrészeket 3.Dobjuk el ezek közül a már vizsgált, és az aktuális kamera beállítások mellett nem látszódó térrészeket (befoglaló dobozos vizsgálat) 4.Végezzük el rekurzívan minden egyes megmaradt térrészre a vizsgálatokat a 2. ponttól kezdődően
Megjelenítés II. Jelenítsük meg az így összegyűjtött látható térrészek összes háromszögét –ha az aktuális térrésszel kezdünk, akkor a Z-bufferbe való írások száma jelentősen lecsökken, mert… –a jelenleginél közelebbi térrészek, illetve háromszögek nem lehetnek
Példa
Példa a
Példa a b
Példa a b 21
Példa a cb 21
Példa a c 43 b 21
Példa Átjárhatóságok –1-2 –2-4 –3-4
Példa Avatar térrésze –1 Látható térrész(ek) –2 Valóban látható –2 Onnan látható –1; 4 Nem vizsgált térrész –4 Valóban látható –n.a. Összes látható –1; 2
Eredményeim I. BSP készítő program –Bemenet: OBJ fájl Háromszögesített Befele néző normálokkal Avatar kezdőpontja a (0; 0; 0)-s koordinátában Elegendően magas mennyezet (avatar szempozíciója 1 egység magasan) –Kimenet: BSP fájl Saját készítésű Alapötlet a Quake 3 formátuma alapján
Eredményeim II. BSP megjelenítő program –DirectX 9.0c használata –BSP fájlok betöltése –Megjelenítés Adott térrész zöld színnel Többi látható térrész pirosból kékbe átmenő árnyalattal –Mozgás Felhasználói irányítás (mozgás, ugrás) Minimális fizika (gravitáció, csúszás, ütközés)
Továbblépés Anyag jellemzők és textúra használata MTL fájlból Láthatósági feltételek finomítása –egyszerűen és gyorsan kezelhető –megbízható módszerre Fizikai modell finomítása
Köszönöm a figyelmet!