URL: https://linuxfr.org/users/devnewton/journaux/naissance-du-projet-nanim Title: Naissance du projet nanim Authors: devnewton 🍺 Date: 2012年04月17日T21:17:39+02:00 License: CC By-SA Tags: animation, nanim, newton_adventure, format_ouvert, 2d, jeu_vidéo et jeux_linux Score: 30 Origine ======= Dans le cadre du développement de Newton Adventure, j'utilisais jusqu'ici le format gif pour les sprites animés. Malheureusement ce format est limité à 256 couleurs par image. J'ai cherché une alternative: * mng: ce format, qui aurait du être le successeur du gif est assez compliqué et peu utilisé. * apng: un peu plus simple et un peu plus répandu, il se veut une alternative au précédent. * fli, flc et autres: il existe beaucoup de vieux formats d'animation, mais ils sont souvent peu connus, pas très simples, pas toujours bien spécifiés. * Utiliser un format spécifique: la plupart des jeux regroupe leurs animations dans une grande image et stockent les informations relatives à l'animation dans un fichier à part, souvent en XML. Aucune de ces solutions ne m'a enthousiasmé, j'ai donc décidé de créer mon propre format tout en créant un projet à part pour ne pas en faire un nieme format utilisable par un seul jeu. Le projet ========= J'ai donc créé **nanim**, un format: * simple: non compressé, il stocke juste une liste d'animations, de frames et de nimages RGBA ou RGB. * facile à lire et à écrire: nanim est spécifié via [protobuf](https://code.google.com/apis/protocolbuffers/), il est donc très facile de générer des décodeurs et des encodeurs dans un grand nombre de langages. * fait pour les jeux: au lieu de stocker une nimage par frame, chaque frame possède juste des coordonnées dans une des images. Cela permettra à l'avenir de générer un fichier nanim optimisé pour les cartes graphiques. Outre les spécifications en protobuf, j'ai écris trois utilitaires, **nanimenc**, **nanimdec** et **nanimviewer**, afin de créer des fichiers nanim à partir de png, d'en extraire les images et de les visualiser. Le futur ======== Avant de sortir cette première version, j'aurais voulu ajouter un utilitaire nommé nanimopt destiné à produire un nanim optimisé depuis un nanim source selon les critères suivants: * regrouper les nimages sources dans un ensemble de nimages dont les dimensions sont des puissances de 2. * minimiser la taille mémoire totale de ces nouvelles nimages optimisées. * si possible mettre les nimages sources d'une même animation dans une même nimage optimisé. Malheureusement, je me suis rendu compte qu'il s'agissait d'un problème NP complet bien connu sous les noms charmants de rectangle bin packing ou texture atlas generation. Devant la difficulté de la tâche, j'ai décidé de repousser son implémentation à plus tard. Téléchargement ============== Les sources sous license BSD de mon travail se trouve sur mon site: http://bci.im/devnewton/fossils/nanim La spécification ================ ``` package im.bci.nanim; option java_outer_classname = "NanimParser"; message Frame { required string imageName = 1; required int32 duration = 2; required float u1 = 3; required float v1 = 4; required float u2 = 5; required float v2 = 6; extensions 1000 to max; } message Animation { required string name = 1; repeated Frame frames = 2; extensions 1000 to max; } enum PixelFormat { RGB_888 = 1; RGBA_8888 = 2; } message Image { required string name = 1; required int32 width = 2; required int32 height = 3; required PixelFormat format = 4; required bytes pixels = 5; extensions 1000 to max; } message Nanim { repeated Image images = 1; repeated Animation animations = 2; optional string author = 3; optional string license = 4; extensions 1000 to max; }; ``` The end ======= Pour finir une nanimation (en gif malheureusement, en attendant de soumettre nanim au W3C): [nanimation](http://images4.fanpop.com/image/photos/16500000/Deschanel-zooey-deschanel-16517357-480-262.gif)

AltStyle によって変換されたページ (->オリジナル) /