Journal Nanimstudio, un éditeur d'animations 2d

26
6
fév.
2013

Bonjour Nal,

Je t'écris pour te faire part de la naissance d'un nouvel outil pour créer des animations 2d: nanimstudio.

Il fait partie de mon projet nanim, consistant à spécifier un format d'animation pour les jeux vidéos dont je t'ai déjà parlé ainsi que des programmes associés.

Créé pour Newton Adventure, ce format basé sur protobuf permets un chargement rapide de données optimisées pour les cartes graphiques.

Jusqu'ici je n'avais réalisé que des utilitaires en ligne de commande, comme nanimenc pour encoder les fichiers à partir de png, nanimview pour les visualiser, sheet2nanim pour convertir des tables de sprite…

Comme j'ai eu envie d'avoir un outil plus intuitif et de pouvoir prévisualiser mes changements en temps réel, j'ai pris un peu de temps pour réaliser Nanimstudio.

Assez simple d'utilisation, il présente 3 grands panneaux: un pour importer les images, un pour éditer la liste des animations et un dernier pour éditer les frames d'une animation.

nanimstudio

Outre le format nanim, il gère aussi l'import/export de fichiers gif. J'ajouterais la gestion d'autres formats si quelqu'un a en besoin et en faire ainsi un éditeur générique.

Pour essayer ce logiciel libre (licence BSD), tu peux le télécharger sur la page de nanim.

  • # Autre éditeur

    Posté par (page perso) . Évalué à 7.

    A noter qu'un autre éditeur permettra de créer des nanims: https://github.com/pops/pixeditor

    pixeditor

    Il s'agit d'un éditeur de sprites, j'ai envoyé un patch à l'auteur pour gérer mon format, il devrait l'intégrer sous forme de plugin.

    http://devnewton.bci.im

    • [^] # Re: Autre éditeur

      Posté par (page perso) . Évalué à 6.

      gimp permet également de créer des animations 2D, de type "gif animé" (une image par calque). Il existe une extension gimp pour aider à cela, avec des boutons d'animation etc.
      Tu ne l'as pas essayé ?

      « I approve of any development that makes it more difficult for governments and criminals to monopolize the use of force. » Eric Raymond

      • [^] # Re: Autre éditeur

        Posté par (page perso) . Évalué à 3.

        Pas encore, mais dès que je trouve un bibliothèque pour lire du xcf en java, je ferais un convertisseur xcf2nanim.

        http://devnewton.bci.im

        • [^] # Re: Autre éditeur

          Posté par (page perso) . Évalué à 2.

          Ça sera peut-être plus aisé de faire de l'export de gif vers nanim non ?

          « I approve of any development that makes it more difficult for governments and criminals to monopolize the use of force. » Eric Raymond

        • [^] # Re: Autre éditeur

          Posté par (page perso) . Évalué à 3.

          Je développe pour Android en utilisant libgdx et pour faire des sprites animés, ça utilise un format qui me semble similaire/compatible. http://code.google.com/p/libgdx/wiki/SpriteAnimation

          Actuellement je fais mes animations avec Gimp et j'ai un plugin (désolé je n'ai plus le nom, je suis pas sur la bonne machine) capable de prendre tous les calques pour les mettre dans le bon format. Ce plugin permet donc au passage de transformer un gif animé en image utilisable pour le sprite.

          Si jamais tu fais de la conversion vers ton format, ça pourrait être pas mal de le faire directement depuis gimp je pense. Regarde donc ce qui existe déjà.

          • [^] # Re: Autre éditeur

            Posté par (page perso) . Évalué à 2.

            En lisant le code, j'ai l'impression qu'il n'y a pas de format. On charge juste une texture avec les phases de l'animation et la vitesse est définie dans le code:

            walkAnimation = new Animation(0.025f, walkFrames);
            
            

            http://devnewton.bci.im

            • [^] # Re: Autre éditeur

              Posté par (page perso) . Évalué à 2.

              Oui, en fait, la texture est simplement découpée ("split") en morceaux de taille identique (en spécifie le nombre de lignes et colonnes) et ça nous donne un tableau de TextureRegion (mais j'imagine qu'en mémoire ça reste une seule texture à charger). Ensuite on définit l'animation par ce tableau de TextureRegion et une durée d'affichage pour chaque frame. Ici on a donc un pas fixe, donc pour passer d'un format qui permet de spécifier des durées différentes pour chaque frame, il faudrait soit dupliquer certaines images (si ça devient pas trop lourd), ou alors je ne pense pas que cela pose de problème, on doit pouvoir se passer de leur classe Animation et faire la même chose avec quelque chose de plus générique.

              Si tu veux promouvoir un certain format, tu devrais regarder si tu ne peux pas facilement l'inclure dans ce type de projet.

              • [^] # Re: Autre éditeur

                Posté par (page perso) . Évalué à 2.

                Si tu veux promouvoir un certain format, tu devrais regarder si tu ne peux pas facilement l'inclure dans ce type de projet.

                J'hésite à convertir Newton Aventure à libgdx. Quand j'ai commencé, cette lib n'existait pas et j'ai fait du lwjgl direct. Ce portage sera peut être l'occasion…

                http://devnewton.bci.im

              • [^] # Re: Autre éditeur

                Posté par (page perso) . Évalué à 2.

                J'ai ajouté un générateur de spritesheets pour faciliter l'utilisation pour pas mal d'api.

                http://devnewton.bci.im

      • [^] # Re: Autre éditeur

        Posté par . Évalué à 2.

        Dis dis dis, tu connais le nom de cette extension ?
        Parce que y'en a beaucoup sur Gimp !
        Fais pas ton radin :D

        Sinon, l'idée d'un éditeur "light" et dédié à ça n'est pas mauvaise.
        C'est même parfois mieux.

        • [^] # Re: Autre éditeur

          Posté par (page perso) . Évalué à 3.

          Sinon, l'idée d'un éditeur "light" et dédié à ça n'est pas mauvaise.

          Un éditeur spécial était de toute façon nécessaire: contrairement aux autres formats, un nanim peut contenir plusieurs animations pour permettre l'optimisation suivante: regrouper dans un minimum de textures toutes les animations d'un niveau.

          http://devnewton.bci.im

        • [^] # Re: Autre éditeur

          Posté par . Évalué à 3.

          Dis dis dis, tu connais le nom de cette extension ?
          Parce que y'en a beaucoup sur Gimp !

          Je pense qu'il parle de Gimp Animation Package, GAP pour les intimes.

          • [^] # Re: Autre éditeur

            Posté par (page perso) . Évalué à 1.

            oui je crois que c'était bien ça !

            « I approve of any development that makes it more difficult for governments and criminals to monopolize the use of force. » Eric Raymond

          • [^] # Re: Autre éditeur

            Posté par . Évalué à 1.

            Merci bien !

  • # Alignement

    Posté par . Évalué à 7.

    En voyant la capture d'écran, j'pense que l'interface graphique gagnerait en lisibilité si :
    - les panneaux images, animations et frames avaient la même largeur
    - il y avait (ou n'y avait pas) le même espace entre le nom du panneau et le premier élément qu'il contient
    - les cadres de visualisation étaient alignés et de mêmes dimensions
    - les boutons add/remove étaient situés sous les champs de modification

    Quoiqu'il en soit, avec ton machin, ça a l'air ridiculement simple de faire une animation. Ça te paraît adapté pour faire des courts-métrages d'animation ou c'est à réserver aux jeu-vidéos ?

    • [^] # Re: Alignement

      Posté par (page perso) . Évalué à 6.

      Il faut que j'ajuste un peu les layouts. Je n'avais jamais fait de swing avant, donc je découvre cette api petit à petit!

      Pour de courts métrages d'animation, c'est possible, mais limité: un nanim est fait pour être chargé entièrement en mémoire et non compressé: des outils comme ktoon ou synfig seront beaucoup plus adaptés.

      http://devnewton.bci.im

  • # nanimopt

    Posté par . Évalué à 2.

    Au fait pourquoi tu ne fais pas une recherche exhaustive pour nanimopt ? Il faut quand même un gros nombre d'image pour ne pas arriver à les trier (>100 ?). Beaucoup de problèmes np-complet sont définit avec peu d'éléments. Si cela calcul pendant quelques minutes de plus pour sauver de la place en mémoire, personne ne t'en voudra.

    "La première sécurité est la liberté"

    • [^] # Re: nanimopt

      Posté par (page perso) . Évalué à 2.

      J'ai estimé que la recherche exhaustive n'était pas plus simple à implémenter que mon heuristique et ne donnerait pas de meilleurs résultats pour les données que j'utilise.

      Si je tombe sur cas mal optimisé, je ferais un nanimopt2!

      http://devnewton.bci.im

      • [^] # Re: nanimopt

        Posté par . Évalué à 2.

        De mémoire le bin packing avec un tri, permet de garantir d'être à 50% de l'optimal. C'est déjà pas mal.

        "La première sécurité est la liberté"

  • # Derniers ajouts

    Posté par (page perso) . Évalué à 2.

    J'ai ajouté les possibilités suivantes:

    • import/export de spritesheets.
    • lancement de l'optimisation.
    • fusion de plusieurs nanims.

    http://devnewton.bci.im

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.