GIF vers texture flipbook — Empaquetez n'importe quel GIF dans une bande de frames pour Unity et VRChat

Créez votre propre gif vers flipbook
Empaquetez un GIF dans une texture flipbook à une seule ligne pour Unity, Godot ou VRChat. Grille automatique, métadonnées lignes/colonnes prêtes à l'emploi, arrière-plan transparent.
Un GIF est une chronologie. Une texture flipbook est cette même chronologie empaquetée dans une seule image, afin qu'un shader la parcoure par index au lieu qu'un lecteur recherche des frames. Vous déposez un GIF dans l'outil, il détecte le nombre de frames, les dimensions et le délai, puis écrit une bande à une seule ligne ou en grille avec les métadonnées de lignes et de colonnes que vous collez dans votre matériau.
Cette page couvre ce que produit réellement une conversion gif vers flipbook pour Unity, Godot et VRChat — les quatre nombres dont un shader flipbook a besoin, ce qu'il faut régler sur un matériau Poiyomi, et quand une bande de frames est préférable à une grille. La sortie est un PNG avec un arrière-plan transparent et les nombres de lignes et de colonnes en texte brut à côté.
Déposez un GIF
Le corps de l'outil occupe le premier écran. La zone de dépôt se trouve en haut ; tout ce qui se trouve en dessous est la sortie. Faites glisser un GIF dessus et l'outil lit le nombre de frames, le délai par frame, la taille du canevas et la méthode de disposition. Il indique ce qu'il a trouvé avant d'écrire quoi que ce soit, car les GIF du monde réel ne s'accordent sur aucun de ces quatre points.
Deux points demandent généralement une décision. D'abord, les délais de frames irréguliers : la plupart des shaders flipbook avancent à un FPS constant, donc un GIF aux délais mixtes doit être rééchantillonné à un taux fixe ou exporté à son temps de frame commun le plus lent. Ensuite, la disposition : un GIF qui ne redessine que les régions modifiées entre les frames produira des rémanences si vous empilez les frames naïvement. L'outil composite chaque frame sur un canevas complet avant l'empaquetage, de sorte que les redessins partiels deviennent des frames complètes.
Une fois la composition terminée, l'empaqueteur écrit une seule image. Un GIF de 24 frames en 128x128 devient une bande de 3072x128. Les mêmes frames en grille 6x4 deviennent 768x512. Ce sont les mêmes pixels ; la différence réside dans ce que le shader fait des UV.
01
Déposez le GIF sur la zone de dépôt. Lisez le nombre de frames, le délai et la taille du canevas indiqués.
02
Choisissez la disposition d'empaquetage : une seule ligne pour les shaders à défilement UV, une grille pour les atlas et l'import dans un moteur. Les colonnes de la grille sont choisies automatiquement pour garder l'image proche du carré.
03
Choisissez le taux de rééchantillonnage si le GIF a des délais de frames irréguliers. La valeur par défaut est le délai médian ; choisissez un FPS fixe si votre shader avance à un taux constant.
04
Exportez. Vous obtenez un PNG avec un arrière-plan transparent, plus les lignes, les colonnes, le nombre de frames et le FPS sous forme de texte que vous pouvez coller dans un matériau ou un script.
Ce qu'est une texture flipbook
Un shader flipbook lit quatre nombres : lignes, colonnes, l'index courant et le FPS. Il prend une coordonnée UV dans l'intervalle 0 à 1, la divise en une cellule ligne/colonne, et décale cette cellule selon l'index courant. La texture elle-même est statique. Rien ne s'anime tant que l'index ne bouge pas.
L'index est généralement dérivé du temps. Avec une bande à une ligne, l'index équivaut à floor(temps multiplié par FPS), et la coordonnée U est décalée de l'index divisé par les colonnes. Avec une grille, l'index donne aussi une ligne : la ligne équivaut à floor(index divisé par colonnes), la colonne équivaut à index modulo colonnes. C'est pourquoi la bande à une ligne est le cas le plus simple — il n'y a qu'une seule dimension à parcourir.
Les lignes et les colonnes doivent correspondre exactement à l'image. Une bande de 3072x128 avec 24 colonnes et 1 ligne déclarées s'échantillonne correctement. Déclarez 23 colonnes et chaque frame se décale d'une fraction de cellule, ce qui se lit comme une traînée diagonale. Déclarez 1 colonne et vous obtenez une image statique. Ces deux erreurs expliquent la plupart des flipbooks cassés.
Le FPS est distinct du nombre de frames. Une bande de 24 frames à 12 FPS boucle deux fois par seconde. Une bande de 24 frames à 24 FPS boucle une fois par seconde. Les données de texture sont identiques ; seule l'horloge change. Gardez le FPS au même endroit que les nombres de lignes et de colonnes pour qu'ils ne divergent jamais.
Les quatre nombres
Lignes, colonnes, index, FPS. Les lignes et les colonnes décrivent la texture. L'index et le FPS décrivent le temps. Les lignes et les colonnes sont fixées à l'export. L'index est dynamique et appartient au shader ou au script. Le FPS est fixe pour la plupart des shaders mais peut être piloté par un paramètre lorsque vous voulez contrôler la vitesse.
Si votre shader possède un paramètre de vitesse ou de taux de lecture, il multiplie le terme de temps, pas la constante FPS. Conservez le FPS exporté comme taux de base pour que les métadonnées restent pertinentes lorsque la vitesse vaut 1.
Texture flipbook pour Unity
Dans Unity, le flipbook est généralement un matériau sur un quad ou une particule. Importez le PNG avec sRGB activé, sans mipmaps si les frames sont petites, et alpha est transparence. Le mode d'enroulement doit être Clamp, pas Repeat — un flipbook en Repeat fait passer la dernière frame dans la première au bord UV et affiche une couture d'un pixel.
Il y a deux façons de piloter l'index. Sur un shader Unlit ou Particles avec un nœud flipbook intégré, vous réglez le tiling sur les lignes et les colonnes et lui fournissez une valeur de mélange de 0 à 1. Sur un shader personnalisé, vous écrivez vous-même le calcul UV et exposez les lignes, les colonnes et le FPS comme propriétés de matériau pour pouvoir les modifier sans recompiler.
Les métadonnées à coller : lignes, colonnes, nombre de frames, FPS exporté. Si votre shader utilise un mélange normalisé plutôt qu'un index entier, la plage de mélange va de 0 à nombre de frames divisé par le total des cellules de la grille — pour 24 frames en une seule ligne, cela fait 0 à 1 ; pour une grille 6x4 avec 24 frames sur 24 cellules, cela fait aussi 0 à 1. Les grilles partielles sont le cas qui piège les gens : une grille 6x4 avec 20 frames se termine à 20 divisé par 24, soit environ 0,833. Au-delà, vous échantillonnez des cellules vides.
- Arrière-plan transparentLe PNG exporté conserve l'alpha, donc un flipbook sur un quad n'a pas besoin d'un mélange multiply ni d'un chroma key. Les GIF sources qui avaient une couleur de matte en reçoivent une écrite dans l'alpha à la place.
- Pas de mipmaps aux petites taillesLes frames de moins de 256 pixels de côté sont préférables avec les mipmaps désactivés. La génération de la chaîne de mips mélange les frames adjacentes de la bande, et à distance le flipbook devient une moyenne de toutes les frames.
- Enroulement ClampUn enroulement Repeat sur une bande échantillonne à travers la couture. Réglez l'enroulement U et V sur Clamp pour éviter que la dernière frame ne déborde sur la première.
Flipbook Poiyomi pour VRChat
Poiyomi fournit un nœud flipbook, et c'est la voie habituelle pour une bouche qui parle, un écran défilant ou un basculement à deux frames sur un avatar. Le nœud prend une texture, une paire lignes et colonnes, et une valeur de mélange. VRChat n'exécute pas de code de shader personnalisé depuis un script à l'exécution, donc l'index doit provenir d'une propriété de matériau animée ou d'un paramètre piloté par un animator.
Le maillage compte autant que le matériau. Un flipbook sur un quad plat se lit correctement ; la même texture sur une surface courbe affichera des cellules étirées là où les UV sont répartis inégalement. Gardez les matériaux flipbook sur des maillages planaires ou quasi planaires.
Travaillez en disposition bande pour Poiyomi lorsque l'animation est une boucle, car le calcul UV se réduit à une multiplication et une addition. Utilisez la disposition en grille lorsque l'animation est un ensemble d'états discrets entre lesquels vous voulez sauter — une bouche à quatre formes est plus facile à concevoir comme une grille 4x1 avec un index entier que comme un défilement.
01
Exportez en disposition bande sauf si vous avez besoin d'états discrets. Vérifiez que les lignes valent 1 et que les colonnes valent le nombre de frames.
02
Importez le PNG dans Unity. Réglez le mode d'enroulement sur Clamp, sRGB activé, alpha est transparence activé, streaming désactivé pour les petites textures.
03
Dans Poiyomi, créez un nœud Flipbook. Assignez la texture. Réglez les lignes et les colonnes sur les valeurs exportées.
04
Pilotez l'entrée de mélange. Pour une boucle, fournissez-lui une valeur temporelle issue d'un paramètre float animé. Pour des états discrets, fournissez un index entier converti en mélange.
05
Réglez l'alpha et la file de rendu. Un flipbook qui doit s'estomper utilise les mêmes réglages de transparence que le reste du matériau — n'activez pas de cutout séparé.
06
Testez en mode Play, puis dans un envoi d'avatar. Vérifiez le point de bouclage : la dernière frame doit être suivie de la première sans pause.
Bande de frames ou grille : que faut-il exporter
Les données de pixels sont identiques. Le choix dépend de ce qui les consomme. Les shaders veulent une bande. Les moteurs et les systèmes de sprites veulent une grille. Choisissez en fonction du consommateur, pas de la taille du fichier — une bande est plus large et une grille plus carrée, et les deux se compressent de la même façon à nombre total de pixels égal.
Une bande n'a qu'une ligne, donc la coordonnée V est inutilisée et le shader ne décale que U. Cela fait moins d'instructions et moins d'occasions de se tromper dans le calcul. Une grille utilise les deux axes, ce qu'attendent les systèmes basés sur les atlas. En cas de doute, exportez la bande et ne réexportez en grille que lorsqu'un importateur de moteur en demande une.
Un autre cas est l'animateur de sprites qui attend des frames individuelles. Certains moteurs veulent un dossier de PNG, pas un atlas. L'outil peut écrire les frames séparément, mais l'image sur disque est alors la somme de toutes les frames plutôt qu'un seul fichier, et les réglages d'import sont par frame.
| Consommateur | Disposition | Ce qu'il lit | Remarque |
|---|---|---|---|
| Shader flipbook | Une seule ligne | Lignes 1, colonnes N, décalage U | Le moins d'instructions UV, boucle facile |
| Atlas de sprites | Grille | Lignes M, colonnes N, taille de cellule | La taille de cellule équivaut à la taille du canevas |
| Animateur de sprites | Grille ou PNG séparés | Ordre des frames et FPS | Les PNG séparés perdent l'empaquetage en un seul fichier |
| Import moteur | Grille | Lignes, colonnes, nombre de frames | Gardez l'image proche du carré pour respecter les limites de texture |
Testez-le en 3D
Une texture flipbook sur un plan statique ne prouve rien. Les affirmations que vous devez vérifier sont celles qui n'apparaissent qu'en mouvement : si la couture boucle correctement, si l'alpha tient à distance, si le FPS est convaincant quand la caméra bouge. The Cyclops' Island est une scène jouable construite dans le 3D game builder où les surfaces s'animent en temps réel, de sorte que vous pouvez observer une boucle flipbook à côté de la géométrie plutôt que dans un inspecteur.
Ouvrez-la, parcourez la surface et observez le point de bouclage. Si un flipbook a une frame de moins ou une colonne de trop, vous le voyez là — un accroc visible ou une traînée diagonale — avant même d'envoyer un asset. C'est tout l'argument de la scène jouable : l'échec est visuel, et les échecs visuels ont besoin d'une fenêtre de rendu.
La même scène sert de référence pour la façon dont le défilement des frames se lit à différentes distances et sous différents angles de caméra. Des frames qui semblent correctes à 128 pixels de près crénelleront à distance sans contrôle des mipmaps ; des frames qui semblent correctes de loin peuvent être trop floues de près. Les deux sont plus faciles à juger en mouvement.
Entrez dans le monde auquel elle appartient
Un sprite est un personnage sans endroit où se tenir. La dernière étape est celle que personne d'autre ne propose : prenez la planche que vous venez de créer et placez-la dans un monde où l'on peut se promener — une petite île, une planète, un coin de rue sous la pluie. Chaque monde de ce site a été créé à partir d'une seule description écrite et publié sous forme de page jouable.
FAQ
Qu'est-ce qu'un flipbook Poiyomi ? +
Poiyomi est un package de shaders pour Unity et VRChat, et son nœud Flipbook échantillonne une bande de frames empaquetée pour qu'un matériau fasse défiler les frames sans animator. Vous lui donnez la texture, les lignes et les colonnes, et une valeur de mélange. La valeur de mélange est ce qui fait bouger l'index, et elle est généralement pilotée par un paramètre float animé.
Pourquoi mon flipbook affiche-t-il une traînée diagonale ? +
Le nombre de colonnes déclaré ne correspond pas à l'image. Une bande de 24 frames échantillonnée comme 23 colonnes décale chaque frame d'une fraction de cellule, ce qui s'accumule en une traînée diagonale sur toute la bande. Revérifiez la valeur de colonnes exportée par rapport au nombre réel de frames.
Dois-je exporter une bande ou une grille ? +
Exportez une seule ligne pour les shaders flipbook, car le calcul UV se fait sur une dimension et la boucle est triviale. Exportez une grille pour les atlas de sprites et les importateurs de moteur qui attendent des lignes et des colonnes. Les pixels sont les mêmes ; seul le consommateur diffère.
Comment conserver l'arrière-plan transparent ? +
L'export écrit l'alpha dans le PNG au lieu de l'aplatir sur une couleur. À l'import, réglez alpha est transparence et gardez sRGB activé. Si un GIF source utilisait une couleur de matte plutôt qu'une vraie transparence, l'outil composite des frames complètes sur un canevas transparent pour que le matte ne subsiste pas.
Mon GIF a des délais de frames irréguliers. Quel FPS dois-je utiliser ? +
Choisissez un taux fixe. La valeur par défaut est le délai médian, qui correspond généralement à ce à quoi le GIF ressemble dans un navigateur. Un shader flipbook avance sur une horloge constante, donc des délais mixtes ne peuvent pas être représentés sans rééchantillonnage à un seul temps de frame.
Pourquoi mon flipbook accroche-t-il au point de bouclage ? +
Soit le nombre de frames inclut une dernière frame dupliquée, soit le FPS est légèrement décalé par rapport à la source. Vérifiez ensemble le nombre de frames exporté et la valeur de FPS. Une boucle qui marque une pause est presque toujours une frame en trop plutôt qu'un problème de shader.
Retour au 3D Game Builder
Les 31 mondes 3D, jeux et scènes terminés sont réunis sur une seule page — tous jouables.
Voir les bandes prêtes pour flipbook
Chaque asset de cette bibliothèque est un PNG transparent, prêt pour un jeu, accompagné d'un prompt enregistré — Ressources de sprite sheets et sprite sheets gratuites, étiquetées par action, style et sujet. Consultation et téléchargement gratuits.