Egy kis állapotjelentés csak:
Ugyan nem olyan régen letettem a Quadtree-kről, mert egyszerűen túl sok processzoridőt raboltak el, hiába próbáltam a lehetőségekhez mérten lecsökkenteni az időt, amikor futottak. Az egyetlen megoldás az volt, hogy a quad-ok méretét eléggé nagyra növeltem - itt viszont elveszett az előny, amit adtak. Úgyhogy, nehéz szívvel töröltem majd négy napos munkámat, és ennek örömére a framerate kapásból megugrott, jó 40 FPS-el. Ennek örültem, nagyon.
Egészen az elmúlt napokig, amikor belekezdtem az optimalizálásba. És észrevettem, hogy igaz, hogy a Quadtree nem számol, de rengeteg fölösleges adat kezdi elvenni az előnyt, amit kicsikartam a grafmotorból. Úgyhogy, visszatértem az alapokhoz, és írtam egy újfajta quadtree-t. Az újfajtasága abból ered, hogy rendkívül mértékben lecsökkentettem a komplexitását, és összetettségét. Immáron nem foglalkozik azzal, mit lát a kamera, csupán annyi az összes dolga, hogy megmutatja, a pálya mely négyzetében tartózkodok - és eltárolja az ehhez a négyzethez szükséges adatokat, illetve azt, hogy melyek az ő szomszédai.
Így kapásból kapok kétfajta területet: elsőnek van a "fő" négyzet, ahol a játékos aktuálisan tartózkodik. Ez megjelenik teljes felbontásban: modelekkel, zombikkal, házakkal, fákkal, mindennel.
A második, szomszéd quad pedig rendkívül csökkentett felbontásban: a házak ugyan megjelennek, de a belsejük nem töltődik ki, a fák helyett billboardot jelenítek meg, és természetesen nincsenek látható ellenfelek sem. Persze ez a felbontási ráta tetszőlegesen növelhető - csökkenthető az adott gép igényeinek megfelelően.
Szóval, igazából egy LOD-QuadTree jött létre, némileg egyszerűsített megoldásban, és úgy néz ki, hogy ez abszolút megéri. Rendkívül alacsony a számításigénye - az esetek 99%-ában mindössze egyetlen egy IF fut le. Betöltéskor megugrik kicsit a számításigénye, de ezt egy külön szálon végzem, és csupán annyi a feladata, hogy összeállítsa az indexbuffereket, amiket kirajzolnék, és lecserélje a szükséges adatokat.
Illetve, hogy az átmenetel ne legyen nagyon ugrásszerű (és észrevehető) átfedés van a területekben, így míg a fő quad szélét megközelíted, elkezdődik betöltődni az új quad is teljes felbontásban.
Cserébe egy hátrány van: kb 10 másodperccel megdobja a töltési időt, de szerintem ez elfogadható kompromisszum.