HTML

Survive Developement

Itt olvashatod a Survive! nevű játék fejlesztésének állapotát, lépéseit. És mi is lesz a játék? Egy zombis-túlélős játék, ahol elsősorban a csapatmunkára építkezve kell megpróbálni életben maradni egy kihalt városban. A terep teljesen a tietek, nincsenek szabályok: éljetek túl, ahogy tudtok!


Küldj e-mailt nekünk:
gilgamesco@gmail.com

Sikolyok

Ettől tépjük a hajunkat:

Friss topikok

  • Sir Butcher: A gyors mozgású ütközés-érzékelés majd a lövésnél lesz topic :D A második esetben teljesen igaza... (2012.04.05. 16:38) Ütközésérzékelés
  • _fpeti_: Halad ez. (2012.04.04. 22:01) Gravitáció
  • Sir Butcher: Az sem rossz, az tény :D Szerencsére egyelőre annyi különbözőt kell csinálnom, hogy esélyem sincs ... (2012.02.20. 21:48) Scenery - Még több látvány
  • Sir Butcher: Na, ideírom: obj-nél megoldottam a csontokat. Melléktermékként összejöttek, extra számítás nélkül ... (2011.12.02. 11:48) Model Animálás - a probléma, és a (vélt) megoldás
  • Burwor: "A tesztvárosban sétálgatva belefutsz egy házba, aminek hiányzik egy fala. Mit csinálsz?" Zárva a... (2011.11.10. 15:00) Sziduri - a grafmotor bemutatkozik

Model Importer

2011.10.12. 09:05 :: Sir Butcher

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.

4 komment

Címkék: bemutató model videokártya importer

A bejegyzés trackback címe:

https://survivedev.blog.hu/api/trackback/id/tr283296737

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Pretender 2011.10.12. 11:46:57

Én anno XNA-t használtam, és semmi ilyesmi gond nem volt...

A modellező programban felraktuk a textúrákat (material editor), kimentettük x-be, és minden jó volt. A textúrának persze ott kellett lennie, de az x-be "belementődött" egy hivatkozás.

A másik meg az, hogy ha vertex buffert használ az ember, akkor azt lock-unlock-kor feltölti a vramba, onnantól pedig csak a setvertexbuffer(...)-re "váltogatja", szóval nem tölt igazán semmit. Persze ettől még lehet igaz, hogy minél nagyobb VB-t lőjünk ki egyszerre, az igazi gond ezzel viszont számomra az, hogy ha mondjuk van 5 db mesh, és mindegyiken más-más textúra van, akkor nem rajzolhatjuk egybe, mert honnan tudnák, hogy kinek melyik text kell? :)

Sir Butcher · http://survivedev.blog.hu/ 2011.10.12. 15:23:26

Na igen, a gond ott volt, hogy nem volt a fájlba hivatkozás. Mostmár odáig eljutottunk, hogy benne van, de ettől függetlenül nem töltötte be, kivéve, ha megadtam a textúrát, de akkor mindennél működött.

Viszont, a modell nem buffert használ, hanem egyszerűen tölti az adatokat DrawUserIndexedPrimitive-sel. Amit írtál, az teljesen igaz a bufferre, ezért szeretném megpróbálni megvalósítani a bufferes megoldást. Bár ahogy gondolkozom rajta, úgy lesz gyanús, hogy túl sok erőforrást nem fogok nyerni, mivel a worldMatrix-ja más lesz mindegyik modellnek... A textúra meg nem gond, mivel erősen véges számú textúrát fogunk használni, és az alapján megy a keresés.

Pretender 2011.10.13. 11:37:51

@Sir Butcher: Hát igen. Nekem is ezért van külön, bár már c++ban tolom :)
Ami különbözhet meshenként az a world, textúra, illetve ha vertex shaderben számolsz még valamit, akkor azok is akár.

Na de hajrá! :)

Sir Butcher · http://survivedev.blog.hu/ 2011.10.13. 17:10:47

Azért a C# és a C++-is DirectX-re épül, tehát felépítésileg nagyon nagy különbség persze, hogy nincs.

Azért írtam, hogy elmélet, aztán majd a gyakorlatot meglátom. Nem tudom, mennyi számításigénye volna, ha a szabadidőben a modell vector3-jait valóban transzformálna, lehetne jópár modelt azonos worldMatrix-ra hozni. Bár itt erősen nyomós tényező a modellek komplexitása, viszont mivel alapból több thread-et használok, lehet, hogy néha lenne elég szabadidő erre a folyamatra.

Elméletben jól néz ki, de hogy mit hoz a gyakorlat... :)
süti beállítások módosítása