Miközben elkezdtem dolgozni a modellek QuadTree-jén, rájöttem, hogy számunkra az alapértelmezett modellosztály, amit az XNA ad, abszolút nem jó. Lassú, sok helyet foglal, és egyáltalán nem felel meg az igényeimnek. Mit tesz ilyenkor a programozó?
Kukába dobja az egészet, amin dolgozott, és teljesen újraír mindent, ami csak a keze ügyébe kerül.
Ennek eredménye látható lapozás után, egy kis leírással, hogy mégis miért jó ez.
Tehát, miért is jó ez, és miért vagyok rá büszke? (Vagyis, még nem annyira, de ha végleges elkészül, akkor az leszek.)
Sajnálatos módon az XNA nem ismeri fel a modellfájlba berakott textúrát, csak azt tudja kezelni, ami a modell melett van, külön képfájlként. A két modellezőnk pedig nem tudja azt, hogyan is lehetne külső textúrát linkelni a modellhez. Én egy ideig téptem a hajamat, próbáltam egyedi Content Pipeline-t írni (vagyis azt a programrészletet, ami fordításkor megemészti, és sokkalta könnyebben feldolgozhatóvá teszi a fájlt, adott esetben a modellt. Vagyis eldob mindent, amivel ő nem tud mit kezdeni: többet között a textúrát.)
Végeredményben arra jutottam, hogy miért csak én tépjem a hajamat? Úgyhogy nekiálltam a fenn látható program megírására, ami viszont nektek, kedves jövendőbeni játékosok, eléggé hasznos lesz. Jelenleg csupán egy OBJ fájlból modelbetöltő, textúrázó és végül általam kívánt formátumba exportáló program (vagyis nyílik a kapu a későbbi moddolási lehetőségek számára, pl a modellek egészen biztosan változtathatóak már.) Illetve, ha nagyon elszalad velem a ló, és lesz szabadidőm, akkor ez a kis progit egy teljes értékű modellező programmá szeretném fejleszteni. Jó, persze, a Blenderrel, 3DsMax-al nem tudok, és nem is tervezek versenyezni, de reményeim szerint hasznos kis eszköz lesz végeredményben.
Mi ennek a proginak az ördögi előnye hátránya: a modellezőknek a külső programban elkészített modellt ebben a progiban kell majd Mesh-ről mesh-re újratextúrázni. Előre hallom a sikolyaikat, ahogy majd elkezdik :)
És mi a valódi előnye? Az eléggé szép sebesség növekedés. Mint ahogy már több postban is említettem, a videokártya azt szereti, ha adnak neki egy csomó munkát, és utána békében hagyják dolgozni. Sajnos a modellek ezzel az elvvel abszolút nincsenek tisztában, ugyanis felépítésükből adódóan minden egyes Mesh után meghívnak egy Draw függvényt, ami elküldi az adataikat a videokártyához, hogy kirajzolódjanak.
Én pedig pontosan itt tervezek belepiszkálni a folyamatba: ahelyett, hogy egyesével ontanám a modelleket, inkább megpróbálom, amennyire csak lehetséges, egy kupacba pakolni az azonos paraméterekkel rendelkező adathalmokat. Na, az, hogy ez elméletben működik, nem feltétlenül jelenti azt, hogy gyakorlatban is megvalósítható, de ha igen, az kb 10x sebességnövekedést fog jelenteni, vagyis még több életet zsúfolhatunk a kihalt városba, gépigény növekedés nélkül. És ez szerintem jó hír mindenkinek.