Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Utiliser le Sprite Optimizer
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

[Tutoriel] Utiliser le Sprite Optimizer

Posté le 19/08/2018 16:39

Ce topic a pour but d'être à la fois la doc et la page de discussion de l'outil.
Ce document peut ne pas être à jour. La référence officielle est le dépôt GitLab



Qu'est-ce que c'est ?

Le Sprite Optimizer est un outil permettant de générer le code Multi DrawStat optimisé d'une image. Une fois le programme exécuté, il n'y a plus qu'à copier-coller la sortie dans votre éditeur de programme (BIDE par exemple).
Attention, le programme retourne une solution optimisée, qui peut ne pas être la solution optimale. En pratique, la solution proposée est souvent très correcte. Si vous pensez pouvoir faire mieux, n'hésitez pas !
L'outil est librement diffusé sous licence CeCILL 2.1.


Comment l'utiliser ?

Commencez par installer les dépendances puis récupérez l'outil depuis le dépôt de code.
– Python 3 (n'oubliez pas de cocher l'option « ajouter Python et pip au chemin » sous Windows)
– argparse : pip install argparse
– bresenham : pip install bresenham
– pillow : pip install pillow

Ensuite, le fonctionnement est le suivant (pour Windows, une manip plus simple est dispo) :
# Affiche le code uniquement
python3 sprite-optimizer image.png

# Affiche la progression, des infos (lignes, temps d'exécution), et le code
python3 sprite-optimizer -pi image.png

# Retourne le code de l'image pour un ViewWindow inversé (origine en bas à gauche)
python3 sprite-optimizer --flip image.png

# Retourne le code avec un offset de (10, 5)
python3 sprite-optmizer --offset 10 5 image.png

# Affiche l'aide intégrée
python3 sprite-optimizer -h


Le programme possède un shebang pour une exécution plus simple sous Linux : ./sprite-optimizer

Par défaut, l'origine des coordonnées (0, 0) est en haut à gauche. Cela correspond à un ViewWindow 0, 126, 0, 62, 0, 0. Pour inverser le ViewWindow utilisez l'option --flip (ou -f). Pour le décaler, utilisez l'option --offset (ou -o).


Options disponibles

usage: sprite-optimizer.py [-h] [-d] [-f] [-i] [-o OFFSET OFFSET] [-p] [-s]
                           path

Generate the Multi DrawStat code for an image.

positional arguments:
  path                  path of the image to process

optional arguments:
  -h, --help            show this help message and exit
  -d, --draw            draw the result into a new file
  -f, --flip            flip image vertically (for inverted ViewWindow)
  -i, --info            print informative stats
  -o OFFSET OFFSET, --offset OFFSET OFFSET
                        offset for viewwindow. Default: (0, 0)
  -p, --progress        print progress info
  -s, --show            show the result




Exemple de sortie





sprite.png processed in 71 lines (0.622s)

Graph(X,Y)=({16+14T, 7, 11, 5, 17+6T, 14+8T, T, 31, 20-6T, 8+2T, 11+10T, 26-T, 6+6T, 17-6T, 9+T, 7-7T, 27-9T, 29-5T, 4, 4+8T, 26+4T, 2T, 16+5T, 18-T, 28+3T, 23-3T, 13+3T, 11-3T, 6+4T, 7+5T, 15-5T, 22+2T, 22, 16+2T, 12+T, 14-T, 15-2T, 5+T, 2T, 1+T, 29-3T, 25+4T, 21+4T, 19+4T, 25-2T, 6+T, 26-5T, 8+T, 11+T, 25+T, 14+2T, 16-2T, 15-2T, 11+2T, 2T, 2T, 22+3T, 4-3T, 26-4T, 14-4T, 19-2T, 20-7T, 30, 29, 24, 21, 19, 17, 14, 14, 1}, {26-T, 21-11T, 21-10T, 20-9T, 24-8T, 2+T, 11+8T, 11+7T, 15+7T, 14+7T, 25+2T, 13-6T, 23, 11-6T, 11+6T, 6+5T, 27-2T, 21, 15+5T, 22-3T, 7+3T, 28-4T, 28-6T, 13+6T, 25-8T, 14+3T, 13+2T, 8, 10, 6, 24+2T, 20-T, 11-2T, 5+2T, 30-2T, 20+2T, 12+2T, 28-2T, 26+2T, 11+2T, 18+3T, 26-4T, 17-2T, 22+4T, 8-4T, 16+5T, 28-6T, 14+7T, 12+8T, 21-2T, 16-T, 5, 12, 8+2T, 15, 13-T, 27-3T, 22-3T, 14+3T, 2+4T, 17-6T, 25+T, 26, 20, 29, 29, 7, 29, 28, 19, 29})



Pour toute demande d'aide, suggestion ou remarque, vous pouvez commenter ce topic

Fichier joint


Hackcell Hors ligne Maître du Puzzle Points: 1531 Défis: 11 Message

Citer : Posté le 02/09/2018 21:56 | #


Je viens de tester, ça marche (bon mon sprite est à 180° en bas a gauche, mais c'est probablement moi qui ai foiré mon ViewWindow)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 03/09/2018 07:54 | #


Cf la doc pour ça (--flip)
Tu peux ajouter l'option en modifiant le .bat
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 25/05/2019 11:06 | #


To draw DarkStorm's sample,
The following settings do not work well.
ViewWindow 0, 126, 0, 62, 0, 0

What settings do I need?
TThetamin ?
TThetamaz ?
TThetaPtch ?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Kikoodx Hors ligne Ancien labélisateur Points: 3038 Défis: 11 Message

Citer : Posté le 25/05/2019 13:08 | #


Hey Sentaro21, ViewWindow 1,127,0,1,63,0 is recommended ViewWindow, I haven't try it but it should work well
ouais ouais
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 25/05/2019 14:19 | # | Fichier joint


Thanks
However this program not work well.

[Fichier joint] SPRITE.g1m
How wrong is it?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 25/05/2019 14:38 | #


It looks like you've drawn points instead of rendering lines. Did you execute it in the PRGM application and properly set the View-Window with Tmin=0, Tmax=1 and Tstep=1 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 25/05/2019 14:54 | #


ViewWindow 1,127,0,1,63,0,0,1,1

It becomes like this.

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 25/05/2019 15:53 | #


I think it's the correct output for the sample program, which obviously does not correspond to the example sprite.

Here's how it works : you pair element of the two lists together, for instance 16-2T with 26-27T, 7-7T with 21-32T, etc. In each pair, the first element is the x axis and the second is the y axis. These two coordinates are evaluated for T=0 and T=1, as these are the values set in the View-Window. The first pair, for instance, draws a line between (16,26) and (14,-1).

You can see that the constant multiplication before T indicates the length of the line along one axis. In the example program, these constants are very large, so the lines must be very long (at least 20 pixels for most of them). This is obviously not the case with the example sprite.

Plus, if you actually run the script on the image, you get something very different which looks much better. I suggest you try this code instead.

Graph(X,Y)=({16+14T, 7, 11, 5, 17+6T, 14+8T, T, 31, 20-6T, 9-T, 21-10T, 26-T, 17-6T, 9+T, 12-6T, 7-7T, 27-9T, 29-5T, 4, 4+8T, 26+4T, 2T, 16+5T, 18-T, 28+3T, 23-3T, 16-3T, 11-3T, 15-5T, 12-5T, 9-6T, 22+2T, 22, 19-2T, 16-2T, 12+T, 14-T, 15-2T, 5+T, 1+T, 2-2T, 29-3T, 25+T, 21+4T, 25-2T, 23-4T, 12-2T, 10-4T, 27+T, 25+T, 14+2T, 15-2T, 13-2T, 9+T, 2T, 2-2T, 26-4T, 14-4T, 26-5T, 22-5T, 19-2T, 30, 29, 24, 21, 17, 14, 14, 13, 12, 6, 2, 1}, {26-T, 21-11T, 21-10T, 20-9T, 24-8T, 2+T, 11+8T, 18-7T, 15+7T, 10+7T, 27-2T, 13-6T, 11-6T, 21-6T, 23, 6+5T, 27-2T, 21, 20-5T, 22-3T, 7+3T, 28-4T, 28-6T, 13+6T, 25-8T, 14+3T, 15-2T, 8, 24+2T, 6, 14+7T, 20-T, 11-2T, 7-T, 5, 30-2T, 20+2T, 12+2T, 28-2T, 11+2T, 28-2T, 18+3T, 24+4T, 17-2T, 8-4T, 26-4T, 17+4T, 10, 25-2T, 21-2T, 16-T, 12, 10-2T, 17-2T, 13-T, 15, 14+3T, 2+4T, 27-5T, 27-2T, 17-6T, 26, 20, 29, 29, 29, 28, 19, 26, 20, 16, 20, 29})

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 26/05/2019 09:11 | #


It works well.
Thanks very much!

And,
Graph(X,Y)= bug of C.Basic was found.
I will fix it.

Ajouté le 26/05/2019 à 14:26 :
Thanks to Lephenixnoir,
The bug fix was completed.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 26/05/2019 14:28 | #


Awesome!
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 30/05/2019 16:49 | # | Fichier joint


Intrigué par les tentatives de Redeyes d'optimiser l'image ci-dessous, j'ai donné un coup d'oeil au script.


Darks avait laissé des choses très mal optimisées, et le traitement de l'image était beaucoup trop long. J'ai noté ci-dessous les quatre étapes et le temps qu'elles prennent. Je n'ai pas la troisième car j'ai abandonné après 50 minutes.

1» Génération des lignes (rapide - 5 minutes)
2» Élimination des doublons (rapide en théorie - 45 minutes)
3» Élimination des sous-ensembles (très long - ?)
4» Rendu par glouton (rapide - ?)
Total. Très certainement plus de 4/5 heures

J'ai optimisé le script, essentiellement en utilisant des ensembles (arbres binaires ou tables de hachage) partout où c'était approprié. Cela a au passage fusionné les deux premières étapes, et j'ai maintenant les temps suivants :

1» 20 secondes
3» 3 minutes
4» 5 secondes
Total. 3 minutes 25 secondes

L'exemple de Drak prend moins d'une seconde à calculer.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 30/05/2019 16:50 | # | Fichier joint


Ci-joint le script modifié, je vais voir pour pousser sur la forge Gitea quand Darks aura migré.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 02/06/2019 09:14 | # | Fichier joint


The conversion took almost a day.
Is there a modified script?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Hackcell Hors ligne Maître du Puzzle Points: 1531 Défis: 11 Message

Citer : Posté le 02/06/2019 10:08 | #


Yes, that was the whole point of Lephenixnoir's previous message
Making the conversion last 3 minutes and 25 seconds rather than a day.
You can get the modified script from the message just above your ♥
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 02/06/2019 11:39 | #


Thanks.
I used a modified script (6557 bytes) by Lephenixnoir.
But it did not end in a few minutes.

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 02/06/2019 16:20 | #


Hi Sentaro, how long did it take? I measured the time on my computer, which is a Core i3 at about 3.6 GHz, I suppose YMMV.

I'm not sure I can guarantee the execution time on your computer, I just hope it's still significantly faster than the old script.

Ajouté le 02/06/2019 à 16:20 :
Oh wait, did you use the image in my post? It's upscaled x2! The conversion would take a lot longer.

I think this might be the case because your Multi DrawStat output is much larger than mine!
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 03/06/2019 00:52 | # | Fichier joint


Ah! I'm sorry,I used a large image.
When converted to 44x60, it took only about 7 minutes.(Windows i7 4GHz)
Thanks very much!
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 03/06/2019 01:54 | #


Excellent! 7 minutes should be pretty decent. It's nice to be able to convert large images like this.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 19/02/2022 16:58 | #


Hello !
Quand tu parles de solution optimisée, tu veux dire en temps de dessin ou en place occupée ?

Ajouté le 19/02/2022 à 17:44 :
C'est normal que le sprite mettre 1h à se générer chez moi ?
Tituya Hors ligne Administrateur Points: 2156 Défis: 26 Message

Citer : Posté le 19/02/2022 17:46 | #


https://www.planet-casio.com/Fr/forums/topic15315-2-tutoriel-utiliser-le-sprite-optimizer.html#165850

Et au passage c'est optimisé au niveau de la vitesse de dessin. En utilisant ce qu'on appelle un le Super DrawStat
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire le contraire)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 19/02/2022 18:06 | #



L'algo de Lephenix a été merge dans le dépôt git non ? Pas besoin d'aller récup le script qu'il donne en pièce jointe après ?

Tituya a écrit :
Et au passage c'est optimisé au niveau de la vitesse de dessin. En utilisant ce qu'on appelle un le Super DrawStat

Yes mais pas forcément au niveau de la taille en octets du coup ?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 82 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd