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

Játékanatómia - a "csontanim"

2009.04.06. 19:00 :: syam

Valószínűleg bárki, aki 3d-s játékot vett párszor a kezébe és kutatott kicsit utána könnyen találkozhatott a "csontanim" kifejezéssel. Tudomásom szerint az első játék, amely ezt alkalmazta a half life első része volt. Összehasonlításul az addigi játékok ún. keyframe alapú animációt alkalmaztak vagyis minden lehetséges mozdulat előre ki volt számolva és így eltárolva. Az animálási folyamat mindössze egy lineáris (esetleg négyzetes) interpolációt igényelt két keyframe között. Ez a cpu számára nem jelentett túlzottan nagy terhet; hátránya abból eredt, hogy minden(!) lehetséges mozgásformát és (jobbára azok kombinációit is) le kellett tárolni. Köztes megoldást jelentett a quake3 modell formátuma, amely a modellt több részre (általában 3: lower, upper, head) osztott és ezek ún. tagekkel kapcsolódtak egymáshoz függetlenül szabadon kombinálhatóan.

Mint említettem az első áttörést a half life hozta, amely már szabad jobbra-balra forgást tett lehetővé úgy, hogy a modell egy egységes polygonháló volt és az animáció fázisait realtime számolta a cpu. Ehhez két dologra volt szükség, amely mindmáig a csontvázra épülő animáció alapját jelenti:

  • egy, a biológia csontvázhoz hasonlóan felépített csontvázra, ahol a csontok egy hierarchia szerint kapcsolódnak egymáshoz
  • az ehhez a csontvázhoz készült modellre, amelynek vertexei tárolnak plusz információkat: melyik csonthoz tartozik és mekkora arányban hat a vertexre az adott csont (ezen arányok összege értelemszerűen 100%). Amikor minden csont alaphelyzetben van, azt állapotot hívják base pose-nak.

 

A modell aktuális megjelenését valósidőben kell ki és újra számolni a csontok térbeli pozíciója, orientációja és hierarchiája alapján. Érdemes ezt ugy elképzelnünk, hogy magát a csontvázat animáljuk és számoljuk ki a térbeli helyzetét, majd ezt a csontvázat "alkamazzuk" a modellre. Ezt az "alkalmazást" nevezik vertex skinningnek, mert a hatása olyan, mint amikor a bőr mozog egy testen.  Mivel minden frame-ben újraszámolhatjuk a csontvázat ennek köszönhetően ez a technika széleskörű manipulációt tesz lehetővé. Egészen odáig, hogy fizikai szimulációt segítségül hívva inverz kinematikát is építhetünk rá. Ha jól tudom az első, ezt leginkább kihasználó játék a trespasser volt.

Animációtól ill. programtól függ, hogy egy vertexhez hány csont tartozhat. A half life esetén ennek értéke mindössze egy volt (hasonlóan a milkshape formátumához). A cpuk teljesítményének növekedésével folyamatosan nőtt ez a szám: a ghoul2 motor már max. négyet engedélyezett míg a doom3 engine motor már nem tartalmaz korlátozást.

A vertex skinningnek létezik hardveres implementációja (matrix palette skinning) (amelyet a vertex processor végez) hiszen ez a technika nagyszerűen általánosítható. Ha belegondolunk ez az animációs technika mindössze egy "mátrix halmazt" (matrix palette) és megfelelő "vertex - mátrix" súlyozott összerendeléseket igényel, amelyekből  - átadva ezeket a gpunak - vertex feldolgozáskor kiszámolható a vertex pozíciója.

Igen elvetemült formája a "csontanim" hardveres implementálásának az ún. render to vertex buffer (amelyet viszont a fragment processor végez). Ilyenkor a szükséges adatokat többnyire float textúraban tároljuk és egy elegendően nagy téglalap renderelésekor egy fragment programmal végeztetjük el az animálást, amely eredménye a color bufferbe kerül (vagyis itt is szükséges float pontosság).  Végeredményül ezt a buffert közvetlenül ( ún. superbuffer segítségével) vagy közvetett módon (fbo-pbo-vbo útvonalon esetleg vertex texture fetch, bár ez jelentősen lassabb) felhasználjuk, mint vertex buffert. Tudomásom szerint ez a technika nem igazán terjedt el a gyakorlatban.

Szólj hozzá!

Címkék: csontváz quake3 keyframe vertex skinning inverz kinematika ghoul2 matrix palette skinning render to vertex buffer superbuffer vertex texture fetch

A bejegyzés trackback címe:

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

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