Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Utiliser le Sprite Optimizer
Dark stormHors ligneMembre d'honneurPoints: 10920 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





drak.png processed in 73 lines (11.5s)

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



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

Fichier joint


Pages : Précédente1, 2
HackcellEn ligneMembrePoints: 1208 Défis: 10 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)
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Dark stormHors ligneMembre d'honneurPoints: 10920 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
Sentaro21Hors ligneMembrePoints: 712 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.
KikoodxHors ligneMembrePoints: 1754 Défis: 9 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
Sentaro21Hors ligneMembrePoints: 712 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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 ?
Sentaro21Hors ligneMembrePoints: 712 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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})
Sentaro21Hors ligneMembrePoints: 712 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 Message

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


Awesome!
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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é.
Sentaro21Hors ligneMembrePoints: 712 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.
HackcellEn ligneMembrePoints: 1208 Défis: 10 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 ♥
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Sentaro21Hors ligneMembrePoints: 712 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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!
Sentaro21Hors ligneMembrePoints: 712 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.
LephenixnoirEn ligneAdministrateurPoints: 16831 Défis: 140 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.
Pages : Précédente1, 2

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 52 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