Skip to main content
Go to Editor

Wissensdatenbank

Learn how to optimize your Spine 2D animations, reduce file size, and improve performance

BeispieleBetrachterDatenFPSLeistungPipelinesPlusPremiumSocketsTypenUIVerbindungenVideoYouTubeabonnementanfängeranimationanleitungarbeitsablaufdiagrammeergebnisseexportguidekonzeptemetrikenoptimierungplaybackpreiserecorderrecordingspeicherstatistikensteuerungtabelletimelineverlustbehaftetverlustfreivideoviewer

Erste Schritte: Basis-Arbeitsablauf

anfängerarbeitsablaufanleitung

Diese Anleitung hilft Ihnen, schnell mit dem JSON Optimizer zu starten.

  1. Projekt laden: Verwenden Sie den InputNode, um Ihre .json-, .atlas- und .png-Dateien zu laden.
  2. Preset wählen (Plus-Modus): Im Plus-Modus wählen Sie im rechten Panel eines der integrierten Presets (z. B. "Basic Fallback"). Dadurch wird automatisch ein Optimierungs-Graph erstellt. Im Free-Modus erstellen Sie einen minimalen manuellen Graphen: InputNodeQuantizerNodeOutputNode.
  3. Graph ausführen: Klicken Sie auf die Schaltfläche "Graph ausführen".
  4. Ergebnisse vergleichen: Wechseln Sie zum Tab "Ansicht", um die Original- und die optimierten Animationen visuell zu vergleichen.
  5. Änderungen prüfen: In den Tabs "Ergebnisse" und "Statistiken" finden Sie detaillierte Informationen dazu, welche Schlüssel geändert oder gelöscht wurden.

Socket-Typen & Datenfluss

SocketsTypenDatenVerbindungen

Dieser Artikel erklärt die Datentypen, die von Sockets im Node-Graph verwendet werden, und was womit verbunden werden kann.

Schnellregel

Die meisten Verarbeitungs-Knoten arbeiten mit einem Spine Payload. Atlas-bezogene Knoten arbeiten mit einem Atlas Project oder Sprites. Verwenden Sie ValidatorNode, wenn Sie unsicher sind, welchen Typ ein Socket erwartet.

Socket-Typen

  • Spine Payload — laufzeitfreundliche Darstellung des Spine-Projekts, die von den meisten Verarbeitungs-Knoten verwendet wird.
  • Atlas Project — Atlas-Metadaten + Seitenbilder, die von Atlas-Knoten verwendet werden.
  • Sprites — entpackte Sprite-Bilder/Regions (Atlas Unpacker → Asset Viewer / Atlas Repacker).
  • JSON — originales oder rekonstruiertes Spine-JSON für Diagnose/Validierung/Diffing.
  • Changes — eine Liste/ein Stream von Diffs, die einige Optimierer erzeugen und die von Ansichts-/Reporting-Knoten genutzt werden.

Key → Typ → verbinden mit

Socket-Key (Beispiele)DatentypErzeugt vonVerbinden mit
payload, payload_in, payload_outSpine PayloadInputNode, die meisten Verarbeitungs-KnotenVerarbeitungs-Knoten (RDP/Spline/Refit/Quantizer/Cleanup/usw.), dann OutputNode.payload
original_jsonJSONInputNodeDiagnosticNode, JSONDiffNode.json_before, OutputNode.original_json, einige Atlas-Knoten (z. B. Repacker-Alpha-Modus)
reconstructed_json_outJSONOutputNodeJSONDiffNode.json_after, Validatoren/Fehlersuche
changesChanges-ListeEinige Verarbeitungs-Knoten + OutputNodeAnimationViewerNode (optional), Berichte/Fehlersuche
atlas_projectAtlas ProjectInputNode / Atlas-AnsichtAtlasUnpackerNode.atlas_project, OutputNode.atlas_project, Atlas-Filter
atlas_in, atlas_outAtlas Project (oder atlasbezogener Stream)Atlas-Knoten / FilterAtlas-Knoten, AtlasViewerNode, AtlasMergerNode (über seinen Multi-Input)
sprites_out, sprites_in, sprites_data_inSpritesAtlasUnpackerNode, FilterAssetViewerNode.sprites_in, AtlasRepackerNode.sprites_data_in
atlas_inputsMehrere Atlas ProjectsMehrere QuellenAtlasMergerNode.atlas_inputs (mehrere Atlanten verbinden)

Praktische Pipelines

  • Basis-JSON-Optimierung: InputNode → (optional: DiagnosticNode / Filter) → Optimierer (RDPNode, SplineNode, QuantizerNode, …) → OutputNode.
  • Atlas-Repacking: InputNode.atlas_projectAtlasUnpackerNode → (optional: AssetViewerNode) → AtlasRepackerNodeOutputNode.atlas_project/atlas_assets.

Abonnementpläne & Premium-Funktionen

abonnementPremiumPluspreise

re-polish bietet zwei Abonnementstufen für unterschiedliche Bedürfnisse.

Free-Plan

  • ✓ Basis-Knotengraph
  • ✓ JSON-Viewer
  • ✓ Timeline mit mehreren Tracks und anpassbarem Mix zwischen Animationen
  • ✓ Begrenzte Optimierungen
  • ✓ Spine-Versionen: 4.2, 4.1, 4.0, 3.8, 3.7

Plus-Plan ($5/Monat)

  • ✓ Alle kostenlosen Funktionen
  • ✓ Optimierungs-Toolkit für Keyframes, Kurven und Texturen
  • ✓ Physik in Keyframes backen
  • ✓ Gebackene Keyframes in Kurven bereinigen
  • ✓ Graph-Voreinstellungen
  • ✓ Priorisierter Support

Plus erhalten

Klicken Sie in der oberen Navigation auf Upgrade, dann:

  • Wählen Sie Get Plus
  • Sie werden zu Patreon weitergeleitet — schließen Sie das Abonnement ab
  • Kehren Sie zum Node-Editor zurück, während Sie mit demselben Patreon-Konto angemeldet sind, damit der Dienst die Verknüpfung prüfen und Plus aktivieren kann
  • (Optional) Geben Sie einen Aktivierungscode ein (für Sonderaktionen)

Grundkonzepte: Verlustbehaftet vs. Verlustfrei

konzepteverlustbehaftetverlustfreianfänger

Alle Optimierungsmethoden werden in zwei Typen unterteilt:

Empfehlung: Beginnen Sie immer mit verlustfreien Optimierungen. Verwenden Sie verlustbehaftete Methoden nur, wenn eine weitere Reduktion der Dateigröße erforderlich ist, und prüfen Sie das Ergebnis immer visuell.

Wie man Effizienz misst

anleitungmetrikenstatistiken

Um die Effektivität Ihrer Optimierung zu verstehen, achten Sie auf folgende Metriken:

  • Dateigröße: Die endgültige Größe der .json-Datei ist das Hauptziel der Optimierung.
  • Anzahl der Schlüsselbilder: Im "Statistiken"-Tab finden Sie Tabellen und Diagramme, die zeigen, wie viele Schlüsselbilder in jeder Animationssequenz entfernt wurden.
  • Visueller Vergleich: Verwenden Sie immer den "Ansicht"-Tab, um "Vorher"- und "Nachher"-Animationen zu vergleichen. Stellen Sie sicher, dass verlustbehaftete Optimierungen keine inakzeptablen visuellen Artefakte eingeführt haben.
  • Bericht in der "Ergebnisse"-Tabelle: Hier können Sie jede spezifische Änderung an Ihren Daten detailliert prüfen.

Viewer: Steuerungs-Panel

BetrachtersteuerungUI

Der Tab Ansicht legt ein Steuerungs-Panel über die Canvas. Es ist in drei Gruppen aufgeteilt:

Animationssteuerung

  • Animationen — wählt aus, welche Spine-Animationssequenz abgespielt wird.
  • Skin — wählt aus, welcher Skin angewendet wird.
  • Geschwindigkeit — Multiplikator für die Wiedergabegeschwindigkeit (0.1× → 3.0×).

Ansichtssteuerung

  • Ansicht zurücksetzen — stellt die Standard-Kamera-/Layout-Positionierung wieder her.
  • Ansichtsoptionen — numerische Versätze zur Positionierung der Vergleichsansicht: Abstand X / Abstand Y (Abstand zwischen Original/Optimiert) und Versatz X / Versatz Y (globaler Versatz).

Fehlersuche-Steuerung

  • Fehlersuchemodus — aktiviert Fehlersuche-Overlays (abhängig vom Runtime-Support).
  • Physik aktivieren — schaltet die Physiksimulation um (wenn das Skelett Physik nutzt).
  • Beschriftungen — schaltet das Beschriftungs-Overlay um.

Viewer: Performance-Panel

LeistungFPSspeicherUI

Das Performance-Panel zeigt Laufzeitmetriken in Echtzeit für das/die aktuell abgespielte(n) Skeleton(s).

Echtzeit

  • FPS — Frames pro Sekunde, gemessen vom Monitor.
  • Frame Time — Zeit pro Frame in Millisekunden (niedriger ist besser).
  • FPS chart — die letzten 120 Samples als Balken dargestellt.

Skeleton-Metriken

  • Visible Slots — wie viele Slots im letzten Sample sichtbar waren.
  • Avg. Visible — gleitender Durchschnitt sichtbarer Slots (stabiler als ein einzelner Frame).
  • Vertices — aktuelle Vertex-Anzahl für das Rendering.
  • Bounds (px) — aktuelle Skeleton-Bounds Breite×Höhe in Pixeln.
  • Avg. Bounds — gleitender Durchschnitt der Bounds.
  • Largest Texture — die größte Atlas-Seite (nach Abmessungen), die für das Skeleton erkannt wurde.
  • Texture Memory — geschätzter Gesamt-Texturspeicher für geladene Atlas-Seiten. Wenn verfügbar, zeigt das Panel zusätzlich eine Aufschlüsselung pro Seite (Dateiname, Abmessungen und geschätzte Größe).

Verbesserungen (wenn Optimized verfügbar ist)

  • Slot Improvement — vergleicht Avg. Visible zwischen Original und Optimized.
  • Memory Change — vergleicht Texture Memory zwischen Original und Optimized.

Viewer: Zeitleiste

viewertimelineanimationplaybackguide

Das Timeline-Panel ist ein andockbarer Animations-Sequenzer am unteren Rand des Viewers. Damit können Sie Animations-Clips auf mehreren Tracks anordnen, die Wiedergabe steuern und Übergänge in der Vorschau ansehen.

Tracks & Clips

  • Bis zu 4 Animations-Tracks — jeder Track entspricht einem Spine-trackIndex-Layer. Höhere Tracks überblenden sich über niedrigere.
  • Animation hinzufügen — klicken Sie auf die +-Schaltfläche auf einem Track, um die Animationsauswahl zu öffnen (mit Suchfilter).
  • Clips ziehen & Größe ändern — ziehen Sie den Clip-Körper, um ihn entlang des Tracks zu verschieben; ziehen Sie an den linken/rechten Kanten, um die Startzeit oder Dauer zu ändern.
  • Clips löschen — wählen Sie einen Clip und drücken Sie Delete oder Backspace.
  • Überlappungserkennung — überlappende Clips auf demselben Track werden rot hervorgehoben.

Wiedergabesteuerung

  • Abspielen / Pause / Stopp — Standard-Wiedergabesteuerung.
  • Vorheriger / Nächster — springt zum Anfang des vorherigen oder nächsten Clips.
  • Animationsgeschwindigkeit — Schieberegler von 0,1× bis 3,0×.
  • Auto-Stopp — die Wiedergabe stoppt automatisch am Ende der Timeline.

Übergangs-Mischung

  • Globale Mischdauer — setzt die Standard-Überblendzeit zwischen aufeinanderfolgenden Clips.
  • Individuelle Übergangs-Overrides — klicken Sie auf die Übergangsblase zwischen zwei Clips, um eine benutzerdefinierte Mischdauer festzulegen. Sie können individuelle Overrides auf den globalen Wert zurücksetzen.

Suchen & Scrubbing

  • Abspielkopf — ziehen Sie den Griff auf dem Zeitlineal oder klicken Sie auf das Lineal, um zu suchen.
  • Cursor-Zeitvorschau — beim Überfahren des Track-Bereichs wird die Zeit unter dem Cursor angezeigt.
  • Web Worker — Such- und Event-Berechnungen werden an einen Hintergrund-Worker ausgelagert für flüssige Performance.

Physik-bewusste Wiedergabe

  • Physik umschalten zwischen Update (aktive Constraints) und None (deaktiviert).
  • Beim Suchen wird die Skelettzeit vorgerückt, um Physik-Constraints korrekt einzuschwingen.

Multi-Skelett-Unterstützung

  • Zielpaar-Auswahl — jeder Track kann auf alle Paare (🌐 Alle Paare) oder ein bestimmtes Skelett ausgerichtet werden.
  • Pro-Skelett Position und Skalierung — X/Y-Versatz und Skalierungseingaben für einzelne Skelette.
  • Zeichenreihenfolge — numerische Eingabe zur Steuerung der Render-Layer-Priorität.

Debug-Darstellung

Sichtbarkeit umschalten für: Bones, Bone-Namen, Regions, Meshes, Hulls, Bounds, Paths, Clipping, Points.

Skin-Auswahl

Mehrfachauswahl-Kontrollkästchen für alle im geladenen Skelett definierten Skins.

Ansichtseinstellungen

  • Abstand X / Y — Lücke zwischen Skelett-Paaren.
  • Versatz X / Y — globale Viewport-Verschiebung.
  • PMA-Umschalter — Premultiplied-Alpha-Modus (Spine 3.x) oder Atlas-Alpha-Modus (Spine 4.x: auto / pma / bleed / none).
  • Skelett-Beschriftungen — Beschriftungs-Overlay umschalten.

Viewer: Aufnahme

viewerrecorderrecordingexportvideoguide

Der Recorder nimmt Spine-Animationen aus dem Viewer als Video, animierte Bilder oder Bildsequenzen auf.

Aufnahmemodi

  • ⚡ Schnellaufnahme — Echtzeit-Aufnahme mit MediaRecorder + captureStream(). Erzeugt nur WebM-Ausgabe. Schnell, aber auf Echtzeit-Framerate beschränkt.
  • 🎬 HQ Export — Offline-Frame-für-Frame-Rendering mit WebCodecs VideoEncoder + readPixels(). Unterstützt alle Formate und erzeugt pixelgenaue Ausgabe.

Ausgabeformate

  • Video: WebM, MP4, AVI, MOV
  • Animiertes Bild: GIF, Animated PNG (APNG)
  • Bildsequenz: PNG Sequence, WebP Sequence

Codecs (HQ Export)

VP8, VP9, H.264 (AVC), AV1, ProRes — verfügbare Codecs werden automatisch anhand der Browser-Unterstützung erkannt.

Qualität

  • Voreinstellungen: Niedrig (~1 Mbps), Mittel (~3 Mbps), Hoch (~5 Mbps), Verlustfrei (~20 Mbps).
  • Benutzerdefinierte Bitrate — Angabe in kbps für Feinsteuerung.

Timing

  • FPS: 24, 30, 60 oder benutzerdefiniert (1–120 fps).
  • Aufwärmphase — Sekunden für Physik-/Constraint-Einpendelung vor Aufnahmebeginn.
  • Pause danach — letztes Bild für eine festgelegte Dauer halten.
  • Letztes Bild einschließen — Umschalter.

Viewport & Zuschnitt

  • Zuschnitt aktivieren/deaktivieren — Zuschnittsbereich umschalten.
  • Zuschnittsrechteck — X, Y, Breite, Höhe in Spine-Weltkoordinaten.
  • An Paar anpassen — Zuschnitt automatisch an ein Skelett-Paar mit konfigurierbarem Padding anpassen.
  • Interaktives Zuschnitts-Overlay — Ecken/Kanten direkt im Viewport ziehen.

Auflösung

  • Skalierungsmodus — Prozent-Schieberegler (10%–400%).
  • Fester Modus — explizite Pixel-Maße (bis zu 4096px).
  • Berechnete Ausgabeauflösung wird live angezeigt.

Render-Optionen

  • Bones rendern — Debug-Bone-Overlay einschließen.
  • Bilder rendern — Attachment-Bilder einschließen.
  • Sonstiges rendern — Bounding Boxes, Paths.
  • MSAA — Kein / 2× / 4× Anti-Aliasing.
  • Glättung — Stufen 0–8 mit Algorithmuswahl (Bicubic / Bilinear).

Hintergrund

  • Transparent — automatisch deaktiviert für Formate ohne Alpha (z.B. GIF, JPEG).
  • Einfarbig — benutzerdefinierte Farbauswahl.
  • Schachbrett — visueller Transparenz-Indikator.
  • Alpha-Kanal-Unterstützung: VP9+WebM, AV1+MP4, PNG Sequence, APNG, WebP Sequence.

HUD-Overlay

  • Umschalter: Track-Info, Zeit, Frame-Nummer, FPS, Skelett-Beschriftungen.
  • Benutzerdefinierter Text — Wasserzeichen-Text.
  • Position — 4 Ecken (oben-links, oben-rechts, unten-links, unten-rechts).
  • Schriftgröße — 8–64px, plus Textfarbe-Auswahl.

Wiederholung & Multi-Skelett

  • Wiederholungsanzahl — 1–100 Schleifendurchläufe.
  • Zielpaar — ein bestimmtes Skelett oder alle aufnehmen.
  • Skelett-Modus — Kombiniert (einzelne Datei) / Separate Dateien (eine Datei pro Skelett).

Dateinamen-Vorlage

Vorlagentext mit Variablen: {project}, {animation}, {W}, {H}, {fps}. Eine Live-Vorschau des aufgelösten Dateinamens wird angezeigt.

Timeline-Integration

Der Aufnahmebereich erscheint als rot/orange gestrichelter Clip auf der Timeline. Ziehen Sie an den Kanten, um den Bereich zu ändern, ziehen Sie den Körper zum Verschieben, oder verwenden Sie die Einstellungsschaltfläche (⚙️), um die vollständigen Aufnahmeeinstellungen zu öffnen.

Ergebnisse-Tab

ergebnissetabelleoptimierung

Der Tab Ergebnisse zeigt detaillierte Optimierungs-Ausgaben.

  • Ergebnistabelle — eine Zeile pro Änderung in den JSON-Optimierungsergebnissen (z. B. welche Animationssequenz/Knochen/Eigenschaft/Schlüsselbild geändert oder entfernt wurde).
  • Sprite-/Atlas-Vergleich — wenn Texturoptimierung verwendet wird, vergleicht dieser Abschnitt Sprite-Größen und Packing-Ergebnisse.

Tipp: Verwende die Ergebnisse-Ansicht, um zu beantworten: Was hat sich genau geändert?

Statistiken-Tab

statistikendiagrammemetriken

Der Tab Statistiken fasst Optimierungsergebnisse als Diagramme und aggregierte Metriken zusammen.

  • Optimierungsdiagramm — visualisiert den Optimierungseffekt über den Datensatz (wenn JSON-Optimierungen Änderungen erzeugt haben).
  • Metriktabelle — wichtige Zahlen wie Original-/Neu-Größen und Reduktionsprozentsatz.
  • Textur-Packing-Statistiken — falls Atlas-Repacking verwendet wurde: Seiten, Gesamt-/genutzte Fläche, Effizienz und eine Aufschlüsselung pro Seite.

Nutze diesen Tab, um zu beantworten: Wie viel haben wir insgesamt verbessert?

Pipeline-Beispiele (Video)

VideoBeispielePipelinesYouTube

Unten finden Sie vollständige, praxisnahe Pipelines aus der offiziellen YouTube-Playlist.

Vollständige Playlist öffnen

Beispiele

Spine2D Experiments 1: Kurvenoptimierung mit RDP-Algorithmus — grundlegende Spine‑2D‑Optimierung: Der Ramer–Douglas–Peucker‑(RDP)-Algorithmus entfernt redundante Kurven-/Key‑Daten, um das JSON zu verkleinern. RDP kann wichtige Keys entfernen, daher Animationen immer prüfen und sensible Bones/Slots mit Filter‑Nodes vor dem RDP‑Node ausschließen. Watch on YouTube

Spine2D Experiments 2: Kurvenoptimierung mit Quantisierungs-Algorithmus — Quantisierung ist der sicherste Spine‑2D‑Kurven‑Optimizer: Das Runden von Werten (oft auf 1 Dezimalstelle) bringt sofortige Größenersparnis. Beispiel: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. Verwende den Quantizer‑Node als letzten Schritt vor dem Output‑Node, um die Optimierung zu fixieren; das Video zeigt Vorher/Nachher mit nahezu unveränderter Optik. Watch on YouTube

Spine2D Experiments 3: Kurven mit Spline- und Refit-Algorithmen neu aufbauen — Spline ist für gerade Segmente verlustfrei (entfernt redundante Zwischen‑Keys), während Refit verlustbehaftet, aber sehr leistungsfähig ist: es baut komplexe Abschnitte als eine einzelne Bézier‑Kurve neu auf. Diese Algorithmen sind ideal nach Physics‑Baking und Cleanup über den Schneider‑Node. Hinweis: Refit‑Iterationen über 100 können Minuten dauern, um die beste Kurve zu finden. Das Video zeigt beide Methoden und den %‑Optimierungsgewinn. Watch on YouTube

Spine2D Experiments 4: Redundante Daten mit Attachment-Visibility- und Cleanup-Knoten entfernen — strukturelle Spine‑2D‑Optimierung mit Attachment Visibility und Cleanup‑Nodes. Attachment Visibility deaktiviert Attachments, wenn Alpha auf 0 fällt, und stellt sie beim Einblenden wieder her, reduziert Draw Calls und entfernt redundante Keys. Cleanup entfernt logische Redundanzen: ungenutzte Color/Alpha‑Tracks, IK‑Rotations‑Keys, die vollständig von Constraints gesteuert werden, und Path‑Constraint‑Keys. Das Video zeigt, wie sich diese logikbasierten Optimierungen von der Kurvensimplifizierung unterscheiden. Watch on YouTube

Spine2D Experiments 5: Nichtlineare Pipelines (Filter & Merge-Knoten) — nichtlineare Spine‑2D‑Optimierung: splitte den Datenstrom mit Filtern (Animationssequenz, Bone, Slot, Parameter oder Skin), führe verschiedene Algorithmen auf parallelen Zweigen aus (z. B. aggressive Kompression für Körperknochen bei verlustfreier Gesichtsanimation) und kombiniere die Zweige mit dem Merge‑Node zu einem Skeleton. Dieser Arbeitsablauf geht über Input → Optimize → Output hinaus und lässt dich gezielt nur das optimieren, was optimiert werden soll. Watch on YouTube

Spine2D Experiments 6: Textur-Repacking & selektives Skalieren mit Custom-Knoten — fortgeschrittene Textur‑Optimierungs‑Pipelines: Die Atlas‑Unpacker/Repacker‑Nodes erlauben Entpacken, Größenänderung/Kompression und Repacking von Atlassen innerhalb eines Graphen – schneller als Standard‑Spine‑Arbeitsabläufe. Mit der nichtlinearen Pipeline kannst du Assets aufteilen, Charakter‑Texturen bei 100 % lassen und andere auf 25 % skalieren, dann alles wieder zu einem gemeinsamen Atlas zusammenführen. Atlas/Asset Viewer‑Nodes bieten visuelle Prüfung und Filterung von Assets und Atlassen in jeder Phase. Dadurch lassen sich Resize‑Ziele leichter festlegen, selektiv verarbeiten und als wiederverwendbare Vorlage kombinieren. Watch on YouTube

Spine2D Experiments 7: Sofortige Skeleton-Skalierung mit Scale-Knoten — End‑to‑End‑Spine‑2D‑Optimierung plus Skeleton‑Scaling. Der Scale‑Node ersetzt den mühsamen Spine‑Arbeitsablauf (Export/Import, Repack/Unpack, Pfade fixen) durch einen einzigen Graph‑Schritt: Zielgröße setzen, Ergebnis sofort im Viewport prüfen und in Echtzeit iterieren. Das Video verbindet Kurven-/Key‑Optimierung, Asset‑Processing und Skeleton‑Resizing zu einer schlanken Pipeline. Watch on YouTube

Spine2D Experiments 8: Public Beta Node Overview — Überblick über alle Nodes der Public Beta und wie re‑polish die Anforderungen von Animatoren und Entwicklern zusammenführt. Enthält das Bereinigen redundanter Keys, Bézier‑zu‑Linear‑Vereinfachung, Rundung zur Größenreduktion, Entfernen unsichtbarer Attachments, Bereinigung ungenutzter Eigenschaften, Erkennung nicht‑englischer Zeichen sowie Atlas‑Unpack/Filter/Scale/Repack. Der Dual Viewer validiert Ergebnisse mit Side‑by‑Side‑Visual‑ und FPS‑Vergleich. Public Beta live: re-polish.com. Watch on YouTube

Spine2D Experiments 9: Physics-Constraints in Keyframes backen — in diesem Video zeige ich meine neuesten Experimente zum Backen von Physics-Constraints in Standard-Keyframes. Der neue Bake-Algorithmus sorgt für: perfekte Loops (kein Jitter oder Sprung zwischen Start und Ende), optimierte Dateigröße (automatische Kurvenbereinigung hält die JSON-Größe nahe am Original) und Abwärtskompatibilität (gebackene Keys ermöglichen Spine‑4.2‑Physics-Animationen in Spine 4.1 oder sogar 4.0). Watch on YouTube

Nodes

Input

Importiert Spine-Projektdateien, reine JSON-Eingaben, Demo-Assets und ZIP-Pakete in den Graphen.

Zweck: Dies ist der Haupteinstiegspunkt für die meisten Workflows. Der Knoten liest JSON, Atlas und Texturen ein und normalisiert sie zu internen Daten, die nachgelagerte Knoten verarbeiten können.

Unterstützte Modi:
1. Vollständiges Projekt: JSON + Atlas + Texturen
2. Nur JSON: Skelett-/Animationsdaten ohne Atlas verarbeiten
3. ZIP-Paket: ein gepacktes Zip mit einem vollständigen Projekt
4. Demo-Assets: integrierte Beispieldaten für schnelle Tests

Hauptausgaben:
- **payload_out**: normalisierte Daten für Optimierungsknoten
- **original_json_out**: Quell-JSON zum Vergleichen oder Rekonstruieren
- **atlas_project_out**: geparstes Atlas-Projekt, wenn Texturen bereitgestellt werden

Picture Input

Fügt eigenständige PNG/JPEG-Bilder dem Viewport hinzu, damit Sie sauberere Vorschauen und Präsentationsaufnahmen erstellen können.

Zweck: Verwenden Sie diesen Knoten, um Bilder direkt im Viewport als Präsentationsebenen oder visuelle Hilfselemente zu platzieren. Er ist nützlich, wenn Sie eine Szene dekorieren, unterstützende Grafiken hinzufügen und Projektvorschauen vor Video- oder Demoaufnahmen hochwertiger wirken lassen möchten.

Ablauf: Laden Sie ein Bild und verwenden Sie dann die Viewport-Werkzeuge, um es zu skalieren, zu verschieben und seinen Z-Index anzupassen, damit es korrekt in Ihrer Komposition sitzt. So lassen sich ansprechende Showcase-Aufnahmen erstellen, ohne die eigentlichen Spine-Projektdaten zu verändern.

Dieser Knoten ist eigenständig und stellt keine Graph-Sockets bereit.

Output

Sammelt das Endergebnis und erlaubt den Download optimierter Daten als Einzeldateien, Dateisets oder Archive.

Zweck: Dient als Export-Zentrale für optimiertes JSON, Atlas-Daten, Texturen und Sprites. Der Node kann sowohl ein einzelnes JSON/Atlas/Texturen-Set als auch mehrere Dateisets verarbeiten. Wenn nur Sprites anliegen, kann er auch ausschließlich Bildresultate ausgeben, ohne ein vollständiges Spine-Projekt neu aufzubauen.

Exportoptionen:
- Dateien einzeln oder als ein einziges Archiv herunterladen
- Gepackte Ergebnisse oder ein Archiv mit entpackten Dateien herunterladen
- JSON kompakt oder in lesbarer Form exportieren
- Vollständige Spine-Projektdaten oder nur Sprite-/Bildresultate exportieren

Verkettung: OutputNode muss nicht das absolute Ende des Graphen sein. Sie können die Ausgänge in eine weitere Pipeline-Stufe einspeisen und dieselben Dateien erneut optimieren. In der Praxis wurde die Optimierung von Keys und Kurven mit bis zu 3 aufeinanderfolgenden Iterationen getestet.

Wichtige Ausgänge:
- **reconstructed_json_out**: Neu aufgebautes Spine-JSON
- **original_json_passthrough_out**: Original-JSON-Passthrough
- **payload_out**: Payload-Passthrough für weitere Verkettung
- **changes**: Gesammelte Optimierungsänderungen
- **atlas_assets**: Exportbereite Atlas-Assets

RDP

Vereinfacht Animationskurven (RDP).

Zweck: Reduziert die Anzahl der Schlüsselbilder in linearen oder nahezu linearen Animationssegmenten, indem Punkte entfernt werden, die auf einer Geraden zwischen zwei anderen liegen.

Goldene Regel: Standardmäßig deaktiviert. Sie schützt Kurven mit ausgeprägter Form (Fläche/Krümmung) davor, zu linearisiert zu werden. Nur für aggressivere Komprimierung nach visueller Prüfung deaktivieren.

Socket-Keys: payload_in, payload_out, changes

Spline

Spline-Optimierung für Animationskurven.

Zweck: Glättende Kurvenanpassung bei gleichbleibender visueller Qualität.

Socket-Keys: payload_in, payload_out, changes

Refit

Bezier-Refit: reduziert Schlüsselbilder durch Kurvenapproximation.

Zweck: Passt weniger Kurven an und bleibt dabei innerhalb einer Toleranz.

Socket-Keys: payload_in, payload_out, changes

Quantizer

Reduziert die Genauigkeit numerischer Werte in Schlüsselbilder und Kurven.

Zweck: Einfache, aber effektive Methode zur Reduzierung der Dateigröße durch Runden von Zahlen auf eine bestimmte Anzahl von Dezimalstellen.

Verwendung: Kann auf fast alle Animationsdaten angewendet werden. Wird effektiver bei höherer Schlüsselbild-Anzahl.

Vorsicht: Zu aggressive Quantisierung (geringe Genauigkeit) kann Zittern oder visuelle Artefakte in Animationen verursachen.

Cleanup

Führt verschiedene Bereinigungsaufgaben durch, um redundante oder unnötige Animationsdaten zu entfernen.

Zweck: Spezielles Werkzeug zum Entfernen bestimmter Arten redundanter Daten, die andere Optimierer möglicherweise übersehen.

Verwendung: Verbinden Sie Ihr Payload mit 'payload_in' und nehmen Sie das Ergebnis von 'payload_out'. Wenn Sie zusätzlich einen Report pro Änderung möchten, nutzen Sie auch 'changes'.

Socket-Schlüssel:
- Eingänge: payload_in
- Ausgänge: payload_out, changes

Derzeit unterstützte Cleanups:
1. **Remove Unused Color/Alpha Tracks**: Entfernt Color-/Alpha-Timelines für Slots, die während der Animationssequenz nie sichtbar sind.
2. **Remove Redundant IK Rotations**: Entfernt Rotations-Schlüsselbilder von Bones, die vollständig von einer IK-Constraint mit 100% Mix gesteuert werden.
3. **Remove Path Constraint Keys**: Entfernt Rotate-/Translate-Schlüsselbilder von Bones, die vollständig von einer Path-Constraint gesteuert werden (Mix-Werte bei 100%).
4. **Sanitize Non-English Characters**: Ersetzt nicht-englische Zeichen in Namen/Bezeichnern, um Probleme in nachgelagerten Tools zu vermeiden.

Scale

Skaliert alle numerischen Werte in Animations-Schlüsselbilder um einen angegebenen Faktor.

Zweck: Skaliert Animationsdaten gleichmäßig, nützlich für proportionale Skelett-Größenänderung oder Anpassung der Animationsintensität.

Verwendung: Mit Payload verbinden und Skalierungsfaktor einstellen. Werte über 1.0 vergrößern, unter 1.0 verkleinern.

Parameter:
- **Scale Factor**: Multiplikator für alle Positions- und Größenwerte.
- **Include Rotations**: Ob auch Rotationswerte skaliert werden (normalerweise deaktiviert).

Anwendungsfälle:
- Größenanpassung importierter Animationen an neue Skelettdimensionen
- Erstellen übertriebener oder subtiler Animationsvarianten
- Stapel-Skalierung mehrerer Animationen für verschiedene Charaktergrößen

Schneider

Passt glatte Bézier-Kurven an Animations-Schlüsselbilder mit dem Schneider-Kurvenanpassungsalgorithmus an.

Zweck: Fortgeschrittene Kurvenanpassung, die natürlich aussehende Bézier-Kurven aus dichten Schlüsselbild-Sequenzen erzeugt.

Verfügbarkeit: **Nur Plus-Knoten**.

Funktionsweise: Der Schneider-Algorithmus analysiert Schlüsselbild-Positionen und Tangenten, um optimale Bézier-Kontrollpunkte zu generieren, die der Originalbewegung entsprechen.

Parameter:
- **Error Tolerance**: Maximal zulässige Abweichung von Original-Schlüsselbilder. Niedriger = genauer, höher = glattere Kurven.
- **Corner Angle**: Schwellenwinkel (Grad), bei dem die Kurve in Segmente aufgeteilt wird.

Ideal für:
- Handgezeichnete oder importierte Animationen mit vielen Schlüsselbilder
- Konvertierung linearer Interpolation in glatte Bézier-Kurven
- Reduzierung der Schlüsselbild-Anzahl bei Erhaltung der Kurvenqualität

Hinweis: Rechenintensiver als einfachere Algorithmen wie RDP, erzeugt aber bessere Kurvenqualität.

Physics Constraint Bake

Bake Physics Constraints to Keys: wandelt PhysicsConstraint-Bewegung in Rotations-/Translations-Schlüsselbilder um und entfernt Physik-Timelines.

Zweck: Wandelt Laufzeit-Physiksimulation in explizite Schlüsselbilder um, damit Animationen deterministisch und ohne PhysicsConstraints editierbar sind. Nach dem Bake werden PhysicsConstraints und Physik-Timelines aus dem Payload entfernt.

Verfügbarkeit: **Nur Plus-Knoten**.

Ein-/Ausgänge:
- **payload_in** → **payload_out** (gebacken)
- **changes** (optionale Änderungs-Liste)

Steuerungen:
- **Sample FPS**: Abtastrate der Simulation für das Bake.
- **Bake Rotation**: Schreibt Rotations-Keys.
- **Bake Translation**: Schreibt Translations-Keys.
- **Bake Translation (Children)**: Wendet Translation-Bake auf Kindknochen an, die von Physik abhängen.

Hinweise:
- Benötigt das ursprüngliche Spine-JSON zur Rekonstruktion der Simulation.
- Verwenden, wenn PhysicsConstraints entfernt werden sollen, die Bewegung aber erhalten bleiben soll.

Attachment Visibility

Optimiert das Rendering, indem der Attachment eines Slots auf null gesetzt wird, wenn sein Alpha null ist.

Zweck: Verhindert, dass die Game-Engine unsichtbare Attachments verarbeiten oder rendern muss.

Verwendung: Analysiert Alpha-/Farb-Tracks und fügt automatisch Schlüsselbilder auf dem entsprechenden 'attachment'-Track hinzu oder ändert diese.

Parameter:
- **Alpha Threshold**: Alpha-Wert, unter dem ein Attachment als unsichtbar betrachtet wird.
- **Auto Restore**: Wenn aktiviert, stellt der Node automatisch den letzten sichtbaren Attachment wieder her, wenn der Alpha-Wert den Schwellenwert überschreitet.

Payload Merger

Führt mehrere verarbeitete Animations-Payloads wieder zu einem einzigen vereinheitlichten Payload zusammen.

Zweck: Wesentlich für parallele Verarbeitungspipelines, bei denen verschiedene Animationen oder Knochengruppen separat optimiert werden und wieder zusammengeführt werden müssen.

Zusammenführungsstrategie:
1. **Basis-Eingang**: Liefert die Skelettstruktur (Knochen, Slots, Skins usw.)
2. **Override-Eingänge**: Liefern verarbeitete Tracks, die Basis-Tracks ersetzen
3. **Letzter Schreiber gewinnt**: Wenn mehrere Overrides denselben Track liefern, hat der letzte Priorität

Konflikterkennung:
- Konflikte zwischen Override-Eingängen werden erkannt und gemeldet
- Basis → Override-Ersetzung ist normales Verhalten (kein Konflikt)
- Warnmeldung bei Track-Konflikten

Beispiel-Pipeline:
```
Input → AnimFilter('run') → Cleanup ───────┐
      → AnimFilter('idle') → Quantizer ────┤
      → (base) ────────────────────────────→ Merger → Output
```

Anwendungsfälle:
- Verschiedene Optimierer für verschiedene Animationen
- Separate Knochen-/Slot-Verarbeitung mit Wiederzusammenführung
- A/B-Tests verschiedener Optimierungsstrategien

Animation Viewer

Visuelles Werkzeug zur Inspektion und zum Vergleich von Animationskurven vor und nach der Optimierung.

Zweck: Bietet eine grafische Darstellung von Schlüsselbilder und Kurven für den ausgewählten Track.

Verwendung: Durch Verbinden beider Eingänge 'payload_before' und 'payload_after' werden die Original- und optimierten Kurven überlagert, was die Visualisierung der Auswirkungen Ihrer Optimierungen erleichtert.

Animation Filter

Filtert Animations-Tracks basierend auf dem Animationsnamen (z.B. 'run', 'idle').

Zweck: Nützlich für die Anwendung unterschiedlicher Optimierungsstrategien auf verschiedene Animationen.

Verwendung: Zum Beispiel können Sie aggressive verlustbehaftete Optimierungen (wie DCT) auf Hintergrund-Charakter-Animationen anwenden, während Sie verlustfreie Optimierungen (wie Spline) für Hauptcharakter-Aktionen verwenden.

Asset Filter

Filtert Atlas-Assets nach Namen, funktioniert in zwei Modi: vor dem Entpacken (filtert Atlas-Text) oder nach dem Entpacken (filtert Sprites).

Zweck: Steuert, welche Assets in den Arbeitsablauf einbezogen werden - welche Assets aus dem Atlas entpackt oder welche entpackten Sprites in das Repacken einbezogen werden.

Modi:
1. VOR-ENTPACK-MODUS (vor AtlasUnpacker):
   - Eingang: atlas_in (atlas_project)
   - Ausgang: atlas_out (gefiltertes atlas_project)
   - Arbeitsablauf: InputNode → AssetFilter → AtlasUnpacker
   - Anwendungsfall: Filtern, welche Assets aus dem Atlas entpackt werden (spart Verarbeitungszeit)

2. NACH-ENTPACK-MODUS (nach AtlasUnpacker):
   - Eingang: sprites_in (sprites)
   - Ausgang: sprites_out (gefilterte sprites)
   - Arbeitsablauf: AtlasUnpacker → AssetFilter → AtlasRepacker
   - Anwendungsfall: Filtern, welche entpackten Sprites in den endgültigen Atlas aufgenommen werden

UI-Verhalten:
- Im VOR-ENTPACK-MODUS: Analysiert Atlas-Text, um Asset-Namen zu erkennen
- Im NACH-ENTPACK-MODUS: Erkennt Asset-Namen aus dem Sprite-Array
- 'Alle zulassen'-Schalter: Wenn aktiviert, werden alle Assets durchgelassen (Liste angezeigt, aber deaktiviert)
- Kontrollkästchen: Wählen Sie bestimmte Assets aus (wenn 'Alle zulassen' deaktiviert ist)

Beispiele:
- Vor Entpacken: Nur 'char_*'-Assets auswählen, um nur Charakter-Sprites zu entpacken
- Nach Entpacken: 'background_*'-Sprites vom endgültigen neu verpackten Atlas ausschließen
- Nur-Waffen-Atlas erstellen, indem 'weapon_*'-Muster ausgewählt wird

Bone Filter

Filtert Knochen-Animations-Tracks basierend auf dem Knochennamen.

Zweck: Ermöglicht das Zielen oder Ausschließen spezifischer Knochen vom Optimierungsprozess.

Verwendung: Sie möchten möglicherweise sensible Knochen, wie die für Gesichtsausdrücke verwendeten, von aggressiver Optimierung ausschließen, um jedes Detail zu bewahren, während weniger wichtige Knochen stark optimiert werden.

Skin Filter

Filtert Animations- und Asset-Daten basierend auf Skin-Namen.

Zweck: Verarbeitet nur bestimmte Skins aus einem Multi-Skin Spine-Projekt.

Verwendung: Wenn ein Spine-Projekt mehrere Skins hat (z.B. 'default', 'armor', 'casual'), können Sie mit diesem Node filtern, welche Skins verarbeitet werden sollen.

Parameter:
- **Skins List**: Kontrollkästchen für jeden verfügbaren Skin
- **Allow All**: Schalter, um alle Skins einzubeziehen (Standard)

Anwendungsfälle:
- Separate Atlas pro Skin erstellen
- Verschiedene Optimierungen auf verschiedene Skins anwenden
- Selten verwendete Skins vom optimierten Build ausschließen

Hinweis: Skins teilen die Skelettstruktur, können aber unterschiedliche Attachments haben.

Slot Filter

Filtert Slot-Animations-Tracks basierend auf dem Slot-Namen.

Zweck: Nützlich zum Zielen oder Ausschließen spezifischer Slots, die besondere Timing- oder Sichtbarkeitsanforderungen haben können.

Verwendung: Sie können dies verwenden, um Waffen- oder Effekt-Slots, die per Code gewechselt werden, davon auszuschließen, von Attachment-Sichtbarkeitsoptimierungen betroffen zu werden.

Parameter Filter

Filtert Animations-Tracks basierend auf ihrem Eigenschaftstyp (z.B. Rotation, Scale, Color).

Zweck: Ermöglicht die Anwendung nachfolgender Optimierungen nur auf bestimmte Arten von Animationsdaten.

Verwendung: Platzieren Sie diesen Node vor einem Optimierer, um seinen Umfang zu begrenzen. Zum Beispiel können Sie RDP-Optimierung nur auf 'translation'- und 'scale'-Tracks anwenden.

Atlas Unpacker

Extrahiert einzelne Sprites aus einem Spine-Texturatlas.

Zweck: Zerlegt eine Atlas-Datei in ihre Einzelsprites, um individuelle Analyse oder Neupackung zu ermöglichen.

Verwendung: Verbinden Sie den 'atlas_project'-Ausgang vom InputNode mit dem 'atlas_project_in'-Eingang dieses Knotens. Die Ausgabe kann an AssetViewer zur Inspektion oder an AtlasRepacker zur Optimierung gesendet werden.

⭐ Mesh-Zuschnitt: Verbinden Sie den 'Original JSON'-Ausgang vom InputNode mit dem 'Skeleton JSON'-Eingang, um automatisches Zuschneiden von Sprites auf ihre Mesh-Grenzen (anstelle rechteckiger Grenzen) zu aktivieren. Dies reduziert den Texturspeicherverbrauch für Sprites mit Mesh-Anhängen erheblich, indem transparente Pixel außerhalb der Mesh-Hülle entfernt werden.

Ausgänge:
- **sprites_out**: Standardisiertes Sprite-Array (für Viewer/Repacker)
- **sprites_data_out**: Extrahierte Sprite-Bilder/Metadaten (strukturiertes Bundle)
- **atlas_out**: Atlas-Project-Durchleitung

Socket-Schlüssel: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out

Atlas Repacker

Packt einzelne Sprites in einen oder mehrere neue, optimierte Textur-Atlanten.

Zweck: Optimiert Texturspeicher und reduziert potenziell Draw Calls durch Erstellen effizienter Spritesheets.

Verwendung: Akzeptiert 'sprites_data' (normalerweise von AtlasUnpacker) und erzeugt ein neues Atlas-Layout.

Parameter:
- **Max Texture Size**: Maximale Breite/Höhe der Ausgabe-Atlas-Seiten.
- **Padding**: Abstand in Pixeln zwischen jedem Sprite.
- **Scale**: Skaliert alle Sprites vor dem Packen.
- **Power of Two**: Erzwingt, dass die Ausgabe-Atlas-Dimensionen Zweierpotenzen sind (z.B. 1024, 2048), von einigen Plattformen erforderlich.
- **Allow Rotation**: Erlaubt Sprites um 90 Grad zu drehen für bessere Packeffizienz.

Atlas Viewer

Leichtgewichtiges Atlas-Visualisierungs- und Analysewerkzeug zur Prüfung der Atlasstruktur vor dem Entpacken.

Zweck: Ermöglicht eine schnelle Vorschau von Atlas-Seiten und Regionen, ohne den aufwändigen Entpackvorgang auszuführen. Hilft, die Atlas-Struktur zu prüfen und ungenutzte Regionen zu erkennen.

Verwendung: Verbinden Sie den 'atlas_project'-Ausgang vom InputNode mit dem 'atlas'-Eingang. Optional den 'original_json_out'-Ausgang mit dem 'json'-Eingang verbinden, um die Regionsnutzung zu analysieren.

Funktionen:
- Visuelle Vorschau der Atlas-Seiten mit Regionsgrenzen
- Regionshervorhebung: Grün = genutzt, Rot = ungenutzt im Skeleton
- Seiten-Navigation
- Statistiken zu Gesamt- und ungenutzten Regionen

Einsatzfälle:
- Schnelle Atlas-Prüfung vor der Optimierung
- Erkennen von Ballast (ungenutzte Regionen)
- Fehlersuche bei Atlas-Packproblemen
- Verständnis der Asset-Struktur

Socket-Schlüssel: atlas_project, atlas_in, atlas, json

Atlas Merger

Kombiniert mehrere Atlas-Quellen zu einem einzigen vereinheitlichten Atlas.

Zweck: Mehrere Atlas-Projekte zu einem zusammenführen.

Eingang:
- **atlas_inputs**: Multi-Input-Array von Atlas-Projekten

Ausgänge:
- **atlas_out**: Zusammengeführtes Atlas-Projekt
- **merged_out**: Veralteter zusammengeführter Ausgang
- **merged_atlas_out**: Veralteter zusammengeführter Ausgang

Anwendungsfälle:
- Charakter-Atlas mit Waffen-Atlas kombinieren
- Basis-Sprites mit DLC-Inhalten zusammenführen
- Nach paralleler Atlas-Verarbeitung wieder zusammenführen

Typische Pipeline:
```
InputA → Unpacker → Repacker ─┐
                               ├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Vor dem Repacker sind die Daten einzelne Sprites; nach dem Repacker werden sie zu einem Atlas-Projekt. Atlas Merger kombiniert die Atlas-Projekte, und ein abschließender Unpacker → Repacker-Durchlauf packt alles dichter in einen einzigen Atlas.

Asset Viewer

Zeigt einzelne Sprites aus einem entpackten Atlas an.

Zweck: Visuelles Debugging-Tool für Atlas-Manipulation.

Verwendung: Akzeptiert 'sprites_data' vom Atlas Unpacker-Node und ermöglicht es Ihnen, jedes extrahierte Bild zu visualisieren, seine Eigenschaften (Dimensionen, Rotation usw.) zu untersuchen und die visuelle Genauigkeit nach dem Entpacken zu überprüfen.