HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

december 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Character controller

2010.05.02. 21:52 :: syam

Miután sikeresen kimerítettem PhysX alatt a lényegesebb megoldási lehetőségeket (NxController, NxUserContactReport, SweepTest) kitaláltam egy PhysX független megoldást.

A szereplő dinamikus fizikai objektum marad és az ütközést is a fizikai engine végzi azonban a kölcsönhatásokat már a játék engine kezeli le. Így megvalósulnak az alábbi követelmények a character controller-rel szemben:

  • egyenletes mozgással, adott irányban mozog, gyorsulás/lassulás szabályozható ill. kikapcsolható
  • nincs csúszkálás ill. lecsúszás ferde felületről ill. szabályozható, hogy mekkora szögnél csússzon meg
  • képes érzékelni ha van a lába alatt talaj és
  • csak akkor engedélyez mozgást egyébként a gravitációra reagál
  • képes érzékelni a lába alatt mozgó talajt - mind forgatást, mind elmozdulást - és megfelelően viselkedni
  • képes érzékelni a lépcsőket ill. ennél általánosabban bármit amire fizikailag lehetséges fellépni

Valószínű a lista nem teljes (pl. létrán mászás, falon mászás, tárgyra felmászás stb) idővel bővülni fog mindenesetre a szereplők vezérlése megoldottnak tekinthető ezzel a változattal. Remélhetőleg Bullet alatt is ugyanezen funkciók megvalósíthatók.

 

 

Szólj hozzá!

Címkék: bullet physx character controller

Demo helyett - character controller

2010.04.19. 00:17 :: syam

Az utóbbi időszakban, de leginkább az elmúlt héten a szereplők fizikai vezérlésével foglalkoztam PhysX alatt (dinamikus testként kezeltem a szereplőket, amelyek forgása mindkét vizszintes tengely mentén blokkolva volt). Miután sikerült a szereplő scriptelést alapszinten beüzemelni és bekerültek mozgó platformok a jelenetbe ki tudtam próbálni a fizikai vezérlést ezekben a speciális helyzetekben:

  1. függőlegesen mozgó platform
  2. vízszintesen mozgó platform
  3. forgó platform

A tapasztalt hibák a következők voltak:

  1. Ebben az esetben ezek kevesen voltak leszámítva a megállás utáni apró "ugrást".
  2. Ehhez sajnos nagyon nagy súrlódás volt szükséges ellenkező esetben szó szerint kicsúszott a szereplő lába alól a talaj.
  3. Ehhez szintén nagy súrlódás volt szükséges valamint minimális forgatási csillapítás.

A nagy súrlódásnak számos mellékhatása volt mint pl. nem kívánt perdület mozgatás közben (megpróbáltam növelni a forgatási csillapítást, amely sajnos ellentmond a 3. pontnak), nehézkessé vált a lépcsőn való feljutás, a "láb" oldala mindenhez odaragadt.
Kipróbáltam a materialok váltogatását: futás közben nem volt súrlódás csak álló helyzetben. Ez a 2. ponttal ütközött.
Kipróbáltam magát a járást szimulálni két "lábbal": az eredmény - a nem középponti forgástengely miatt - a szereplő jobbra-balra forgott attól függően melyik "láb" volt a talajon.

Második menetben megtaláltam a PhysX saját character controllerét, amely - gyaníthatóan a "lustaság" ékes gyöngyszemeként - még mindig NovodeX névjeggyel szerepel a kódban. Ez a legtöbb esetben nagyon jól működőnek tűnik kivéve teljesen hiányzik a környezet -> szereplő interakció. Csak szereplő -> környezet és szereplő -> szereplő interakció detektálása lehetséges.
Valószínűleg kiegészíthető a hiányzó elemmel, de lehetséges, hogy a physX-es megvalósításból kiindulva célszerű készíteni egy sajátot...

Szólj hozzá!

Címkék: physx novodex character controller

Haltanya

2010.04.11. 22:44 :: syam

Kikerült az oldalra egy haletető. Mármint ahol halakat lehet etetni. Fogyasszátok őket :3

Szólj hozzá!

Demo 8 - Bugos borg barangolás

2010.04.11. 16:59 :: syam

"A múltkori mentőakció sajnos nem járt teljes sikerrel. Bár mindenki kimenekült a robbanásra ítélt bázisról felbukkant a színen a berzerkerek ádáz ellensége a borg. Nem tudni miért vadásznak rájuk hiszen technológiájuk jócskán felülmúlja a stroggok technikai képességeit - lehetséges, hogy egyfajta vetélytárst látnak bennük. Az összecsapást mindössze ketten élték túl..."

Az eddigi verziók közül ebben viselkedik a legbugosabban a fizikai engine új irányt adva a fejlesztésnek. Jelen kiadásban már script által vezérelt platformok is szerepelnek (nevezhetjük ezeket lifteknek is). Bármely szereplőre reagálnak, ha legalább 2 mp-ig tartózkodnak a közelükben; ilyenkor L-alakú pályát tesznek meg a termen belül.

Bugokat nem sorolok fel, mert van néhány (fagyás sincs sajnos kizárva kétszálas esetben).

Irányítás a szokásos.

Link:

www.inspekcio.hu/indigo_illusions/demos/sakura_demo_2010_04_11.zip

 

 

Szólj hozzá!

Demo 7 - berzerker mentőakció 2

2010.04.05. 22:27 :: syam

Ez a demó az előző kiadás kiegészítése (annak hibáival együtt természetesen) egy látszólag egyszerű változtatással - nevezetesen vannak ajtók. A változtatás mögött azonban egy jelentős újítás rejtőzik: az ajtók mozgását egy lua script irányítja és vezérli ajtónként.

 

A feladatunk ismét ugyanaz: eljuttatni mind a hét berzerkert a kiindulási "terembe". A nehezítés a végrehajtásban az, hogy az ajtók csak "veszély" esetén nyílnak ki és annak elmúlta után 3 mpercig maradnak nyílva utána automatikusan bezáródnak.

Hasznos tanács: ne rakjunk semmit az ajtó alá:]

Link:

www.inspekcio.hu/indigo_illusions/demos/sakura_demo_2010_04_05.zip

A script:

A script egy szabványos lua script, (egyelőre) "szabadon" módosítható és nem használ lua könyvtárakat. A script futtatásakor a "main" függvény kerül meghívásra másodpercenként hatvanszor. Első paraméter az adott szereplő, második a triggerelés állapota (1, ha éppen triggerelés történt 0, ha nem). Az "add_position" függvény az első paraméterként megadott szereplő poziciójához adja hozzá a következő három paraméterrel megadott vektort. Elírás esetén azonban az alkalmazás lefagy(hat) miután a konzolra kiírta a hibát - ezért célszerű parancssorból indítani, mivel nincs logolás.

 

Szólj hozzá!

Címkék: lua

Demo 6 - Berzerker mentőakció

2010.03.28. 14:42 :: syam

UPDATE

Azért, hogy mentőakció érzete legyen a dolognak bekerült még egy effekt...

 

Mint a címből kiderül ez a demo már kicsivel több, mint az eddigiek... az alkalmazás már rendelkezik elérhető/elérendő céllal: 5+1 db berzerker található a jelenetben és mindegyiknek el kell juttatni abba a "terembe" ahonnan a főszereplő indul. A küldetés sikeressége látható lesz:3

Mindehhez segítség(nek készült) egy minimális AI, amely az alábbi dolgot tudja.
Ha látóterébe kerül a főszereplő akkor elindul feléje (a látótér egy speciális "csonthoz" van kötve vagyis számít, hogy az animáció során éppen merre néz a modell). Ahhoz tehát, hogy követésre bírjuk társainkat mindvégig a látóterükben kell maradnunk bár 5 mp-ig emlékeznek ránk. Egyelőre "süketek" vagyis nem érzékelik mi történik a "hátuk" mögött.

Ezenkívül a demo tartalmazza már az animation blendet, ami (az oldalra ugrálástól eltekintve) folyamatos mozgás érzetét kelti.

Ismert hibák

A Bullet engine hozza a szokásos formáját: valami miatt a perdületet igen rosszul szimulálja - mintha a hordóknak is lenne AI-juk, de nem... Fejlesztői érdekesség: ha kikapcsoltam a debug renderelés lehetőségét akkor a szimulációt nem számolta...

Az AI előszeretettel "bebújik" a sarokba ahonnan nem tud kijönni csak segítséggel. Egymást nem kímélve próbálnak minket megközelíteni. Nem veszik figyelembe a tárgyakat.

A folyosók falai nem folyamatosan villództak egyik gépemen.

Nincs log.

Irányítás

A szokásos WASD + egér , 2/3 kamera távolság állítása.

Link

www.inspekcio.hu/indigo_illusions/demos/sakura_demo_2010_03_28.zip

 

Szólj hozzá!

hello_kitty.cpp

2010.03.27. 17:01 :: syam

int main()
{
  bool miau=CICA(this,cmd.m_object_as_actor);
  if(miau)
  {
       printf("doromb\n");
  }
}
Hello world helyett.... :3

Szólj hozzá!

sakura ES

2010.03.25. 21:08 :: syam

És végül megszületett...

Egy ideje érlelődött bennem a gondolat, hogy kihasználva az enginem sebességét a mai PC-khez képest kevésbé gyors hardverrel is megpróbálkozzak úgy, hogy a játszható sebességet elérje az alkalmazás.

Így esett a választásom az nVidia Tegra készülékére.
A teljesítmény kielégítő:

  • az alkalmazást egy szálban futtatni nem tanácsos azonban
  • az animációt külön szálba rakva alaposan feljavul a helyzet
  • Bullet 2.7.6 számolja a fizikát bár igazából tesztelni még nem tudtam mivel nem voltak tárgyak
  • a modellek viszonylagosan magas felbontása láthatóan csak a CPU-t limitálja
  • mindezekkel együtt folyamatos a mozgás!

 

És végül egy screenshot:

 

 

 

 

 

 

 

 

 

 

Szólj hozzá!

Címkék: nvidia tegra opengl es

Kivel aludjunk az ablakban?

2010.03.15. 22:56 :: syam

A válasz attól függ mennyit akarunk. Ha sokat akkor elegendő a Sleep függvény is. Amennyiben ennél pontosabbak szeretnénk lenni nem tanácsos ezt használni, mert sajnos az időzítő ahhoz nem elég precíz (~ 20ms a pontosság). Így a Sleep(1) utasítás 1 - 20 millisec közötti időtartamra altathatja el a szálat.
Helyette a QueryPerformanceCounter és QueryPerformanceFrequency párost érdemes használni while ciklussal kombinálva, amelyben a bátrabbak elhelyezhetnek egy Sleep(0) hívást is. Az usleep win32 (egyik) megvalósítása is így csinálja...

 

Szólj hozzá!

Címkék: multithread

Demo 5 - update

2010.03.15. 22:32 :: syam

Ismét egy frissítés.

  • Sajnos az időzítés pontatlan volt a kódban, ezért az animáló szál nem mindenütt futott ugyanúgy.
  • Súlyos VBO hiba lett javítva.
  • Most már az engine külön kezeli az egymagos és többmagos rendszereket; a config.ini-ben az animation_fps beállításnak csak többmagos esetben van hatása.

Link: www.inspekcio.hu/indigo_illusions/demos/sakura_demo_2010_03_15.zip

 

Szólj hozzá!

süti beállítások módosítása