3D Animationen: Welche Methode?



  • Tja ich mal wieder... mit na animations Frage..

    Okay gleich mal drauf los: Wie animiere ich am besten ein 3d Modell (format ist ms3d ascii) nach dem letzen Post hab ich ja festgestellt das die beste Methode mit vertex buffer objects ist, das ist auch die beste für dieses format denke ich...

    Tja nur wie mach ich das am besten:
    1. Alle Daten doppelt anlegen und dann alle daten transformieren (also immer 1.Frame und dann transformieren auf ein bestimmtes Frame das halt gewünscht ist) dann alles auf den Vram laden.

    2. Einen Haufen Frames vorkalkulieren (oder alle) und dann wechseln (sollte ja gar nicht so viel speicher brauchen) im Ram

    3. oder in den VRam vorkalkulieren (eher schlechte idee, oder?)

    Oder gibts da ne bessere Idee die ich vergessen habe?

    Hoffe da kann mir wer helfen der mehr erfahrung hat... aja noch am schluss ich benutze Opengl (sollte aber eh bei den vbos rausgekommen sein...)

    Kriterium für die beste Methode ist bei mir Performance; die engine die ich grad bastle ist recht einfach geschrickt soll aber wenigstens genug power bringen...(na hoffentlich wird das was..)
    cu Manuelh87



  • Sehr schön geht es mit Skins & Bones. Du hast dabei die Position der Vertexe des Skins relativ zu den Bones gegeben und wenn du am Skelett was änderst, werden die Transformationen auf die Vertexe übertragen. Man kann die Animationen des Skeletts dann sehr platzsparend als eine Handvoll Transformationen beschreiben und dazwischen interpolieren.
    Mit Milkshape kann man auch relativ einfach solche Models erstellen, allerdings unterstützt Milkshape nur das direkte Koppeln eines Vertex an einem einzigen Bone. Für professionelle Animationen würde man das Vertex an mehrere Bones koppeln, mit verschiedenen Gewichtungen, dann kann die Haut realistisch über das Kniegelenk gleiten. 😉



  • Ja mir reicht eh das was milkshape da hat... denn meine engine soll nicht unglaublich komplex sein; aber schnell und einfach zu verwenden..
    Nur mein größtes Problem ist ob ich dann vor jeden frame die neuen vertex daten raufladen soll oder ob ich da schon vorrechnen und ladne soll, das ist grad mein größtes problem... aber ich schätze das geht schon in Ordnung wenn ich einfach vor jedem frame die position jedes vertexes errechne und dann alles in den vram pampen... also mit den vbo's...

    naja danke mal, wird schon klappen!
    cu Manuelh87



  • Zum Einstieg in Animationen empfehle ich dir, mit dem MD2 Format (Quake2) anzufangen. Das ist wirklich total easy. Das Format lässt sich sehr leicht lesen und die Animations-Prozesse sind einfach zu verstehen.
    Bones sind schon etwas komplexer.


  • Mod

    bei ein/zwei objekten ist es vielleicht ok sie auf der cpu zu animieren, sowas ist aber recht performancefressend. wenn du performant ne größere menge von average-poly-objekten animieren möchtest (10 bis 50), kann man das sehr gut mittels vertexprogramms machen. das langsame ist nicht das transformieren, sondern das aushebeln des asynchronen arbeit von gpu und cpu.
    in die constantregister solltest du locker 30 4x3 matrizen reinstecken können, somit bis zu 30 bohns animieren können, pro vertex kannst du dann 4bones/matrices selektieren und dann 4vertexweights haben.

    alternativ kann man für simple animationen, besonders wenn sie kleine loops sind z.b. hüpfender ball, blendshapes benutzen, dabei speichert man mehrere animationsstufe in einen vertexbuffer ab und blendet zwischen den stufen. sowas ist bei z.b. RTS sehr nützlich wo man sehr viele gleichartige einheiten hat, von denen viele die selbe animation durchführen, denn dann kann man mehrere von diesen mänchen in einen vertexbuffer stopfen und mittels der const register jedem ne eigene animationsphase, position und ausrichtung geben. so ist es dann möglich mehrere tausend low-poly-objekte flüssig zu bewegen/animieren.

    du mußt also immer wissen was du machen möchtest um das beste animationssystem zu nutzen. einen egoshooter würde man heutzutage nicht mehr mit blendshapes machen (selbst wenn Q3A das noch so machte). und ein RTS mit >50einheiten würde viel zeit verschwenden wenn es softwareskinning hätte. bei >2000 objekten hat man schon fast keine wahl als sie zu größeren clustern zusammenzulegen da selbst ne 2ghz cpu kein flüssiges spielen (30hz) mehr erlaubt bei über 2000, auch nicht animierten, objekten (das limit ist da die zahl der renderaufrufe, wobei das bei oGL um einiges besser läuft als bei directX, jedenfalls auf nv-karten laut nv selbst).

    rapso->greets();


Anmelden zum Antworten