Journal nanimopt: un optimiseur de nanim

9
22
avr.
2012

Bonjour Nal,

La semaine dernière, je te faisais part de la naissance du projet nanim, une spécification et un ensemble d'outils pour un nouveau format d'animation 2D destiné aux jeux vidéos.

Aujourd'hui, j'ai implémenté un nouvel outil destiné à optimiser les fichiers nanim pour opengl.

Optimisation

Le but de nanimopt, c'est son nom, est de regrouper les nimages d'un fichier nanim en nombre minimum de textures carrées dont les côtés sont des puissances de 2 (de 32x32 à 1024x1024), ce qui est le plus agréable pour les cartes graphiques modernes.

Ce regroupement d'images est un problème nommé bin packing qui bien que NP complet peut se résoudre approximativement avec l'heuristique suivante :

  • choisir une taille de texture de départ (par exemple 64x64)
  • classer les images de la plus grande à la plus petite.
  • placer la première image en haut à gauche de la texture et noter les espaces rectangles libres restant.
  • recommencer en plaçant les autres textures dans les espaces libres, le plus en haut à gauche possible.
  • si ça ne rentre pas, essayer avec une texture plus grande ou construire une autre texture avec les images qu'on n'a pas pu placer.

bin pack algo

Autres changements

J'ai ajouté au projet quelques fichiers d'aide ainsi qu'un SDK avec la spécification du format nanim et les outils précompilés. Il manque encore beaucoup de documentation, mais c'est un premier pas.

Le futur

Mon prochain objectif est de gérer les nanims dans mon jeu, Newton Adventure.

J'aimerais aussi écrire des exemples de code pour utiliser des fichiers nanim avec SDL ou WebGL, mais je ne sais pas si j'aurai le temps de le faire.

Site du projet nanim

  • # Atlas Cocos2d...

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

    J'avais déjà envie d'en parler la dernière fois, mais ton projet ressemble de plus en plus au système d'atlas de Cocos2d…

    • [^] # Re: Atlas Cocos2d...

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

      Texture atlas, sprite sheet, sprite packing… Tous ces noms désignent une même bonne vieille technique du monde du jeu vidéo.

      La plupart des jeux et des frameworks proposent leur propre variante. J'allais faire de même, mais j'ai préféré prendre un peu de temps pour faire un SDK réutilisable par d'autres jeux, dans d'autres langages, sur d'autres plateformes…

      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

      • [^] # Re: Atlas Cocos2d...

        Posté par . Évalué à  3 .

        Un peu ça, quoi :
        http://xkcd.com/927/

        • [^] # Re: Atlas Cocos2d...

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

        • [^] # Re: Atlas Cocos2d...

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

          On me l'a déjà sorti, mais je ne vois pas avec quel standard je suis competing.

          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

          • [^] # Re: Atlas Cocos2d...

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

            Tu es en concurrence avec tous les moteurs de jeu vidéo qui utilisent des atlas, certains depuis très longtemps, et avec des outils plus intégrés que le tien.
            Par contre, il n'existe à ma connaissance aucune bibliothèque pour faire des atlas, ce qui force chacun à s'écrire sa propre solution (ou à la voler au voisin), donc ton logiciel répond bien à un besoin… mais tu arrives un peu tard, et sur un marché qui de toute façon ne valorise pas la "standardisation".

            J'ai un avis mitigé sur la pertinence de ton projet, d'un côté tu réponds à un besoin, mais d'un autre côté tu renforces la fragmentation du monde du jeu vidéo libre, ce qui est une erreur faite par l'écrasante majorité des développeurs de JV libres.

            Arrêtez de développer votre petit projet dans votre coin ! C'est sûrement très marrant mais ça n'aide pas la cause du jeu vidéo libre… Est-ce qu'il vaut mieux être le seul aux commandes d'un projet de jeu vidéo pas marrant et utilisé par 10 personnes, ou n'avoir qu'une partie du pouvoir de décision dans un jeu de qualité et utilisé par une large audience ? Chacun fait son choix mais à force de choisir la première alternative on a du mal à faire des jeux décents.

            Signé : quelqu'un qui travaille sur un JV libre qui a un peu de succès, et qui a du mal à trouver des contributeurs.

            • [^] # Re: Atlas Cocos2d...

              Posté par . Évalué à  5 .

              Tu penses que le problème des JV libres, c'est un manque de codeurs et pas de graphistes?

              Depending on the time of day, the French go either way.

              • [^] # Re: Atlas Cocos2d...

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

                Le problème, c'est la fragmentation, qui divise l'attention des gens capables de contribuer (qu'ils soient codeurs, graphistes, traducteurs, …). On manque de graphistes, de gens pour faire les effets sonores, de traducteurs, et de codeurs dans une moindre mesure (on trouve toujours des gens pour écrire 500 lignes de code, on trouve rarement des gens motivés et qualifiés qui prennent en charge un module pendant plusieurs années).

                Pour faire de meilleurs jeux vidéo libres, la communauté a besoin de deux choses :

                • des compétences en création de contenu (graphismes, son, …)
                • se concentrer sur quelques projets au lieu d'avoir comme actuellement plus de projets que de développeurs
                • [^] # Re: Atlas Cocos2d...

                  Posté par . Évalué à  3 .

                  Mouais, j'sais pas si il y a vraiment une telle fragmentation pour ce qui est du JV libre, je veux dire dans les outils de base (après que l’on ait un, deux, trois ou cinquante clones de MarioKart à un moment M n’est pas vraiment problématique), mais je peux me tromper.
                  Par contre, il y a véritable manque de personnes qui ne codent pas, mais qui s'occupent du reste, et je pense qu'il serait plus utile de réfléchir aux raisons de ce déséquilibre, et aux moyens de le renverser.

                  Depending on the time of day, the French go either way.

                  • [^] # Re: Atlas Cocos2d...

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

                    Mouais, j'sais pas si il y a vraiment une telle fragmentation pour ce qui est du JV libre, je veux dire dans les outils de base (après que l’on ait un, deux, trois ou cinquante clones de MarioKart à un moment M n’est pas vraiment problématique), mais je peux me tromper.

                    Justement, c'est un problème, ça divise les ressources et l'attention ! C'est certes très amusant de démarrer chacun son projet de jeu, mais il faut une vraie équipe pour avoir un minimum de succès. On ne va jamais s'en sortir si chaque développeur préfère faire son jeu à lui dans son coin (qui est invariablement pourri parce que seul on n'arrive à rien !). Le libre n'a pas les moyens de produire 2000 jeux de rôle, il a les moyen d'en faire 4 ou 5. Pareil pour les autres genres de jeux (qui souffrent un peu moins du syndrome "not my own game", variante du NIH).
                    Aujourd'hui les jeux libres se font concurrence, pas tellement pour les joueurs (le gâteau est gros, il y en a pour tout le monde), mais pour l'attention des contributeurs.

                    Ça nous fait une belle jambe qu'il y ait plus de graphistes si ils vont tous travailler sur un jeu différent !

                    On (chaque projet) manque toujours de gens pour accomplir les tâches qui ne sont pas du code, mais cela ne viendra qu'en acquérant suffisamment de notoriété (ce qui ne peut se produire que dans un environnement pas trop fragmenté).

                    Le ratio "nombre de jeux libres qui sont bien"/"nombre de jeux libres" est tout simplement honteux.

                    • [^] # Re: Atlas Cocos2d...

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

                      C'est certes très amusant de démarrer chacun son projet de jeu

                      Le jeu libre c'est principalement des gens qui font ça sur leur temps libre, donc le fun prime sur le résultat. Si on pouvait gagner de l'argent en faisant des jeux libres de qualité, ça inciterait les gens à se regrouper.

                      On a déjà évoqué ici de pouvoir vendre des bundles ou même vendre les jeux indépendamment, malheureusement c'est très compliqué en France, car il ne semble pas exister de statut légal pour le développeur amateur qui a un métier principal.

                      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

                      • [^] # Re: Atlas Cocos2d...

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

                        Sur le statut légal : il y a l'auto-entreprise… en tout cas il y avait jusqu'à la suppression de la taxe professionnelle. Mais le but n'est pas forcément lucratif… je ne pense pas qu'un jeu libre puisse être vendu suffisamment pour payer le travail réalisé à un niveau équivalent à un salaire.

                        Quand tu écris un logiciel, s'il n'est pas ou très peu utilisé, alors ton logiciel n'a servi à rien à part à t'amuser toi. C'est respectable, mais lorsque cette attitude se généralise ("je m'en fiche d'avoir des utilisateurs je veux juste m'amuser") ça devient difficile d'avancer pour ceux qui ne se contentent pas de se faire plaisir à eux et qui souhaitent aussi faire plaisir à leurs utilisateurs. C'est cela que je dénonce dans le jeu vidéo libre aujourd'hui. Chacun s'éclate dans son coin, on ne produit rien, et on nuit à ceux qui souhaitent produire en les rendant inaudibles.

                        • [^] # Re: Atlas Cocos2d...

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

                          Sur le statut légal : il y a l'auto-entreprise

                          Ce que je n'ai pas réussi à savoir sur l'autoentreprise, c'est est-ce qu'il y a des charges fixes? Qu'on me prenne 99% de mes bénéfices, je m'en fous, mais je ne veux pas perdre d'argent.

                          Chacun s'éclate dans son coin, on ne produit rien, et on nuit à ceux qui souhaitent produire en les rendant inaudibles.

                          Oui, moi aussi j'aimerais bien avoir 10 graphistes, 5 musiciens, une équipe marketing, 3 webmasters et deux secrétaires sexy pour Newton Adventure, mais la fragmentation me prive de ces contributions :-)

                          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

                          • [^] # Re: Atlas Cocos2d...

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

                            Ce que je n'ai pas réussi à savoir sur l'autoentreprise, c'est est-ce qu'il y a des charges fixes? Qu'on me prenne 99% de mes bénéfices, je m'en fous, mais je ne veux pas perdre d'argent.

                            L'autoentreprise a été conçue pour qu'il n'y ait pas de charges fixes. Ce qui a été vrai jusqu'à la réforme de la taxe professionnelle, qui a forcé les autoentrepreneurs à payer un machin qui s'appelle, je crois, la contribution économique territoriale. Pour une autoentreprise, cette taxe est assise sur la valeur du logement de l'entrepreneur, ce qui détruit complètement le but de l'autoentreprise.

                            Donc on en revient à ton affirmation : il n'existe pas de mécanisme légal pour percevoir des revenus d'appoint en France. En pratique, il paraît que déclarer ces revenus complémentaires en BIC permet au moins d'être en règle avec le fisc, et l'URSSAF ferme les yeux si ce n'est pas trop gros… mais je ne sais pas dans quelle mesure c'est une base fiable.

                      • [^] # Re: Atlas Cocos2d...

                        Posté par . Évalué à  9 .

                        Le jeu libre c'est principalement des gens qui font ça sur leur temps libre, donc le fun prime sur le résultat.

                        C'est un peu comme les desktop libre alors? ;-)

                        Ah, mince on n'est pas Vendredi..

                    • [^] # Re: Atlas Cocos2d...

                      Posté par . Évalué à  6 .

                      En fait, je me demande si le problème n’est pas ailleurs. Si tu regardes sur Kongragate, Newgrounds, Jay is Game, et la scène indé en général, tu as quand même une tripotée de jeux, à la qualité variable, certes, mais tu trouves clairement plus de jeux de qualité que ça soit au niveau du game play, ou du graphisme, que dans les jeux libres. Je ne pense pas que ça soit à cause de l’éclatement de la scène vidéoludique libriste, mais parce que ces deux groupes ne sont pas du tout composés de la même population. Le ticket d’entré pour faire un jeu flash est moins élevé pour un graphiste, vu qu’il utilise Degas l’outil pour payer son loyer, en fait le libre manque d’outils faciles à prendres en main pour concevoir, développer, et distribuer des petits jeux.
                      J’suis désolé pour ma réponse un peu confuse, mais je n’arrive pas exactement à articuler le fond de ma pensée.

                      Depending on the time of day, the French go either way.

            • [^] # Re: Atlas Cocos2d...

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

              J'ai un avis mitigé sur la pertinence de ton projet, d'un côté tu réponds à un besoin, mais d'un autre côté tu renforces la fragmentation du monde du jeu vidéo libre, ce qui est une erreur faite par l'écrasante majorité des développeurs de JV libres.

              Quelle solution existante j'aurais pu utiliser selon toi?

              Arrêtez de développer votre petit projet dans votre coin !

              C'est justement ce que je fais! Au lieu de publier mes outils et spécifier un format, j'aurais pu faire comme tous les autres: des métadonnées spécifiques à mon seul jeu.

              Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

              • [^] # Re: Atlas Cocos2d...

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

                Quelle solution existante j'aurais pu utiliser selon toi?

                Celle mise en œuvre par un jeu libre que tu connais et que tu aimes bien ? Il y a celle que je connais parce que je l'ai développée il y a 4 ans, et il y en a des millions d'autres certainement bien meilleures. Encore une fois, tous les jeux qui utilisent des atlas ont leur propre outil… Tu arrives après la bataille, ce n'est pas toi qui vas faire changer quiconque (sauf si tu développes un nouveau Wesnoth, et encore). Pour moi tu avais deux possibilités :
                * réutiliser une solution existante (le plus intelligent, mais ça demande d'évaluer la qualité et la pérennité, et par expérience c'est difficile), en l'améliorant si nécessaire
                * récrire la tienne dans ton coin (le plus marrant, et ça t'apprend des trucs, mais c'est pas forcément le plus efficace, et même si tu es très très intelligent je te garantis que ce n'est pas le moyen d'avoir le meilleur code)

                C'est justement ce que je fais! Au lieu de publier mes outils et spécifier un format, j'aurais pu faire comme tous les autres: des métadonnées spécifiques à mon seul jeu.

                Déjà tu te compliques la vie, ton format est bien plus complexe que nécessaire. Un atlas, c'est un tas d'images dans un .png, et un fichier de coordonnées à côté, il n'y a pas besoin d'un nouveau format d'image a fortiori non compressé. Quant à la notion d'animation, elle ne sert à rien si tu ne prévois pas de faire un codage inter, ce que tu as raison de ne pas faire pour un atlas.

                J'ai l'impression que tu t'imagines que tu crées un nouveau standard. En réalité, tu crées encore un projet qui prétend à l'universalité, dont la qualité et la pérennité ne sont pas prouvées, et donc tu contribues au brouhaha ambiant dans le libre. Ta démarche part d'un bon sentiment, mais au final tu ne fais qu'augmenter la fragmentation. (Bon, d'un autre côté c'est un projet Java, et Java est un écosystème à part.)

                • [^] # Re: Atlas Cocos2d...

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

                  Déjà tu te compliques la vie, ton format est bien plus complexe que nécessaire. Un atlas, c'est un tas d'images dans un .png, et un fichier de coordonnées à côté.

                  Ce qui est plus complexe à parser qu'un fichier protobuf: avec ma solution tous les langages populaires peuvent disposer d'un parser de nanim en lançant UNE commande.

                  Quant à la notion d'animation, elle ne sert à rien si tu ne prévois pas de faire un codage inter, ce que tu as raison de ne pas faire pour un atlas.

                  lapin compris

                  tu crées encore un projet qui prétend à l'universalité, dont la qualité et la pérennité ne sont pas prouvées, et donc tu contribues au brouhaha ambiant dans le libre

                  Encore une fois quelle est l'alternative existante? Les formats existants sont spécifiques aux différents jeux et donc ne sont pas une bonne option…

                  Bon, d'un autre côté c'est un projet Java, et Java est un écosystème à part.

                  Les outils sont en Java, mais tu peux générer un parser pour C++, Python, Java, …

                  Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

              • [^] # Re: Atlas Cocos2d...

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

                Quelle solution existante j'aurais pu utiliser selon toi?

                Peut-être celle de Cocos2d justement? un png + un fichier xml, niveau facilité d'utilisation ca me semble un cran au dessus de ce que tu propose… Et il existe déjà des implémentations (pour ObjectiveC/iOS , Javascript, probablement python et Java/android) et quelques outils pour les générer (mais peut-être pas libre, ni sur toutes plateformes, y a sans doute du travail pour toi de ce cote la!)

                Vraiment désolé mais ton projet semble effectivement souffrir de la maladie du "not invented here"…

                • [^] # Re: Atlas Cocos2d...

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

                  Peut-être celle de Cocos2d justement?

                  Tu as un lien vers la spec de ce format d'animation?

                  un png + un fichier xml, niveau facilité d'utilisation ca me semble un cran au dessus de ce que tu propose

                  Non, il n'y a rien à faire pour écrire un parser de fichier spécifié avec protobuf: le parser est généré. On ne peut pas faire plus simple :-)

                  Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

                  • [^] # Re: Atlas Cocos2d...

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

                    Tu as un lien vers la spec de ce format d'animation?

                    Je ne trouve pas, ce qui montre qu'il y a de l'espace dans ce projet pour consolider l'existant… Je n'ai pas trouve d'outil libre pour générer des atlas non plus, par contre il y a plein d'outils non libre, il y a donc aussi de la place pour quelqu'un comme toi qui veut faire des outils autour d'un format.

                    Non, il n'y a rien à faire pour écrire un parser de fichier spécifié avec protobuf: le parser est généré. On ne peut pas faire plus simple :-)

                    Parfois, le plus simple sur le papier n'est pas le plus simple a utiliser.
                    Il est bien gentil ton format d'animation, mais une fois que j'ai charge ton protobuf en RAM, j'ai encore plein de boulot a me taper a la pogne. Protobuf est un format de donnée "bête" (et c'est normal), ce qui fait qu'il n'a aucune idée que le flux de bytes que tu mets dans Image.pixels est une image. En plus c'est a moi de faire gaffe a la taille de l'image et au format de pixel, alors que si je charge bêtement une PNG avec la lib qui va bien, j'ai rien a m'occuper et je peux l'envoyer directement dans mon canevas ou ma lib opengl. Et si j'utilise un moteur de jeu quelconque, soit il aura deja son format de fichier privilégier et je n'aurais vraiment rien a faire, soit il faudra que j'écrive tout le code qui va convertir ta structure de donnée en la sienne. En définitive, j'aurais aussi vite fait de refaire un Nieme loader rien qu'a moi mais que je maitriserais a 100%…

                    Désolé mais malheureusement je n'ai pas l'impression qu'en l'état ton projet propose quelque chose de suffisamment intéressant pour que quelqu'un d'autre que toi ai envie de l'utiliser…

                    • [^] # Re: Atlas Cocos2d...

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

                      En plus c'est a moi de faire gaffe a la taille de l'image et au format de pixel, alors que si je charge bêtement une PNG avec la lib qui va bien, j'ai rien a m'occuper et je peux l'envoyer directement dans mon canevas ou ma lib opengl.

                      Il va te manquer le texture packing et les infos d'animation.

                      Et si j'utilise un moteur de jeu quelconque, soit il aura deja son format de fichier privilégier et je n'aurais vraiment rien a faire, soit il faudra que j'écrive tout le code qui va convertir ta structure de donnée en la sienne.

                      Si tu utilises un moteur de jeu complet, nanim ne s'adresse pas à toi! Il y a 2 ans quand j'ai commencé Newton Adventure, je n'ai pas trouvé ce que je voulais comme moteur libre, simple et performant capable de faire de la 2D avec des rotations et un moteur physique. La situation a peut être évoluer, ça pourrait une très bonne dépêche si tu es au courant de ce qui se fait aujourd'hui!

                      Désolé mais malheureusement je n'ai pas l'impression qu'en l'état ton projet propose quelque chose de suffisamment intéressant pour que quelqu'un d'autre que toi ai envie de l'utiliser…

                      Pour expliquer un peu plus ma démarche: mon projet principal c'est Newton Adventure et je vois les outils que je développe pour comme des bénéfices collatéraux! En me forçant à les coder comme des projets à part, j'espère qu'ils serviront à d'autres.

                      Pour l'instant, Newton Adventure a donné naissance à:

                      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

      • [^] # Re: Atlas Cocos2d...

        Posté par . Évalué à  2 .

        Vu le nombre petit de sprite par nanim, tu pouvais faire le test exhaustif (au moins sous forme d'option pour comparer avec ton heuristique). C'est pas parce que l'algo est en temps exponentiel, que cela devient insupportable pour une centaine d'éléments.

        "La liberté de tout dire n'a d'ennemis que ceux qui veulent se réserver le droit de tout faire". "La question n'est pas de savoir si vous avez quelque chose à cacher. La question est de savoir si c'est nous qui contrôlons le gouvernement ou l'inverse

        • [^] # Re: Atlas Cocos2d...

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

          Il n'y aura pas toujours un petit nombre de frames par nanim. Un fichier nanim peut contenir plusieurs animations et donc potentiellement tous les sprites d'un jeu ou d'un niveau.

          Toutefois j'implémenterais d'autres solutions si je constate un problème avec l'algo actuel.

          J'accepte aussi les contributions si quelqu'un a envie de faire mieux :-)

          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

  • # Juste un mot…

    Posté par . Évalué à  8 .

    Salut,

    je n'y connais rien en jeux vidéos, je lis ça de loin et je comprends ce qu'un néophyte peut en aborder en quelques minutes, mais je tenais à :
    - te remercier pour proposer cet optimiseur
    - t'encourager pour la suite.

    Tu aurais pu ne rien dire et ne rien donner, et tu gardes pour l'instant de la retenue et de l'optimisme dans toutes tes réponses.

    Bravo.

    ­La faculté de citer est un substitut commode à l'intelligence -- Somerset Maugham

    • [^] # Re: Juste un mot…

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

      Tu aurais pu ne rien dire et ne rien donner, et tu gardes pour l'instant de la retenue et de l'optimisme dans toutes tes réponses.

      En fait j'ai souvent envie de mordre mon clavier, mais juste avant j'utilise systématiquement la technique de méditation bouddhiste Zen With Zenitram.

      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

      • [^] # Re: Juste un mot…

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

        ah toi aussi tu tournes ton clavier 7 fois avant d'appuyer sur la touche entrée pour valider ?
        (moi depuis que j'ai un portable ça m'a bien dissuadé, j'en avais marre de rebrancher l'alim' /o\).

  • # Questions techniques

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

    Je suis un peu ce que tu racontes sur LinuxFR au sujet de Newton Adventure et j'ai l'impression de te voir passer par les mêmes étapes que j'ai vécues en faisant mon jeu.

    Pour le coup, je n'ai jamais cherché à répondre à la question de l'optimisation placement des sprites dans les textures, bien qu'elle se pose depuis le début, et j'ai tendance à le faire au cas par cas. Mais si je devais m'y mettre, la première question concernerait une solution pour remplir l'espace restant après avoir posé les sprites d'une anim.

    Par exemple, j'ai une animation de 3 sprites en 32x32 et une autre de 5 sprites. Je veux les mettre dans des textures de 64x64. A priori j'aimerais me retrouver avec deux images au final. Est-ce que ton format d'animation et ton optimiseur permettent cela facilement ?

    J'ai eu des soucis avec des sprites auxquels j'appliquais une rotation dans le jeu : un bord du sprite voisin avait tendance à apparaître dans la rotation. Pour éviter cela, j'ai ajouté une bande d'un pixel transparent autour de mes sprites. Est-ce que ton outils permet de mettre une marge entre les sprites ? Envisages-tu de le faire ?

    • [^] # Re: Questions techniques

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

      Par exemple, j'ai une animation de 3 sprites en 32x32 et une autre de 5 sprites. Je veux les mettre dans des textures de 64x64. A priori j'aimerais me retrouver avec deux images au final. Est-ce que ton format d'animation et ton optimiseur permettent cela facilement ?

      Avec les paramètres que j'ai mis, ça va tout mettre dans une texture de 128x128. Si tu veux limiter à 64x64, tu peux changer la méthode createDefaultPossibleTextureDimensions.

      Est-ce que ton outils permet de mettre une marge entre les sprites ? Envisages-tu de le faire ?

      C'est le prochain item sur ma todo list!

      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

      • [^] # Re: Questions techniques

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

        "createDefaultPossibleTextureDimensions", au début j'ai trouvé ça long et moche, et puis je me suis souvenu que tu codais en Java.

        Tu es un fervent utilisateur de http://www.classnamer.com ?

        • [^] # Re: Questions techniques

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

          Je suis adepte des noms de classes et méthodes explicites de 3m de long. Que ce soit en Java ou ailleurs.

          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

  • # Retours d'expérience

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

    Comme je te le dis dans le post plus haut, j'ai l'impression de te voir passer par les étapes que j'ai vécue. Alors je te propose un petit retour d'expérience.

    Je ne pense pas que j'utiliserai ton système car, sans vouloir t'offenser, j'ai le sentiment que tu es encore un poil naïf. Je n'ai pas l'impression dans tes propos que tu aies bien fait le tour du besoin. Il est certes utile d'avoir un format d'animation, mais il y a bien d'autres questions qui se posent dans la gestion de l'anim et je doute que le format soit primordial. Par exemple, dans le développement de mon jeu, nous sommes passés par ce genre d'étapes (uniquement sur l'aspect graphique, je passe le moteur physique, le son, les inputs, l'interface, l'IA, etc.) :

    1. On veux des images. C'est facile
    2. Puis on veut des animations. Pas de problème, on fait un super format XML, un éditeur, on gère la durée des frames une à une, on gère le nombre de boucles, on gère le début et la fin de la partie à boucler.
    3. Puis finalement on se dit que pour faire les personnages et d'autres trucs complexes, il nous faut plusieurs animations. OK, on fait un super format XML, un éditeur, et on gère un concept d'action de personnage durant laquelle une animation est jouée.
    4. Puis finalement on met plusieurs animations positionnées les unes par rapport aux autres. Et puis pendant qu'on y est on gère l'enchaînement des actions et un système de connexion avec le code du personnage (i.e. la fonction à appeler à un moment ou à un autre d'une action).
    5. Et puis finalement c'est pas au point, le mouvement des anims les unes par rapport aux autres est trop brutal alors on ajoute aussi l'interpolation de mouvement.
    6. Et puis finalement il y a plein d'images à l'écran et on dessine plusieurs fois certains points à l'écran. Alors on fait un super algo qui découpe les sprites à l'affichage pour éviter de dessiner les parties invisibles. Et puis on implémente un algo qui calcule le plus grand rectangle opaque dans chaque sprite pour optimiser l'affichage.

    Et au bout d'un moment on se demande : où est le contenu du jeu dans tout ça ? On a un super moteur qui répond à quasiment toutes nos problématiques, modulaire et indépendant de notre jeu, on a quasiment pas de niveaux, et on voit les autres développeurs de jeux qui revivent la même histoire.

    Si je n'ai qu'un conseil à te donner, c'est de te concentrer sur le contenu de ton jeu. Attention à ne pas passer trop de temps sur la technique ; c'est très satisfaisant mais ça ne fait pas avancer le jeu. Va au plus simple, capitalise sur le concept, et essaie de te montrer sur des sites de jeux genre indiedb afin d'avoir des retours sur ce qui compte dans les jeux : le contenu.

    • [^] # Re: Retours d'expérience

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

      essaie de te montrer sur des sites de jeux genre indiedb afin d'avoir des retours sur ce qui compte dans les jeux : le contenu

      et pourquoi pas sur http://jeuxlibres.net comme ce qui a été mis à jour : http://jeuxlibres.net/showgame/newton_adventure.html ?
      Bon, c'est un exemple, il y a aussi jeuxlinux.fr et bien d'autres recensés sur http://faq.tuxfamily.org/CommunicationLibre/Fr et plus spécifiquement sur la page concernant les jeux.

      Oui, cela demande pas mal de comm' (et souvent d'expliquer les tenants et aboutissants d'avoir choisi de faire son jeu en libre, qui doit sans doute dissuader quelques contributeurs…) mais cela n'en vaut-il pas le coup ? Quitte à faire un jeu, autant qu'il soit utilisé ?
      Je suis preneur de commentaires sur cette page d'ailleurs :-) (qui est sûrement très incomplète).

      • [^] # Re: Retours d'expérience

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

        Le problème que je vois dans jeuxlibres.net et jeuxlinux.fr, mais aussi happypenguin.org et lgdb.org, c'est qu'ils mettent le focus sur des qualités des jeux qui ne sont pas les plus importantes : c'est libre ou ça tourne sous Linux.

        Je ne dis pas que ce ne sont pas des qualités mais ça me semble aussi peu intéressant que de présenter son jeu sur un site sur Java par exemple. Ça ne concerne aucunement ce qui me semble être le plus important, c'est à dire le contenu. En allant sur des sites de jeux indépendant, ce qu'est effectivement Newton Adventure, les échanges et les commentaires tourneront autour du jeu, et le projet avancera.

        Ce sont les retours des joueurs qui donnent envie de bosser sur les projets. Et les joueurs de jeux sous Linux, ou de jeux libres, sont avant tout des joueurs. Vu le temps que ça demande de communiquer sur un projet, autant le faire au plus efficace, c'est à dire sur des sites internationaux de jeux. Ça n'empêche pas de discuter de technique ou de liberté sur d'autres sites, mais il vaut mieux le faire s'il reste du temps.

        Un type de contributeur que j'aimerais bien avoir et que je n'ai jamais vu serait une personne qui suivrait l'avancée du projet quasiment en permanence. Elle publierait avec un regard externe les avancées, et plutôt d'une manière orientée jeu. Aujourd'hui les nouvelles sont liées à la sortie du logiciel, et la plupart des articles sont carrément proposés par les développeurs. Ça me semblerait plus utile d'avoir un suivi à la semaine ou au mois des nouveautés en cours de développement, et ça aiderait les projets à ne pas sembler morts durant les années qui séparent les sorties.

        • [^] # Re: Retours d'expérience

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

          En allant sur des sites de jeux indépendants

          lesquels ?

          autant le faire au plus efficace, c'est-à-dire sur des sites internationaux de jeux

          tu as dû louper http://freegamedev.net/wiki/Main_Page que j'indique sur http://faq.tuxfamily.org/CommunicationLibreGame/Fr ? (il y en a d'autres)

          Elle publierait avec un regard externe les avancées, et plutôt d'une manière orientée jeu

          c'est ce qui serait intéressant sur jeuxlibres.net : faire se rencontrer ceux qui ont essayé le jeu et ceux qui cherchent à l'améliorer ; cela toucherait un public différent du forum dédié au jeu.

          ça aiderait les projets à ne pas sembler morts durant les années qui séparent les sorties.

          release early, release often : c'est si dur de packager un tar.bz2 (ou tar.lzma) ? Autant l'automatiser quand il y a des améliorations suffisantes le permettant (au pire, tous les 6 mois, mais ça doit bien être faisable une fois tous les 2 mois si le "packaging" et la génération du changelog sont automatiques ?).
          Je te rejoins, généralement cela demande une personne "extérieure" qui peut faire le point et donner quelques indications sur ce qu'il reste à finaliser.

          • [^] # Re: Retours d'expérience

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

            Quitte à me répéter, les sites que tu listes sont orientés vers le libre et je ne pense pas que ce soit le point le plus important. Pour faire un jeu libre il faut faire un jeu (ça prend plusieurs mois) et copier une licence libre dans le dossier du jeu (ça prend une seconde au début du projet). Une fois que la licence est copiée, il vaut mieux, à mon avis, aller se montrer aux joueurs.

            Pourquoi aller sur freegamedev.net plutôt que gamedev.net ? J'en apprends plus sur gamedev.net et j'y ai même trouvé des contributeurs pour mon jeu libre. Sur les sites qui tournent autour du libre j'ai plutôt des retours qui me disent « t'as vu ce que font les gens de XXX ? » ou pire, « pourquoi tu ne vas pas sur openfreefreedomartandstuff.org pour trouver tes ressources ? »

            Pourquoi aller sur jeuxlibres.net se montrer à un petit groupe de francophones plutôt que sur indiedb, où des joueurs du monde entier essaieront le jeu ? Si vous voulez supporter le jeu libre, ce n'est pas pour les libristes qu'il faut faire des sites, c'est pour les joueurs.

            Quand il s'agit d'outils informatiques, de bureautique par exemple, les utilisateurs du libre cherchent des alternatives à des outils fermés. Ce n'est pas aussi vrai pour les jeux, où les utilisateurs cherchent plutôt des nouveaux jeux.

            release early, release often : c'est si dur de packager un tar.bz2 (ou tar.lzma) ? Autant l'automatiser quand il y a des améliorations suffisantes le permettant (au pire, tous les 6 mois, mais ça doit bien être faisable une fois tous les 2 mois si le "packaging" et la génération du changelog sont automatiques ?).

            Oui c'est dur de packager un tar.xxx et de le diffuser. Les ajustements pour les différentes plates-formes demandent du temps. L'annonce d'une nouvelle version et son résumé demandent du temps. L'upload met du temps à se faire. L'appli mets du temps à compiler. Le public ne veut pas du source, il veut un truc pour son système, alors faire un deb/rpm ou une compilation statique prend aussi du temps.

            Il me faut généralement un jour et demi pour finaliser l'archive de mon jeu. Après quoi il faut encore rédiger l'annonce de la nouvelle version et la diffuser.

            Donc à mon avis, qui ne vaut que ce qu'il vaut, l'énergie dépensée pour entretenir des sites comme jeuxlibres.net ou jeuxlinux.fr serait mieux investie dans une veille de l'avancement du dev des jeux et la publication des avancées sur des sites de jeux (pas « jeux libres », juste « jeux »). Ça soulagerait les developpeurs, ça augmenterait la visibilité et les retours et donc leur motivation.

            • [^] # Re: Retours d'expérience

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

              Pourquoi aller sur jeuxlibres.net se montrer à un petit groupe de francophones plutôt que sur indiedb, où des joueurs du monde entier essaieront le jeu ?

              Je suis aussi présent sur indiedb qui ne m'a ramené que 2 commentaires… De plus les news sont filtrées, il faut vraiment proposer un super article pour être publié, ce qui rend difficile la mise à disposition de release intermédiaire. De plus ils n'acceptent que les contenus originaux, donc si tu as déjà publié ta news ailleurs, c'est mort…

              Pour faire de l'audience, il faut être présent sur beaucoup de sites et passer du temps à rédiger articles sur articles. Je le fais un peu de temps en temps, mais ma force de frappe est limité, surtout que ce qu'apprécie les joueurs ce sont les tests, pas l'autopromotion.

              Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

            • [^] # Re: Retours d'expérience

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

              Oui c'est dur de packager un tar.xxx et de le diffuser.
              Les ajustements pour les différentes plates-formes demandent du temps.
              L'appli mets du temps à compiler.

              Avec du Java c'est quand même plus simple!

              Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

        • [^] # Re: Retours d'expérience

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

          Le gros problème de jeuxlibres.net ou happypenguin.org, c'est que ce sont des bases de données.

          Les sites qui attirent des joueurs proposent des tests, des trucs et astuces, des solutions, des rétrospectives, des interviews, bref un travail de journaliste que l'équipe de développement d'un jeu ne peut faire (ou alors ça tourne à la publi-information indigeste).

          En fait il manque (ou je n'ai pas encore trouvé) un site consacré aux jeux libres dont les rédacteurs sont des amateurs de jeux vidéos et pas des développeurs :-)

          Il faudrait peut être entrer en contact avec les créateurs de jeuxlibres.net pour leur soumettre ces idées…

          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

          • [^] # Re: Retours d'expérience

            Posté par (page perso) . Évalué à  2 . Dernière modification : le 23/04/12 à 23:25

            jeuxlibres.net permet d'écrire des dépêches, comme sur linuxfr.org :-) (il suffit de s'inscrire)

            Cela peut donc concerner un retour de test, des trucs et astuces, des rétrospectives…
            En outre, il est possible de laisser des commentaires (bon, sans le système de notation propre à LinuxFr.org mais bon), de même il suffit de s'inscrire ;-)

            C'est par exemple ainsi que lanpower a repris en partie l'animation du site.

            • [^] # Re: Retours d'expérience

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

              C'est par exemple ainsi que lanpower a repris en partie l'animation du site.

              Oui le site semble bouger un peu plus après une période de calme. Au passage j'espère qu'ils augmenteront la taille de la police et des screenshots, car c'est vraiment trop petit!

              Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

        • [^] # Re: Retours d'expérience

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

          Mon problème avec ces sites, c'est le rapport signal sur bruit. 90% des jeux qui sont présentés sont soit mauvais, soit sans rapport avec mes goûts personnels. Au final on est perdu dans la masse. C'est particulièrement vrai pour Happypenguin, d'ailleurs.

    • [^] # Re: Retours d'expérience

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

      Je n'ai pas l'impression dans tes propos que tu aies bien fait le tour du besoin.

      Mon besoin, c'était:

      • un format gérant des images 32 bits RGBA.
      • gérer le texture packing de plusieurs animations.
      • facile à parser, directement chargeable par opengl et réutilisable.

      Jusqu'ici je réponds à 100% à mon besoin et je m'en suis d'ailleurs félicité 3 fois ce matin en m'admirant nu dans le miroir.

      Si je n'ai qu'un conseil à te donner, c'est de te concentrer sur le contenu de ton jeu.

      J'ai passé cette phase il y a longtemps :-)

      Avec ses 25 niveaux, Newton Adventure est loin d'être un jeu vide et la prochaine version comportera un scénario, de nouveaux graphismes, des niveaux supplémentaires…

      Par contre, ce n'est plus tellement moi qui ajoute du contenu, mais d'autres contributeurs, donc j'ai le temps de proposer des solutions techniques hors de mon jeu.

      Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

      • [^] # Re: Retours d'expérience

        Posté par . Évalué à  3 .

        Tout d'abord bravo pour ton jeux et ta librairie/ton outil, devnewton.

        Juste une question: l'étape d'après les animations sera la détection des collisions, non?
        Ça me parait lié, enfin si on veut avoir une détection des collisions précise au pixel près..

        • [^] # Re: Retours d'expérience

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

          Pour les collisions, pas seulement la détection, j'utilise phys2d, un moteur physique où l'on décrit les objets et les personnages d'un niveau selon différentes propriétés:

          • la forme (cercle, rectangle ou polygone)
          • le poids
          • la "friction"
          • les mouvements possibles de l'objet: il peut être déplaçable, pivotable ou toujours immobile.

          Après il y a des forces globales (la gravité ou la force du vent) ou ponctuelles (une collision avec des piques fait bondir Newton).

          Pour des raisons de performance, la collision au pixel près n'est pas possible, je me contente des formes simples proposées par phys2d.

          De plus en plus de jeux 2D font comme ça, mais plutôt avec box2d, un moteur plus moderne (l'auteur même de phys2d le conseille et malheureusement pour moi a arrêté de travailler sur phys2d).

          Newton Adventure est sur Lumière Verte : http://steamcommunity.com/sharedfiles/filedetails/?id=187107465

Suivre le flux des commentaires

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