2D Bone Animation Tool - Bonim8or

    • GEX

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 2D Bone Animation Tool - Bonim8or



      Guten Abend meine Freude!
      Nach vielen Wochen des Rumgammelns und der Tatenlosen Momente, habe ich mich endlich wieder an mein Projekt ("Fatman") gesetzt und es komplett neu umgerüstet. Dabei ist mir die Idee gekommen ein Animationseditor zu schreiben, der es ermöglicht erstellte Skelette zu animieren - kurzgesagt ein Bone Tool (für den Zweidimensionalen Raum).

      Wozu habe ich das gemacht?
      Nun ja, es ist so, da mein Projekt ziemlich viel Festplattenspeicher sowie RAM braucht, habe ich mich dazu entschlossen eine Lösung für das Dilemma zu finden und hab mich dazu entschlossen das Ding hier zu programmieren. Der Vorteil von skeletal animations, ist der, dass man, zum einen ein Skelett hat und darauf beliebige Animationen (falls diese für das Skelett gedacht sind) anwenden kann. Man braucht, wenn man zum Beispiel zwei Charakter hat (mit den selben Knochen), die im Prinzip die selben Animationen haben, nur einmal eine Animation zu erstellen und kann diese dann auf beide anwenden. Ein anderer Vorteil ist, dass man ein Haufen Speicher sparen kann, da man, wie schon gesagt nur eine Animation laden muss und diese dann auf ein Skelett anwendet. Und genau darum ging es mir letztendlich. Bone Animationen bringen noch andere Vorteile mit sich, wie:

      • Körperteile unabhängig voneinander drehen, strecken und zerren
      • Aufgrund von linearer Interpolation, braucht man nicht Frame für Frame zu animieren
      • Dies hat zur Folge, dass man flüssige Animationen bekommt

      Das einzige Problem könnte evtl. die Geschwindigkeit sein. Aber dazu später mehr, wenn das Tool hier hochgeladen wurde.
      Ok, genug gelabert. Ich kann euch im Moment nur mit einem Video beeindrucken, da ich noch einige kleine Bugs entfernen will. Aber ich denke, dass ich bis zum Wochenende eine Beta des Programms hier hochladen kann. Scripts um die Skelette und Animationen in ein Spiel zu importieren habe ich auch schon fertig, aber ich muss noch ein wenig mit den Spiegelungen an der X- und Y-Achse kämpfen.

      Video über den Editor

      Edit:
      Video über das Einbinden in Projekte.

      Download:
      • Editor
      • Example. Hier sind alle Dateien enthalten, die ihr braucht. Angaben zum Aufbau sind da und jede Funktion der Extension ist erläutert. Schaut euch einfach die PDF-Datei an. Im Example ist alles ausführlich Kommentiert.

      Ich hoffe doch, dass irgendjemand hier sowas gebrauchen kann.

      MfG
      Dateien
      • Bon-Example.rar

        (645,12 kB, 716 mal heruntergeladen, zuletzt: )

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von Trixt0r ()

    • Sieht sehr gut aus :o
      Hab auch schon nen Kommentar in Youtube geschrieben :p
      Vielleicht werd ichs brauchen, aber ich weiß nicht ob das für mich sinnvoller wäre, als jeden
      Frame zu pixeln, da ich 32px, 64px und bei bossen evt. größere Sprites benutze. Eig. recht kleine.


      mfg
    • Tice schrieb:


      Wird es noch eine Funktion geben, um die gesamte Animation als *.png zu exportieren?

      Jo, die Funktion gibt es schon. Man kann die Animationen als Strip oder als Bildsequenz (als eine Bilddatei pro Bild) exportieren.
      Sorry fuer die Quali. Ich werde noch in einem anderen Video zeigen, wie man das Zeug in ein Projekt einbinden kann. Dann auch mit besserer Bildqualitaet. ^^

      Danke fuers Feedback!
      MfG

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • sehr schön! und wirklich nützlich, besonders für die, ohne Geld für Adobe Flash :)

      Gibt es nur die Möglichkeit Bilder zu importieren, oder auch im Programm zu Zeichnen?
      - Sagen wir mal: eine Zeichnung in Gruppen unterteilen und diese dann Bones zuweisen.
      als ähnlich wie die "Vertex Group" Funktion in Blender.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von domis4 ()

    • domis4 schrieb:

      Gibt es nur die Möglichkeit Bilder zu importieren, oder auch im Programm zu Zeichnen?
      - Sagen wir mal: eine Zeichnung in Gruppen unterteilen und diese dann Bones zuweisen.
      als ähnlich wie die "Vertex Group" Funktion in Blender.
      Nee, sorry. Man kann nur Bilder importieren. Ich hab erstmal überlegt, so ein Feature einzubauen, aber das war mir dann doch zu stressig. Vielleicht werde ich mal irgendwann, wenn Zeit da ist, sowas einzubauen.
      Man kann aber nicht nur einzelne PNG's (Bitmaps, whatever) importieren, sondern auch gespeicherte Game Maker Sprites (also .gmspr). Das hat dann den Vorteil, dass man den image_index ändern kann, z.B. für eine Drehung eines Körperteils.

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Neuigkeiten

      So!
      Wie versprochen gibt es eine Beta von meinem Tool. Seid auf der Hut, da ist noch ein Haufen an Bugs, die dem eigentlich Erstellen eines Skeletts und dem Animieren nicht im Weg stehen.
      Bitte sagt mit bescheid, wenn ihr einen Bug findet und sagt mit wie ihr den hervorgerufen habt.
      Für die Leute, die sich interessieren, wie die Dateien aussehen, müssen sich nur die Scripts skeleton_load und animation_load anschauen. Um die Dateien zu laden, bruacht ihr auf jeden Fall die Arch.dll.

      So, bin dann mal wieder weg ;)

      MfG

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Im ersten Post natürlich. Habs vergessen zu erwähnen. X(

      Edit:

      famous schrieb:

      Macht schonmal einen guten Eindruck. Allerdings wirken die Mannschgerl dann bei einfachen Sprites sehr zusammengesetzt wenn sie nicht nur eintönig wären. Da wäre es dann in Verbindung mit einer Physik Engine sinnvoller.

      Ansonsten könntest du auch die Schnitzstellen verschmelzen lassen.
      Ich hab es bewusst nicht implementiert, weil wenn ich die Schnittstellen verschmelzen lassen wuerde, wurde das ganz schoen an der Performance ruettelen (besonders beim GM). Ausserdem waere das dann alles unnoetig kompliziert. Ich hab extra die Moeglichkeit eigebaut, fuer jedes Gelenk einen Sprite zu laden (was in Form eines Kreises am besten passt). Das sollte helfen, die unnschoenen Stellen zu verschoenern. Ansonsten kann man auch, wenn man die Koerperteile anfertigt, sie so zeichnen/pixeln, dass bei einer Drehung kein Uebergang zu sehen ist. Muss man halt ausprobieren. Ich sehe in dem Punkt eigentlich nicht so ein grosses Problem.
      Zu der Physik-Engine: Ja, ich hab auch schon ueberlegt, das ganze mit der ExtremePhysics-Engine zu kombinieren, wird aber wohl noch etwas dauern. Wer will, kann es ja fuer mich uebernehmen. :P Solle eigentlich nicht allzu schwer sein.

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Trixt0r ()

    • @ghost: Das Problem kenn ich, aber ich weiß nicht woran es liegt. Ich nehme an, dass es an der MaxWinAPI 2 liegt. Jedenfalls hab ich eine aktuellere Version im ersten Post verlinkt. Bei der hatte ich bis jetzt noch keinen Absturz (hab schon mehr als 30 Animationen für mein aktuelles Projekt erstellt). Versuch mal die.

      famous schrieb:

      Die Performance des GM sollte dir dabei keine Grenze setzen.
      Witzig.

      Btw arbeite ich gerade daran das ganze Zeug in eine DLL zu packen, da es mit normalen GML Code ziemlich an der Performance nagt.

      MfG Trixt0r

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Habe weiter dran rumgebastelt und noch mehr seltsame Fehler gefunden. Als Grundlage verwende ich deinen Dummy.
      1. Wenn ich nun den Upper-Left oder Right Arm ersetze ist er praktisch "falschrum" gedreht. Wenn ich jetzt den Dummy speicher und neu lad, ist er wieder richtig.
      2. Die Funktion um einen bestimmten bone zu finden funktioniert nicht richtig. Wenn ich den Lower Right Arm will, spuckt er mir den linken Fuß aus.
      3. Manchmal erhalte ich beim umherlaufen "negative array index". Habe das Problem aber selber gelöst indem ich im Bone Update-Skript "frame" jeweils mit "max(frame, 0)" ersetzt habe.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ghost ()

    • ghost schrieb:

      3. Manchmal erhalte ich beim umherlaufen "negative array index". Habe das Problem aber selber gelöst indeme ich im Bone Update-Skript "frame" jeweils mit "max(frame, 0)" ersetzt habe.
      Oh, dann hatte ich noch die alten Scripts drin.

      ghost schrieb:

      1. Wenn ich nun den Upper-Left oder Right Arm ersetze ist er praktisch "falschrum" gedreht. Wenn ich jetzt den Dummy speicher und neu lad, ist er wieder richtig.
      Komisch. Schau mal unter dem Tab "Sprites" nach, dort kann man den Winkel des Sprites abändern. Oder man umgeht es, indem man von Anfang an die Sprites richtig rum dreht und dann in den Editor lädt.

      ghost schrieb:

      2. Die Funktion um einen bestimmten bone zu finden funktioniert nicht richtig. Wenn ich den Lower Right Arm will, spuckt er mir den linken Fuß aus.
      Dazu kann ich dir nix sagen. Ich weiß nicht genau was du meinst. Ich tippe mal auf den Overview der Bones? Da kann ich aber nix für, da macht die MaxWinAPI Stress.

      So, wie der Editor jetzt ist, reicht es für mich zum Arbeiten, aber anscheinend nicht für andere Benutzer. xD
      Ich werde auf jeden Fall noch weiter an dem Editor basteln oder vllt. in C++ oder C# umschreiben, da mir nicht ganz geheuer ist, was die MaxWinAPI da genau macht und wie manche Bugs (hier nicht erwähnt) Zustande kommen.
      Danke für die Rückmeldung, ghost. Werde mich demnächst dran setzen und die Bugs beheben.

      MfG

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Ich hab z.B. die Animationen als einzelnes GM Objekt definiert, was die ganzen Daten für eine Animation beinhaltet. Das ist nicht sehr schön, da der GM, glaube ich, (ich weiß es nicht) durch diese Objekte iterieren muss. Dann hab ich noch die Bones, die in jedem Step aktualisiert werden müssen, die mit lengthdir_x und lengthdir_y arbeiten. Und wenn ich da jetzt haufenweise Skelette und Animationen in einem Raum laufen habe, wird das ein großartiges Rumgelagge. Von daher macht es ziemlich viel Sinn eine DLL dafür zu schreiben, wo ein kompilierter Code viel schneller ausgeführt werden kann, als GML. Ansonsten macht die ganze Bone-Animation hier keinen Sinn.

      Schnittstellen werde ich nicht verschmelzen lassen, da es für meine aktuellen Zwecke nichts bringt. Später werde ich mich vllt. daran setzen.
      Edit: Wie ich die Verschmelzungen technisch anstelle weiß ich, aber im Moment macht es für mich keinen Sinn. Es würde nur den Release meines aktuellen Games verzögern.
      MfG

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Es wäre sinnvoll animationen als .gif datei abzuspeichern und einzelbilder als .png oder ein Tutorial wie es mit dem Game Maker und der DLL genau funktioniert weil wenn ich
      die .gmk öffne verstehe ich nur bahnhof vorallem weil ich nicht weis was ich mit den ganzen funktionen anfangen soll. Ein Tutorial wäre dafür schon sehr hilfreich aber würde
      nicht reichen alles einfach in den game maker als sprite zuladen etc.?? Für meine Zwecke würde dies bereits ausreichen. Ich könnte mir vorstellen mit dem Programm in Zukunft
      nämlich zuarbeiten weil es sehr einfach ist und vorallem kostenlos.. Fehlt nur noch das Exportieren bzw. ein Tutorial für das einbinden in game maker.

      MFG: Mar96K
    • @mar96k:
      Man kann die Animationen als .png exportieren. Schau mal unter "File". Da kannst du jedes Bild als einzelne Datei speichern oder als Strip, aber nur dann, wenn die Animation mindestens zwei Frames hat.
      Ich dachte, mit dem Example wäre klar, wie man die Animationen einbindet. Fürs Tutorial fehlt mir im Moment Zeit. Sorry. Bei Gelegenheit werde ich eins machen, oder jemand anderes, der mein Werk versteht, kann ein Tutorial erstellen .:P

      MfG

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
    • Bonim8or - GEX

      Soooooo, endlich bin ich fertig geworden mit der Extension. Hat sich doch gelohnt, denke ich. 500 fps mehr, ist doch schon ne ganz ordentliche Ecke schneller als vorher.
      Im ersten Post ist ein Example, das euch zeigt, wie ihr das ganze Zeug benutzen könnt.
      Schaut euch die PDF-Datei an (Vorsicht, sind 10 Seiten API-Dokumentation), wenn ihr wissen wollt, wie das System aufgebaut ist und welche Funktionen es alles gibt.
      Ich habe nur eine .gex erstellt,. Leute, die noch mit einer GM-Version unter 7 arbeiten, müssen sich die Scripts selbst schreiben. Sorry, bin zu faul um die ganzen Scripts nochmal zu schreiben. Ladet euch dazu am besten den GM-Extension-Maker runter und öffnet die .ged-Datei.
      Wenn ihr ein Projekt erstellt bzw. ein Spiel veröffentlich, mit dieser Extension, dann müsst ihr immer die libgcc_s_dw2-1.dll und die archive.dll im Verzeichnis der .exe haben, da ich die DLL mit MinGW kompiliert hab.
      Getestet habe ich die Extension nur mit dem GM 8, aber ich denke unter GM 7 und 8.1 sollte es auch laufen, falls die file_ und draw_ Funktionen dieselben sind.
      Für mein aktuelles Projekt, läuft die Extension sehr schön und auch ohne Probleme.
      Falls irgendwelche Probleme auftauchen, sagt mir bescheid.

      Edit: Nochmal Danke an alle , die mir mit meinen C++ Problemen geholfen haben!

      Haunse rein.
      MfG Trixt0r

      Albert Einstein schrieb:

      Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.