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

április 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

Játékanatómia - Trespasser és Jurassic Park: Operation Genesis

2015.02.02. 02:07 :: syam

Ismét két őskövület (1998 és 2003), amelyek közül az első izgalmasabb ill. érdekesebb. Talán van még aki emlékezik az első névre, de amit szerintem érdemes róla tudni: technológiailag zseniális volt, de maga a játék megvalósítása borzalmas lett - kivéve a rajongóknak, akik viszont még ma is aktívak.

A játékot karszimulátornak is csúfolták hiszen a melleinken kívül csak a jobb karunk volt főhősnőnkből látható.
A mellünk szerepe az életerőnk kijelzése volt - azt egy tetovált szív jelezte. HUD nem volt - így a fegyverünk tárának állapotát pedig szóban közöltük magunkkal.
A karunk szerepe a tárgyakkal történő interakció kivitelezése volt. Az ehhez szükséges mozgást - a játékok történelmében elsők között - inverz kinematika számolta, mint ahogy a többi állat mozgását is az AI által vezérelve.
Még mielőtt a forráskódra térnénk át érdemes az alábbiakat kiemelni:

  • az engine szintén az elsők között volt ami valódi fizikai engine-t használt (bár csak egyszerűsített szimulációra volt képes)
  • real-time Foley generálta a hangokat (röviden: kétszer nem hallhatta az ember ugyanazt a zörgést, csattanást stb)
  • nagy külső tereket tudott renderelni, aminek hatékonyságát occlusion cull-lal növelte occluderek felhasználásával
  • árnyék használata - nem valódi depth shadow map csak egyszerű projektív textúra a talajon
  • az engine a 3D gyorsítók hajnalának idejében készült vagyis szoftveres renderelésre volt berendezve

És amit a forráskódjából kihámoztam

  1. Elég sok a káromkodás és szitokszó. Legtöbbször a kommentekben, de néha a változónevek maguk is azok.
  2. Kb. 3 héttel a játék hivatalos kiadása előtt még volt változtatás a kódban.
  3. Tele van mágikus számokkal különösen az IK-val kapcsolatos kódrészekben.
  4. Rengeteg kikommentezett duplikált kód van benne. Olyasmi lehet ez, mint amikor az ember próbálgatja beállítani az együtthatókat és a biztonság kedvéért meghagyja amiket már megpróbált. Itt pedig rengeteg együttható volt.
  5. A file formátumot kezelni elég körülményes mivel aszinkron volt a file kezelés. A neve GROFF és van benne Section, SectionList, RelocationRecord, Relocation, SymbolEntry stb. Ezenkívül többféle formátuma is volt.
  6. Animációhoz a csontváz információ szövegesen van elhelyezve file-ban metaadatként szóval azzal nem foglalkoztam (inverse base pose mátrixról nem is mertem álmodni).

Végül oda jutottam, hogy bármennyire izgalmas is ez a téma a meshek beolvasásánál abbahagyom.
Íme a T-rex és raptorok a demóból placeholder textúrával:

shot_0309

 

Mivel mindenképp szerettem volna dinókat látni ezért egy javaslatot követve vizsgálódni kezdtem a címben említett második játék (JPOG) után. Ennek a forráskódjához nem volt szerencsém azonban a Trespasser rajongók készítettek leírást az engine által használt file formátumhoz. Így tehát magát az engine-t (és a játékot) nem ismerem, csak bizonyos file-jait.
Minden számomra szükséges információt ki tudtam nyerni a demó file-jaiból: meshek, textúrák (ezek legtöbbször DXT1 vagy RGBA5551), csontváz.

shot_0368

A csontváz animálását - a Trespasser által ihletve - IK-val oldattam meg.

Ám ennek a projektnek is volt egy igen izgalmas része.
Nem volt egyértelmű, hogy hol és hogy tárolja (vagy tárolja-e egyáltalán) a per-vertex csontadatokat (súlyok, indexek) a file. Ezt úgy derítettem ki, hogy a leírásban szerepelt a per-vertex adatok között két darab "unknown" 32 bites integer. Arra gondoltam, hogy megnézem ezeket mint 2x4 darab byte. Összegyűjtöttem ezeket és láttam, hogy az egyik négyes byte csoportban a számok variációja pont annyi, mint a csontok száma. Akkor nyilván ezek lesznek a csontindexek. A másik csoportban pedig súlynak kell lennie: elosztottam az ebben a csoportban szereplő értékeket 255-tel és kijött, amit vártam: egy csoporton belül ezen értékek összege mindig 1.0. 

És hogy mindennek mi volt a célja az egyelőre titok :)

Szólj hozzá!

Címkék: ai csontváz trespasser vertex skinning inverz kinematika vertex attributum occlusion cull

A bejegyzés trackback címe:

https://sakura7.blog.hu/api/trackback/id/tr367132125

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.

Nincsenek hozzászólások.
süti beállítások módosítása