csütörtök, április 01, 2021

az játék előrehaladtáról

Szóval van új videó a játékról.

Most elég sok idő telt el a legutóbbi videó óta, azért mert amin most dolgoztam, az egy kicsit bonyolult dolog. Szerencsére az én kockákból álló világomban nem olyan nagyon bonyolult, de lehet, nem ártott volna elolvasni egy kicsit az irodalmat a témában. Szóval a láthatóságon dolgoztam. Ez nagyjából azt jelenti, hogy megpróbáljuk megjósolni, hogy egy pontból melyek azok az objektumok amelyek láthatóak és csak azokat rajzoljuk ki. Van egy fontos szabály a láthatóságban, hogy nem szabad alulbecsülni a láthatóságot, azaz látható dolgokról hibásan azt mondani, hogy nem láthatóak, mert akkor hibás képet kapunk és az a legrosszabb, ha elkezdenek előtűnni dolgok olyan helyeken, ahol már eddig is látnunk kellett volna őket. Ezért aztán egy kicsit inkább felül szokták becsülni a láthatóságot, azaz olyan dolgokról is azt mondjuk, hogy láthatóak, amelyek valójában nem azok, majd megoldja a többi rendszer, hogy szépen az őket eltakaró dolgok valójában is eltakarják őket.

Na most voxeles világokban, azaz az én kis kockáimnál, azért könnyebb egy kicsit ez a dolog, mert általában a kockák sarkainál kell eldönteni, hogy mi látszik onnan és elég könnyű reprezentálni az üres teret, amin átmegy a fény és minden vele szomszédos tárgy láthatóvá válik, meg a nem üres teret is, amin nem megy át a fény, tehát ami a hátánál van, az nem látszik. Egy pontból. De lehet, hogy egy másik pontból meg látszik. Szóval nem olyan nagyon könnyű ez a feladat így sem, de engem nagyon rég óta érdekel és most jó volt egy kicsit olyan dolgokon dolgozni, amelyekre nem tudtam a választ. Rajzolgattam rendesen papírra a vonalakat meg festegettem a négyzeteket.

Az algoritmus egyébként nem túl bonyolult, egy kicsit még lehet finomítgatni valószínűleg, de azt majd legközelebb. Szóval röviden az algoritmus annyi, hogy először megkeresi az üres teret, azokat a kis kockákból nagyobb téglatestekbe csoportosítjuk, majd ezeket is még nagyobbakba, amelyeket láthatósági nódusoknak nevezek, persze a nódusnak itt nincs értelme, mert nem igazán értelmezem fa struktúrában ezeket, inkább csak egy egyszerű gráfként. Szóval miután megvannak a láthatósági testek, utána meg kell állapítani, hogy melyek látszanak melyekből, ez egy kicsit lassú folyamat, de én találtam egy elég gyors megoldást, az üres tér kitöltésével, konvex alakzatban, féle-forma. Egy kicsit talán túl felülbecsüli a láthatóságot, de gyors és a mostani grafikus kártyák ezzel már megbirkóznak, főként ha egy kicsit segítek is nekik egy kis mélységi rendezéssel és mélység gyors meghatározásával, ami nekem a kockákkal egy könnyű feladat.

Szóval alapvetően ez most egy fontos lépés volt abba az irányba, hogy jó nagy világokat tudjak alkotni amelyek futási ideje csak a lokális bonyolultságtól függ.

A videó első felében csak kolbászolok a pályán és az látszik, hogy nem tünedeznek elő és el a falak fura módokon, tehát nem becsülöm alul a láthatóságot. A második felében meg azt lehet látni madár távlatból, hogy mit is rajzolok ki. Néha egészen sok mindent kirajzolok a pályából, ott lehet, hogy kicsit sokat is, de vannak helyek ahol szépen eltűnik a pálya, csak néhány fal marad. Az egész attól függ, hogy milyen tágasak az ajtók és mennyire néznek egymással szembe, ha nagyon sok időm lenne, a pályagenerálást is akár összeköthetném a láthatóság számolással és csak olyan pályákat generálnék, ahol mindig kevés dolog látszik.

Na legközelebb talán már kicsit jobban fognak kinézni a dolgok, bár talán mégsem, vissza kéne már tenni az ellenfeleket, már teljesen idegen az a kód. Szerencsére ők is jól ki tudják használni a láthatóságot.

Nincsenek megjegyzések: