Learn how to optimize your Spine 2D animations, reduce file size, and improve performance
FPSUIYouTubeabonnementaide-pratiqueanimationavec pertecatégorieschaînesconnecteursconnexionscontrôlesdonnéesdébutantexemplesexportflux de travailgraphiquesguidehaut-de-gammemémoiremétriquesnotionsoptimisationperformancesplaybackrecorderrecordingrésultatssans pertestatistiquessupplémenttableautarifstimelinetutorielvideovidéoviewervisualiseur
Démarrage : Flux de travail de base
débutantflux de travailtutoriel
Ce mode d’emploi vous aidera à démarrer rapidement avec le JSON Optimizer.
Charger le projet : Utilisez InputNode pour charger vos fichiers .json, .atlas et .png.
Choisir un preset (mode Plus) : En mode Plus, utilisez le panneau de droite pour sélectionner l’un des presets intégrés (ex. "Basic Fallback"). Cela construit automatiquement un graphe d’optimisation. En mode Free, construisez un graphe manuel minimal : InputNode → QuantizerNode → OutputNode.
Exécuter le graphe : Cliquez sur le bouton "Exécuter le graphe".
Comparer les résultats : Basculez sur l’onglet "Visualiseur" pour comparer visuellement les séquences originales et optimisées.
Examiner les changements : Dans les onglets "Résultats" et "Statistiques", vous trouverez des informations détaillées sur les clés modifiées ou supprimées.
Types de sockets et flux de données
connecteurscatégoriesdonnéesconnexions
Cet article explique les types de données utilisés par les sockets dans le graphe de nœuds et ce qui peut être connecté où.
Règle rapide
La plupart des nœuds de traitement opèrent sur un Spine Payload. Les nœuds liés à l’atlas opèrent sur un Atlas Project ou des Sprites. Utilisez ValidatorNode si vous n’êtes pas sûr de ce qu’un socket attend.
Types de socket
Spine Payload — représentation du projet Spine adaptée au runtime, utilisée par la plupart des nœuds de traitement.
Atlas Project — métadonnées de l’atlas + images des pages, utilisé par les nœuds d’atlas.
Recommandation : Commencez toujours par les optimisations sans perte. N’utilisez les méthodes avec perte que si une réduction supplémentaire de la taille du fichier est nécessaire, et vérifiez toujours le résultat visuellement.
Comment mesurer l'efficacité
aide-pratiquemétriquesstatistiques
Pour comprendre l'efficacité de votre optimisation, prêtez attention aux métriques suivantes :
Taille du fichier : La taille finale du fichier .json est l'objectif principal de l'optimisation.
Nombre d'images clés : Dans l'onglet "Statistiques", vous trouverez des tableaux et des graphiques montrant combien d'images clés ont été supprimées dans chaque séquence.
Comparaison visuelle : Utilisez toujours l'onglet "Visualiseur" pour comparer les séquences "avant" et "après". Assurez-vous que les optimisations avec perte n'ont pas introduit d'artefacts visuels inacceptables.
Rapport dans le tableau "Résultats" : Ici, vous pouvez examiner en détail chaque modification spécifique apportée à vos données.
Viewer : Panneau de contrôles
visualiseurcontrôlesUI
L'onglet Visualiseur superpose un panneau de contrôles au-dessus du canvas. Il est divisé en trois groupes :
Contrôles de lecture
Séquence — sélectionne quelle séquence Spine est en cours de lecture.
Skin — sélectionne quel skin est appliqué.
Vitesse — multiplicateur de vitesse de lecture (0.1× → 3.0×).
Contrôles d’affichage
Réinitialiser la vue — rétablit le positionnement caméra/mise en page par défaut.
Options d’affichage — décalages numériques pour positionner la vue de comparaison : Espacement X / Espacement Y (distance entre Original/Optimisé) et Décalage X / Décalage Y (décalage global).
Contrôles de débogage
Mode débogage — active les overlays de rendu de débogage (selon le support du runtime).
Activer la physique — active/désactive la simulation physique (si le squelette utilise la physique).
Libellés — active/désactive l'overlay des libellés.
Viewer : Panneau de performance
performancesFPSmémoireUI
Le panneau Performance affiche des métriques runtime en temps réel pour le(s) squelette(s) en cours de lecture.
Temps réel
FPS — images par seconde mesurées par le moniteur.
Frame Time — temps par frame en millisecondes (plus bas = mieux).
FPS chart — les 120 dernières mesures affichées sous forme de barres.
Métriques du squelette
Visible Slots — nombre de slots visibles lors de la dernière mesure.
Avg. Visible — moyenne glissante des slots visibles (plus stable qu’une seule frame).
Vertices — nombre de sommets actuellement utilisés pour le rendu.
Bounds (px) — limites actuelles du squelette (largeur×hauteur) en pixels.
Avg. Bounds — moyenne glissante des limites.
Largest Texture — la plus grande page d’atlas (par dimensions) détectée pour le squelette.
Texture Memory — estimation de la mémoire totale des textures pour les pages d’atlas chargées. Lorsque disponible, le panneau affiche aussi un détail par page (nom de fichier, dimensions et taille estimée).
Améliorations (quand Optimized est disponible)
Slot Improvement — compare Avg. Visible entre Original et Optimized.
Memory Change — compare Texture Memory entre Original et Optimized.
Viewer : Chronologie
viewertimelineanimationplaybackguide
Le panneau Timeline est un séquenceur d'animation ancrable en bas du Visualiseur. Il permet d'organiser des clips d'animation sur plusieurs pistes, de contrôler la lecture et de prévisualiser les transitions.
Pistes & Clips
Jusqu'à 4 pistes d'animation — chaque piste correspond à un trackIndex Spine. Les pistes supérieures se mélangent par-dessus les inférieures.
Ajouter une animation — cliquez sur le bouton + d'une piste pour ouvrir le sélecteur d'animations (avec filtre de recherche).
Déplacer et redimensionner les clips — faites glisser le corps du clip pour le déplacer le long de la piste ; faites glisser les bords gauche/droit pour modifier le temps de début ou la durée.
Supprimer des clips — sélectionnez un clip et appuyez sur Delete ou Backspace.
Détection de chevauchement — les clips qui se chevauchent sur la même piste sont surlignés en rouge.
Contrôles de lecture
Lecture / Pause / Arrêt — contrôles de lecture standard.
Précédent / Suivant — sauter au début du clip précédent ou suivant.
Vitesse d'animation — curseur de 0,1× à 3,0×.
Arrêt automatique — la lecture s'arrête automatiquement à la fin de la timeline.
Mélange de transitions
Durée de mélange globale — définit le temps de fondu enchaîné par défaut entre les clips consécutifs.
Overrides par transition — cliquez sur la bulle de transition entre deux clips pour définir une durée de mélange personnalisée. Vous pouvez réinitialiser les overrides individuels à la valeur globale.
Recherche & Scrubbing
Tête de lecture — faites glisser la poignée sur la règle temporelle ou cliquez sur la règle pour rechercher.
Aperçu du temps du curseur — le survol de la zone de piste affiche le temps sous le curseur.
Web Worker — la recherche et le calcul des événements sont délégués à un worker en arrière-plan pour des performances fluides.
Lecture avec physique
Basculer la physique entre Update (contraintes actives) et None (désactivé).
Lors de la recherche, le temps du squelette est avancé pour stabiliser correctement les contraintes physiques.
Support multi-squelette
Sélecteur de paire cible — chaque piste peut cibler toutes les paires (🌐 Toutes les paires) ou un squelette spécifique.
Position et échelle par squelette — entrées de décalage X/Y et d'échelle pour les squelettes individuels.
Ordre de dessin — entrée numérique pour contrôler la priorité de la couche de rendu.
Dessin de débogage
Basculer la visibilité pour : Bones, Noms des bones, Regions, Meshes, Hulls, Bounds, Paths, Clipping, Points.
Sélection de skin
Cases à cocher à sélection multiple pour tous les skins définis dans le squelette chargé.
Paramètres d'affichage
Espacement X / Y — écart entre les paires de squelettes.
Décalage X / Y — décalage global du viewport.
Sélecteur PMA — mode alpha prémultiplié (Spine 3.x) ou mode alpha de l'atlas (Spine 4.x : auto / pma / bleed / none).
Libellés de squelette — basculer l'overlay des libellés.
Viewer : Enregistreur
viewerrecorderrecordingexportvideoguide
Le Recorder capture les animations Spine du visualiseur sous forme de vidéo, d'images animées ou de séquences d'images.
Modes d'enregistrement
⚡ Enregistrement rapide — capture en temps réel avec MediaRecorder + captureStream(). Produit uniquement du WebM. Rapide mais limité au taux d'images en temps réel.
🎬 HQ Export — rendu hors ligne image par image avec WebCodecs VideoEncoder + readPixels(). Prend en charge tous les formats et produit une sortie au pixel près.
Formats de sortie
Vidéo : WebM, MP4, AVI, MOV
Image animée : GIF, Animated PNG (APNG)
Séquence d'images : PNG Sequence, WebP Sequence
Codecs (HQ Export)
VP8, VP9, H.264 (AVC), AV1, ProRes — les codecs disponibles sont détectés automatiquement selon le support du navigateur.
Bitrate personnalisé — spécifier en kbps pour un contrôle fin.
Temporisation
FPS : 24, 30, 60 ou personnalisé (1–120 fps).
Préchauffage — secondes pour la stabilisation des physiques/contraintes avant le début de l'enregistrement.
Pause après — maintenir la dernière image pendant une durée définie.
Inclure la dernière image — bascule.
Viewport & Recadrage
Activer/désactiver le recadrage — basculer la région de recadrage.
Rectangle de recadrage — X, Y, Largeur, Hauteur en coordonnées du monde Spine.
Ajuster à la paire — ajuster automatiquement le recadrage à une paire de squelettes avec un padding configurable.
Overlay de recadrage interactif — faites glisser les coins/bords directement dans le viewport.
Résolution
Mode échelle — curseur en pourcentage (10%–400%).
Mode fixe — dimensions explicites en pixels (jusqu'à 4096px).
La résolution de sortie calculée est affichée en direct.
Options de rendu
Rendre les bones — inclure l'overlay de débogage des bones.
Rendre les images — inclure les images d'attachment.
Rendre les autres — boîtes englobantes, paths.
MSAA — Aucun / 2× / 4× anti-aliasing.
Lissage — niveaux 0–8 avec choix d'algorithme (Bicubic / Bilinear).
Arrière-plan
Transparent — désactivé automatiquement pour les formats sans alpha (par ex. GIF, JPEG).
Couleur unie — sélecteur de couleur personnalisé.
Damier — indicateur visuel de transparence.
Prise en charge du canal alpha : VP9+WebM, AV1+MP4, PNG Sequence, APNG, WebP Sequence.
Overlay HUD
Bascules : info de piste, temps, numéro d'image, FPS, libellés de squelette.
Texte personnalisé — texte en filigrane.
Position — 4 coins (haut-gauche, haut-droite, bas-gauche, bas-droite).
Taille de police — 8–64px, plus sélecteur de couleur du texte.
Répétition & Multi-squelette
Nombre de répétitions — 1–100 itérations de boucle.
Paire cible — enregistrer un squelette spécifique ou tous.
Mode squelettes — Combiné (fichier unique) / Fichiers séparés (un fichier par squelette).
Modèle de nom de fichier
Chaîne de modèle avec variables : {project}, {animation}, {W}, {H}, {fps}. Un aperçu en direct du nom de fichier résolu est affiché.
Intégration Timeline
La plage d'enregistrement apparaît sous forme de clip pointillé rouge/orange sur la timeline. Faites glisser les bords pour redimensionner la plage, faites glisser le corps pour repositionner, ou utilisez le bouton de paramètres (⚙️) pour ouvrir la configuration complète d'enregistrement.
Onglet Résultats
résultatstableauoptimisation
L'onglet Résultats affiche la sortie détaillée de l'optimisation.
Tableau des résultats — une ligne par changement dans les résultats d'optimisation JSON (par ex. quelle séquence/os/propriété/image clé a été modifiée ou supprimée).
Comparaison sprite/atlas — lorsque l'optimisation des textures est utilisée, cette section compare les tailles des sprites et les résultats d’empaquetage.
Astuce : utilisez la vue Résultats pour répondre à : qu'est-ce qui a exactement changé ?
Onglet Statistiques
statistiquesgraphiquesmétriques
L'onglet Statistiques résume les résultats de l'optimisation sous forme de graphiques et de métriques agrégées.
Graphique d’optimisation — visualise l'impact de l'optimisation sur l'ensemble des données (lorsque les optimisations JSON ont produit des changements).
Tableau de métriques — chiffres clés comme les tailles original/nouveau et le pourcentage de réduction.
Statistiques d’empaquetage des textures — si un repacking d'atlas a été utilisé : pages, surface totale/utilisée, efficacité et un détail par page.
Utilisez cet onglet pour répondre à : dans quelle mesure avons-nous amélioré l'ensemble ?
Exemples de pipelines (Vidéo)
vidéoexempleschaînesYouTube
Voici des flux complets et réels issus de la playlist officielle YouTube.
Spine2D Experiments 1 : Optimisation des courbes avec l’algorithme RDP — démo d’optimisation de base Spine 2D : l’algorithme Ramer–Douglas–Peucker (RDP) supprime les données de courbes et d’images clés redondantes pour réduire le JSON. RDP peut retirer des images clés importantes, donc vérifiez toujours les séquences et excluez les os/slots sensibles via des nœuds de filtre avant le nœud RDP. Voir sur YouTube
Spine2D Experiments 2 : Optimisation des courbes avec l’algorithme de quantification — la quantification est l’optimiseur de courbes le plus sûr : arrondir les valeurs (souvent à 1 décimale) réduit immédiatement la taille. Exemple : [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. Utilisez le nœud Quantizer comme dernière étape avant le nœud Output pour figer l’optimisation ; la vidéo montre l’avant/après avec un changement visuel quasi imperceptible. Voir sur YouTube
Spine2D Experiments 3 : Reconstruction des courbes avec les algorithmes Spline et Refit — Spline est sans perte pour les segments droits (supprime les images clés intermédiaires redondantes), tandis que Refit est avec perte mais très puissant : il reconstruit des sections complexes en une seule courbe de Bézier. Ces algorithmes sont idéaux après le baking physics et le nettoyage via le nœud Schneider. Note : des itérations Refit au‑delà de 100 peuvent prendre des minutes pour trouver la meilleure courbe. La vidéo montre les deux méthodes et le % d’optimisation obtenu. Voir sur YouTube
Spine2D Experiments 4 : Suppression de données redondantes avec Visibilité des attachments et nœuds de nettoyage — optimisation structurelle avec les nœuds Visibilité des attachments et Nettoyage. La visibilité des attachments désactive les attachments quand l’alpha tombe à 0 et les réactive au fade‑in, réduisant les appels de rendu et les images clés redondantes. Nettoyage supprime les redondances logiques : pistes color/alpha inutilisées, images clés de rotation IK entièrement contrôlées par des contraintes, et images clés de contraintes de chemin. La vidéo montre en quoi ces optimisations logiques diffèrent de la simplification de courbes. Voir sur YouTube
Spine2D Experiments 5 : Création de flux non linéaires (filtres et nœud Merge) — optimisation non linéaire : divisez le flux avec des filtres (Séquence, Os, Slot, Paramètre ou Skin), exécutez différents algorithmes sur des branches parallèles (par exemple, compression agressive pour les os du corps tout en gardant la séquence du visage sans perte), puis fusionnez les branches avec le nœud Merge dans un seul squelette. Ce flux va au‑delà d’un simple Input → Optimiser → Output et permet de cibler uniquement ce qui doit être optimisé. Voir sur YouTube
Spine2D Experiments 6 : Repacking des textures et mise à l’échelle sélective avec des nœuds personnalisés — flux avancés d’optimisation de textures : les nœuds Atlas Unpacker/Repacker permettent de dépacker, redimensionner/compresser et repacker des atlases dans un seul graphe, plus rapide que le flux Spine standard. Avec le flux non linéaire, vous pouvez scinder les ressources, conserver les textures de personnage à 100 % et réduire d’autres à 25 %, puis tout fusionner dans un atlas partagé. Les nœuds Visualiseur d’atlas/d’actifs offrent inspection visuelle et filtrage à chaque étape. Cela facilite la définition des tailles, le traitement sélectif et la recombinaison en modèle réutilisable. Voir sur YouTube
Spine2D Experiments 7 : Redimensionnement instantané du squelette avec un nœud Scale — flux d’optimisation de bout en bout + mise à l’échelle du squelette. Le nœud Scale remplace le flux Spine fastidieux (export/import, repack/unpack, correction des chemins) par une seule étape dans le graphe : définissez la taille cible, prévisualisez instantanément dans le visualiseur et itérez en temps réel. La vidéo relie optimisation des courbes/images clés, traitement des ressources et redimensionnement du squelette dans un flux fluide. Voir sur YouTube
Spine2D Experiments 8 : Présentation des nœuds de la bêta publique — présentation de tous les nœuds de la bêta publique et de la façon dont re‑polish rapproche les besoins des animateurs et des développeurs. Couvre le nettoyage des images clés redondantes, la simplification Bézier‑vers‑linéaire, l’arrondi pour réduire la taille, la suppression des attachments invisibles, le nettoyage des propriétés inutilisées, la détection de caractères non anglais et l’atlas dépacker/filtrer/mettre à l’échelle/repacker. Le Visualiseur double valide les résultats avec comparaison visuelle et FPS côte à côte. La bêta publique est disponible sur re-polish.com. Voir sur YouTube
Spine2D Experiments 9 : Baking des contraintes physiques en images clés — dans cette vidéo, je présente mes dernières expériences de baking des contraintes physiques en images clés standard. Le nouvel algorithme de bake garantit : boucles parfaites (zéro jitter ou saut entre le début et la fin), taille de fichier optimisée (le nettoyage automatique des courbes garde la taille du JSON proche de l’original) et compatibilité rétroactive (les clés baked permettent d’utiliser les animations physiques Spine 4.2 dans Spine 4.1 ou même 4.0). Voir sur YouTube
Nodes
Input
Importe des fichiers de projet Spine, des entrées JSON uniquement, des ressources de démonstration et des packages ZIP dans le graphe.
Objectif : Il s'agit du point d'entrée principal de la plupart des workflows. Il lit le JSON, l'atlas et les textures, puis les normalise en données internes que les nœuds en aval peuvent traiter.
Modes pris en charge :
1. Projet complet : JSON + atlas + textures
2. JSON uniquement : traiter les données de squelette/animation sans atlas
3. Package ZIP : une archive zip contenant un projet complet
4. Ressources de démonstration : des données d'exemple intégrées pour des tests rapides
Sorties principales :
- **payload_out** : données normalisées pour les nœuds d'optimisation
- **original_json_out** : JSON source pour la comparaison ou la reconstruction
- **atlas_project_out** : projet atlas analysé lorsque des textures sont fournies
Picture Input
Ajoute des images PNG/JPEG autonomes dans le viewport afin de créer des aperçus et des prises de présentation plus soignés.
Objectif : Utilisez ce nœud pour placer des images directement dans le viewport comme couches de présentation ou éléments visuels d'appoint. Il est utile pour habiller une scène, ajouter des graphismes de soutien et rendre les aperçus du projet plus élégants avant l'enregistrement de vidéos ou de démos.
Workflow : Chargez une image, puis utilisez les outils du viewport pour la redimensionner, la déplacer et ajuster son z-index afin qu'elle s'intègre correctement dans votre composition. Cela permet de préparer de belles prises de showcase sans modifier les données principales du projet Spine.
Ce nœud est autonome et n'expose aucun graph socket.
Output
Rassemble le résultat final et permet de télécharger les données optimisées sous forme de fichiers séparés, d'ensembles de fichiers ou d'archives.
Objectif : Sert de centre d'export pour le JSON optimisé, les atlas, les textures et les sprites. Ce nœud peut traiter aussi bien un seul ensemble JSON/atlas/textures que plusieurs ensembles de fichiers. Si vous ne lui fournissez que des sprites, il peut également produire uniquement des images sans reconstruire un projet Spine complet.
Options d'export :
- télécharger les fichiers séparément ou dans une archive unique
- télécharger des résultats packed ou une archive contenant les fichiers unpacked
- exporter le JSON en version compacte ou en version lisible
- exporter un projet Spine complet ou seulement des résultats de sprites/images
Chaînage : OutputNode n'est pas forcément la fin absolue du graphe. Vous pouvez réinjecter ses sorties dans une autre étape du pipeline et faire repasser les mêmes fichiers dans des passes d'optimisation supplémentaires. En pratique, l'optimisation des keys et des curves a été testée jusqu'à 3 itérations consécutives.
Sorties principales :
- **reconstructed_json_out** : JSON Spine reconstruit
- **original_json_passthrough_out** : passthrough du JSON d'origine
- **payload_out** : payload pour poursuivre le chaînage
- **changes** : changements d'optimisation collectés
- **atlas_assets** : ressources atlas prêtes à l'export
RDP
Simplifie les courbes de séquence (RDP).
But : Réduit le nombre d’images clés dans les segments de séquence linéaires ou quasi linéaires en supprimant les points situés sur une ligne droite entre deux autres.
Règle d’or : désactivée par défaut. Elle protège les courbes à forme marquée (aire/courbure) pour éviter leur linéarisation. Désactivez-la uniquement pour une compression plus agressive après vérification visuelle.
Clés de socket : payload_in, payload_out, changes
Spline
Optimisation des courbes via splines.
But : Ajuste les courbes en douceur tout en préservant la qualité visuelle.
Clés de socket : payload_in, payload_out, changes
Refit
Réapproxime des segments par des courbes (Bezier) pour réduire les keyframes.
But : Ajuste moins de courbes tout en restant dans une tolérance.
Clés de socket : payload_in, payload_out, changes
Quantizer
Réduit la précision des valeurs numériques dans les images clés et les courbes.
Objectif : Méthode simple mais efficace pour réduire la taille du fichier en arrondissant les nombres à un nombre spécifié de décimales.
Utilisation : Peut être appliqué à presque toutes les données de séquence. Devient plus efficace avec un nombre d'images clés plus élevé.
Attention : Une quantification trop agressive (faible précision) peut causer des tremblements ou des artefacts visuels dans les séquences.
Cleanup
Effectue diverses tâches de nettoyage pour supprimer les données de séquence redondantes ou inutiles.
Objectif : Outil spécialisé pour supprimer certains types de données redondantes que d’autres optimiseurs peuvent manquer.
Utilisation : Connectez votre payload à 'payload_in' et récupérez le résultat via 'payload_out'. Si vous souhaitez un rapport par changement, utilisez aussi 'changes'.
Clés de socket :
- Entrées : payload_in
- Sorties : payload_out, changes
Nettoyages actuellement pris en charge :
1. **Supprimer les pistes color/alpha inutilisées** : Supprime les timelines color/alpha pour les slots qui ne sont jamais visibles pendant la lecture.
2. **Supprimer les rotations IK redondantes** : Supprime les images clés de rotation des os entièrement contrôlés par une contrainte IK avec un mix à 100 %.
3. **Supprimer les clés de contrainte de chemin** : Supprime les images clés rotate/translate des os entièrement contrôlés par une contrainte de chemin (mix à 100 %).
4. **Assainir les caractères non anglais** : Remplace les caractères non anglais dans les noms/identifiants pour éviter des problèmes dans les outils en aval.
Scale
Met à l'échelle toutes les valeurs numériques des images clés de séquence par un facteur spécifié.
Objectif : Met uniformément à l'échelle les données de séquence, utile pour redimensionner proportionnellement le squelette ou ajuster l'intensité de la séquence.
Utilisation : Connectez au payload et définissez le facteur d'échelle. Les valeurs supérieures à 1.0 agrandissent, inférieures à 1.0 réduisent.
Paramètres :
- **Scale Factor** : Multiplicateur appliqué à toutes les valeurs de position et de taille.
- **Include Rotations** : Si les valeurs de rotation doivent également être mises à l'échelle (généralement désactivé).
Cas d'utilisation :
- Redimensionner les séquences importées pour correspondre aux nouvelles dimensions du squelette
- Créer des variantes exagérées ou subtiles de séquences
- Mise à l'échelle par lots de plusieurs séquences pour différentes tailles de personnages
Schneider
Ajuste des courbes de Bézier lisses aux images clés de séquence en utilisant l'algorithme d'ajustement de courbe de Schneider.
Objectif : Ajustement de courbe avancé qui produit des courbes de Bézier d'aspect naturel à partir de séquences denses d'images clés.
Disponibilité : **Nœud Plus uniquement**.
Fonctionnement : L'algorithme de Schneider analyse les positions et tangentes des images clés pour générer des points de contrôle de Bézier optimaux qui correspondent étroitement au mouvement original.
Paramètres :
- **Error Tolerance** : Écart maximum autorisé par rapport aux images clés originales. Plus faible = plus précis, plus élevé = courbes plus lisses.
- **Corner Angle** : Angle seuil (degrés) auquel diviser la courbe en segments.
Idéal pour :
- Séquences dessinées à la main ou importées avec de nombreuses images clés
- Conversion de l'interpolation linéaire en courbes de Bézier lisses
- Réduction du nombre d'images clés tout en maintenant la qualité de la courbe
Note : Plus gourmand en calcul que des algorithmes plus simples comme RDP, mais produit une qualité de courbe supérieure.
Physics Constraint Bake
Bake Physics Constraints to Keys : convertit le mouvement des PhysicsConstraints en images clés de rotation/translation et supprime les timelines de physique.
Objectif : Convertit la simulation physique en temps réel en images clés explicites afin que les animations soient déterministes et éditables sans PhysicsConstraints. Après le bake, les PhysicsConstraints et les timelines de physique sont supprimées du payload.
Disponibilité : **Nœud Plus uniquement**.
Entrées/Sorties :
- **payload_in** → **payload_out** (baked)
- **changes** (liste de changements optionnelle)
Contrôles :
- **Sample FPS** : Fréquence d'échantillonnage de la simulation.
- **Bake Rotation** : Écrit les images clés de rotation.
- **Bake Translation** : Écrit les images clés de translation.
- **Bake Translation (Children)** : Applique le bake de translation aux os enfants qui dépendent du mouvement physique.
Notes :
- Nécessite le JSON Spine original pour reconstruire les données de simulation.
- À utiliser lorsque vous souhaitez supprimer les PhysicsConstraints tout en conservant le mouvement.
Attachment Visibility
Optimise le rendu en définissant l'attachment d'un slot à null lorsque son alpha est zéro.
Objectif : Empêche le moteur de jeu de devoir traiter ou rendre des attachments invisibles.
Utilisation : Analyse les pistes alpha/color et ajoute ou modifie automatiquement les images clés sur la piste 'attachment' correspondante.
Paramètres :
- **Alpha Threshold** : Valeur alpha en dessous de laquelle un attachment est considéré invisible.
- **Auto Restore** : Si activé, le nœud restaurera automatiquement le dernier attachment visible lorsque la valeur alpha dépasse le seuil.
Payload Merger
Fusionne plusieurs payloads de séquence traités en un seul payload unifié.
Objectif : Essentiel pour les pipelines de traitement parallèle où différentes animations ou groupes d'os sont optimisés séparément et doivent être recombinés.
Stratégie de fusion :
1. **Entrée de base** : Fournit la structure du squelette (os, slots, skins, etc.)
2. **Entrées override** : Fournissent des pistes traitées qui remplacent les pistes de base
3. **Le dernier écrit gagne** : Lorsque plusieurs overrides fournissent la même piste, le dernier a priorité
Détection des conflits :
- Les conflits entre entrées override sont détectés et signalés
- Le remplacement Base → Override est un comportement normal (pas un conflit)
- Toast d'avertissement affiché lors de conflits de pistes
Exemple de pipeline :
```
Input → AnimFilter('run') → Cleanup ───────┐
→ AnimFilter('idle') → Quantizer ────┤
→ (base) ────────────────────────────→ Merger → Output
```
Cas d'utilisation :
- Différents optimiseurs pour différentes animations
- Traitement séparé des os/slots avec recombinaison
- Tests A/B de différentes stratégies d'optimisation
Animation Viewer
Outil visuel pour inspecter et comparer les courbes de séquence avant et après optimisation.
Objectif : Fournit une représentation graphique des images clés et des courbes pour la piste sélectionnée.
Utilisation : En connectant les deux entrées 'payload_before' et 'payload_after', il superposera les courbes originales et optimisées, facilitant la visualisation de l'impact de vos optimisations.
Animation Filter
Filtre les pistes en fonction du nom de la séquence (ex. 'run', 'idle').
Objectif : Utile pour appliquer différentes stratégies d'optimisation à différentes animations.
Utilisation : Par exemple, vous pouvez appliquer des optimisations agressives avec perte (comme DCT) aux animations de personnages en arrière-plan tout en utilisant des optimisations sans perte (comme Spline) pour les actions du personnage principal.
Asset Filter
Filtre les ressources de l'atlas par nom, fonctionne en deux modes : avant le déballage (filtre le texte de l'atlas) ou après le déballage (filtre les sprites).
Objectif : Contrôle quelles ressources sont incluses dans le flux de travail - quelles ressources déballer de l'atlas ou quels sprites déballés inclure dans le réemballage.
Modes :
1. MODE AVANT DÉBALLAGE (avant AtlasUnpacker) :
- Entrée : atlas_in (atlas_project)
- Sortie : atlas_out (atlas_project filtré)
- Flux : InputNode → AssetFilter → AtlasUnpacker
- Cas d'usage : Filtrer quelles ressources déballer de l'atlas (économise du temps de traitement)
2. MODE APRÈS DÉBALLAGE (après AtlasUnpacker) :
- Entrée : sprites_in (sprites)
- Sortie : sprites_out (sprites filtrés)
- Flux : AtlasUnpacker → AssetFilter → AtlasRepacker
- Cas d'usage : Filtrer quels sprites déballés inclure dans l'atlas final
Comportement UI :
- En mode AVANT DÉBALLAGE : Analyse le texte de l'atlas pour découvrir les noms de ressources
- En mode APRÈS DÉBALLAGE : Découvre les noms de ressources du tableau de sprites
- Basculer 'Tout autoriser' : Lorsque coché, laisse passer toutes les ressources (liste affichée mais désactivée)
- Cases à cocher : Sélectionner des ressources spécifiques à inclure (lorsque 'Tout autoriser' est décoché)
Exemples :
- Avant déballage : Sélectionner uniquement les ressources 'char_*' pour déballer uniquement les sprites de personnage
- Après déballage : Exclure les sprites 'background_*' de l'atlas final réemballé
- Créer un atlas d'armes uniquement en sélectionnant le motif 'weapon_*'
Bone Filter
Filtre les pistes de séquence d'os en fonction du nom de l'os.
Objectif : Permet de cibler ou d'exclure des os spécifiques du processus d'optimisation.
Utilisation : Vous pourriez vouloir exclure les os sensibles, comme ceux utilisés pour les expressions faciales, d'une optimisation agressive pour préserver chaque détail tout en optimisant fortement les os moins importants.
Skin Filter
Filtre les données de séquence et les ressources en fonction des noms de skin.
Objectif : Traiter uniquement des skins spécifiques d'un projet Spine multi-skin.
Utilisation : Lorsqu'un projet Spine a plusieurs skins (ex. 'default', 'armor', 'casual'), ce nœud vous permet de filtrer quels skins inclure dans le traitement.
Paramètres :
- **Skins List** : Cases à cocher pour chaque skin disponible
- **Allow All** : Bascule pour inclure tous les skins (par défaut)
Cas d'utilisation :
- Créer un atlas séparé par skin
- Appliquer différentes optimisations à différents skins
- Exclure les skins rarement utilisés du build optimisé
Note : Les skins partagent la structure du squelette mais peuvent avoir différents attachments.
Slot Filter
Filtre les pistes de séquence de slot en fonction du nom du slot.
Objectif : Utile pour cibler ou exclure des slots spécifiques qui peuvent avoir des exigences particulières de timing ou de visibilité.
Utilisation : Vous pouvez l'utiliser pour exclure les slots d'armes ou d'effets qui sont commutés par code d'être affectés par les optimisations de visibilité des attachments.
Parameter Filter
Filtre les pistes de séquence en fonction de leur type de propriété (ex. rotation, scale, color).
Objectif : Permet d'appliquer les optimisations suivantes uniquement à des types spécifiques de données de séquence.
Utilisation : Placez ce nœud avant un optimiseur pour limiter sa portée. Par exemple, vous pouvez appliquer l'optimisation RDP uniquement aux pistes 'translation' et 'scale'.
Atlas Unpacker
Extrait les sprites individuels d'un atlas de texture Spine.
Objectif : Décompose un fichier atlas en sprites individuels, permettant une analyse ou un reconditionnement individuels.
Utilisation : Connectez la sortie 'atlas_project' d'InputNode à l'entrée 'atlas_project_in' de ce nœud. La sortie peut ensuite être envoyée à AssetViewer pour inspection ou à AtlasRepacker pour optimisation.
⭐ Recadrage de maillage : Connectez la sortie 'Original JSON' d'InputNode à l'entrée 'Skeleton JSON' pour activer le recadrage automatique des sprites aux limites de leur maillage (au lieu de limites rectangulaires). Cela réduit considérablement l'utilisation de la mémoire de texture pour les sprites avec pièces jointes de maillage en supprimant les pixels transparents en dehors de l'enveloppe du maillage.
Sorties :
- **sprites_out** : Tableau de sprites standardisé (pour viewer/repacker)
- **sprites_data_out** : Images/métadonnées de sprites extraites (bundle structuré)
- **atlas_out** : Pass-through du projet d’atlas
Clés de socket : atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out
Atlas Repacker
Reconditionne les sprites individuels en un ou plusieurs nouveaux atlas de texture optimisés.
Objectif : Optimise la mémoire de texture et réduit potentiellement les appels de dessin en créant des feuilles de sprites efficaces.
Utilisation : Accepte 'sprites_data' (généralement depuis AtlasUnpacker) et génère une nouvelle disposition d'atlas.
Paramètres :
- **Max Texture Size** : Largeur/hauteur maximale des pages d'atlas de sortie.
- **Padding** : Distance en pixels entre chaque sprite.
- **Scale** : Redimensionne tous les sprites avant l'empaquetage.
- **Power of Two** : Force les dimensions de l'atlas de sortie à être des puissances de deux (ex. 1024, 2048), requis par certaines plateformes.
- **Allow Rotation** : Permet aux sprites d'être tournés de 90 degrés pour une meilleure efficacité d'empaquetage.
Atlas Viewer
Outil léger de visualisation et d’analyse d’atlas pour inspecter la structure de l’atlas avant le dépaquetage.
Objectif : Offre un moyen rapide de prévisualiser les pages et régions d’atlas sans effectuer l’opération lourde de dépaquetage. Aide à valider la structure de l’atlas et à identifier les régions inutilisées.
Utilisation : Connectez la sortie 'atlas_project' d’InputNode à l’entrée 'atlas'. Vous pouvez aussi connecter 'original_json_out' à l’entrée 'json' pour analyser l’utilisation des régions.
Fonctionnalités :
- Prévisualisation des pages d’atlas avec limites des régions
- Mise en évidence des régions : Vert = utilisé, Rouge = inutilisé dans le squelette
- Contrôles de navigation des pages
- Statistiques indiquant les régions totales et inutilisées
Cas d’utilisation :
- Validation rapide de l’atlas avant optimisation
- Identification du poids mort (régions inutilisées)
- Débogage des problèmes d’empaquetage d’atlas
- Compréhension de la structure des ressources
Clés de socket : atlas_project, atlas_in, atlas, json
Atlas Merger
Combine plusieurs sources d'atlas en un seul atlas unifié.
Objectif : Fusionner plusieurs projets d'atlas en un seul.
Entrée :
- **atlas_inputs** : Tableau multi-entrée de projets d'atlas
Sorties :
- **atlas_out** : Projet d'atlas fusionné
- **merged_out** : Sortie fusionnée héritée
- **merged_atlas_out** : Sortie fusionnée héritée
Cas d'utilisation :
- Combiner l'atlas de personnage avec l'atlas d'armes
- Fusionner les sprites de base avec le contenu DLC
- Recombiner après traitement d'atlas parallèle
Pipeline typique :
```
InputA → Unpacker → Repacker ─┐
├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Avant le Repacker, les données sont des sprites individuels ; après le Repacker, elles deviennent un projet d'atlas. Atlas Merger combine les projets d'atlas, puis un passage final Unpacker → Repacker recompacte le tout plus étroitement en un seul atlas unifié.
Asset Viewer
Affiche les sprites individuels d'un atlas décompressé.
Objectif : Outil de débogage visuel pour la manipulation d'atlas.
Utilisation : Accepte 'sprites_data' du nœud Atlas Unpacker et vous permet de visualiser chaque image extraite, d'examiner ses propriétés (dimensions, rotation, etc.), et de vérifier l'exactitude visuelle après décompression.