Forums Développement Multimédia

Aller au contenu

Un packager de textures

CODE Actionscript

14 réponses à ce sujet

#1 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 07 November 2011 - 18:01 PM

Bonjour,
Quelqu'un connaitrait-il une classe qui permettrait de générer en AS un atlas de textures (texture sheet en anglais?), à partir des différents BitmapDatas de tailles différentes?
Je n'ai pas trouvé, du coup je tente de porter http://code.google.c.../texture-atlas/ , mais si quelqu'un à ça sous la main ce serait encore mieux.

Merci :)

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 07 November 2011 - 18:11 PM

Je dénoncerais bien un certain mr tlecoz
…mais comme je suis pas non plus tout à fait certain qu'il s'agisse de la même chose… ça serait mesquin de ma part. :mrgreen:

#3 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 07 November 2011 - 20:23 PM

Hello !

J'ai effectivement un outil de ce genre, basé sur le code de Didler ;
le problème c'est qu'il est intégré dans un mini-moteur3D que j'avais fabriqué l'année dernière et on ne peut pas l'extraire facilement...

Je vais essayer de voir ce que je peux faire ce soir (dans la nuit parce que j'ai un truc à finir avant)

#4 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 07 November 2011 - 20:25 PM

Didler , quand est ce que tu te met à molehill et que tu nous en met plein la vue ? :roll:

#5 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 07 November 2011 - 22:27 PM

Flatté, je suis, de tant d'estime :P mais je n'y crois pas beaucoup.
Et n'inversons pas les rôles. Je ne suis qu'un troublion qui a parfois des fulgurances de simplification. Rien d'un crack de la programmation.

Et puis, il y a…
- l'âge de mon ordi qui ne me permet plus beaucoup d'évolutions…
- l'âge de… ben le mien quoi. Qui ne me permet plus beaucoup d'évolu… (vous me faites vraiment dire n'importe quoi…)
- la méconnaissance totale de la 3D,
+ le fait que je ne vois pas de débouchés professionnels dans le domaine et donc un investissement en temps assez stérile. Alors que j'ai tant et tant d'autres choses à faire…

Ça fait beaucoup.

Mais flatté, je reste, malgré tout. :mrgreen:
Merci. :smile:

#6 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 07 November 2011 - 23:13 PM

Merci pour ça Dldler.

Pour comparer, j'ai continué à porter le code c++ que j'avais trouvé... ben j'aurais dû m'abstenir, j'y ai passé quelques heures et quand on voit le résultat, pfffff:

(cliquer pour générer d'autres rectangles)
La méthode utilisée est décrite ici: http://codesupposito...to-compute.html

J'ai aussi passé du temps de recherche sur le net, rectangular 2D packing et autres termes barbares, mais je n'ai rien trouvé de concluant, à part l'affirmation qu'il n'existe pas de solution algorithmique idéale et universelle.

Du coup j'irais voir de plus près ton code Dldler, à moins que tlecoz tu n'arrives effectivement à m'extraire la classe que tu as. Mais c'est vrai que si tu as repris l'idée de Dldler, et comme il a donné la source, je pourrais peut-être aussi bien le faire moi-même, c'est toi qui voit ;) En tout cas pour aujourd'hui j'arrête.

Bon ben voilà, je suis un peu dégoutté sur le coup, ça m'apprendra à me lancer dans un portage sans avoir confirmation que la base est bonne, et à faire confiance aux petits gars de MB :)

Fichier(s) joint(s)



#7 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 08 November 2011 - 06:24 AM

Citation

Et n'inversons pas les rôles. Je ne suis qu'un troublion qui a parfois des fulgurances de simplification. Rien d'un crack de la programmation.

Et puis, il y a…
- l'âge de mon ordi qui ne me permet plus beaucoup d'évolutions…
- l'âge de… ben le mien quoi. Qui ne me permet plus beaucoup d'évolu… (vous me faites vraiment dire n'importe quoi…)
- la méconnaissance totale de la 3D,
+ le fait que je ne vois pas de débouchés professionnels dans le domaine et donc un investissement en temps assez stérile. Alors que j'ai tant et tant d'autres choses à faire…

De mon coté, je pense que ça te plairait assez parce que les structures 3D permettent certaines subtilité interessante, et que tu t'en sortirais sans trop de problème (je parle pas des shader en assembleur mais de la structure des projet 3D, créer un objet3D , etc...) Ca te donnerait d'autres perspectives (sans mauvais jeux de mot), d'autres matériaux pour construire des trucs et des machins (pas forcement en 3D d'ailleurs).

Vu qu'en moins de 48h tu as pondu, de loin, le meilleur moteur de particule existant à ce jour en flash (tu devrais le google.coder d'ailleurs, et le poster sur wonderfl.net) puisqu'il en gère plus d'1000 000 là ou les rois du flash genre andré michelle, joa ebert, thibaut imbert & cie en font bouger 3-400 000 en faisant de leur mieux (et en passant par haxe, alchemy ...), bah je me dis que ça va , tu te débrouille :lol:

Fais une recherche google à 'AS3 1000000 particles', je te met au défi de trouver une démo :)

Pareil, pour le code de l'emboitement des textures, tu as trouvé l'algo intuitivement et immédiatement... c'est impressionnant ! Pour moi, tu es une sorte de génie donc je ne me pose pas trop la question de savoir si tu vas y arriver et si tu sauras quoi en faire ...

La question c'est quand ! :mrgreen:

#8 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 08 November 2011 - 06:33 AM

Je vais avancer dessus demain lilive,
Désolé mais c'est toujour quand j'ai envie de faire quelque chose qu'on me donne du taff et je n'ai rien pu faire aujourd'hui.

(j'essaierais quand même de reproduire ta démo avec mon code (même si apriori je pense que ta méthode est mieux) parce que chez moi ta derniere demo tourne à 40 FPS, et c'est peu pour seulement 10000 planes (il doit y avoir un soucis qq part à moins que ca ne vienne du probleme de transparence, bref je vais essayer et on verra ce que ca donne en laissant le CPU faire les calculs de positions (ce serait vraiment étrange que ca tourne plus vite mais bon, faut tester pour être sur :) )

#9 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 08 November 2011 - 09:18 AM

Image IPB

#10 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 08 November 2011 - 18:44 PM

[mode hors sujet]
Je viens de tester avec mon code (qui calcule les positions en AS3) et c'est effectivement bien plus lent (2-3x).

Mais je suis quand même surpris car on peut faire bouger le même nombre d'élément beaucoup plus vite en pure AS3 (sans gerer la transparence ni la couleurs par contre). Mais l'équivalent de ton code sans molehill (en faisant des copyPixels) tourne à peu prés à 30 fps sur mon poste à l'agence (qui ne supporte pas le GPU) alors que ton anim tourne à 7-8 et que mon code molehill tourne à 2-3...

Du coup, j'ai un peu de mal à comprendre la logique du truc... Comme si le CPU affichait au final plus vite les élement que le GPU... (en consommant 1000x plus de ressource par contre)
[/mode hors sujet]

#11 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 08 November 2011 - 23:25 PM

Ouais! Dldler avec nous! Dldler, avec nous!

Moi la 3D ça me laisse assez froid. Peut-être que quand elle sera vraie et sans lunettes ça m'ira mieux, mais pour l'instant je continue à préférer la 2D. Mais viens quand même! On peut juste faire de la 2D avec Stage3D, pour avoir plus de puissance, donc des possibilités créatives plus étendues. Par exemple, j'ai pas encore vu si on peut faire des flous, mais surement, et je me suis dit que dans notre petit topic sur les flous, j'avais été confronté à des problèmes de performances. Si ça se trouve avec le GPU ça irait mieux ;)

Et pis, je sais pas, il y a surement pleins d'astuces à trouver, des trucs trop trop amusants. Là moi je me suis penché dessus pour faire une rivière constituées de lettres de l'alphabet, en 2D, mais j'ai trop de particules pour mon CPU. Je m'amuse, comment dire, comme un fou, c'est trop bien, viens jouer! Si tu veux on te fait le topo avec tlecoz en live session :)

tlecoz-> bon tu vois j'ai fais mon max là, s'il vient pas vraiment je vois plus ce qu'il faut faire :mrgreen: .
tlecoz-> au sujet de tes tests, je viens de répondre dans l'autre sujet: http://flash.mediabo...603#entry845603

#12 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 09 November 2011 - 15:50 PM

hier j'ai porté un code de TexturePacker (et j'ai échoué lamentablement sur un autre), mais un peu comme toi, je ne suis pas complètement satisfait du résultat (ca marche, mais dans certains cas ca pourrait être bien mieux). Au final, je me demande si le code de Didler, beaucoup plus simple, n'est pas mieux :)

Je voulais tester plusieurs cas de figures pour comparer (avec des tailles de rectangle diverse, mais pas des randoms car ça ne représente pas vraiment un usage réel), mais il était déjà 6h00 du mat' à ce moment là (parce que j'ai perdu pas mal de temps à essayer d'en porter un autre qui me semblait intéressant, en vain), et vu que j'ai oublié les fichiers chez moi, ca va attendre ce soir.

Ci-joint, le texturePacker basé le code de Didler (tout n'est peut être pas utile dedans car il a été pensé à la base dans le cadre d'une anim FP10, mais j'ai fait 2-3 mini-modifs et ça devrait fonctionner sans problème dans un projet molehill)

Il faut l'utiliser comme ca


var texturePacker:UvtsManager = new UvtsManager(2047,2047);
texturePacker.addPicture(bmpData1,"image1");
texturePacker.addPicture(bmpData2,"image2");
texturePacker.addPicture(bmpData3,"image3");
texturePacker.process();

var cullingIsPositive1:Boolean = true;
var cullingIsPositive2:Boolean = false;
var cullingIsPositive3:Boolean = true;

//pour récuperer les UV d'une texture :
texturePacker.getUvtsPictureByTitle("image1",cullingIsPositive1);

//pour récuperer les UV de plusieurs images d'un coup :
var titles:Array = ["image1","image2","image3"];
var cullings:Array = [cullingIsPositive1,cullingIsPositive2,cullingIsPositive3]
texturePacker.getUvtsPictureGroupByTitle(titles,cullings);

//pour récuperer un objet qui représente chaque image sur le grand bitmapData (pour mettre à jour l'image, ou appliquer un colorTransform directement au niveau de la Texture)
var obj:UvtsObj = texturePacker.getUvtsObjByTitle("image1");
obj.fillRect(0xff0000);
obj.colorTransform(new ColorTransform(1,1,1,0.5));
var mc:Sprite = new Sprite();
mc.graphics.beginFill(0);
mc.graphics.drawRect(0,0,50,50);
obj.bitmapData.draw(mc);


//et on récupère le bitmapData contenant toutes les images comme ca :
var bd:BitmapData = texturePacker.bitmapData;                        
 


++

Fichier(s) joint(s)



#13 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 09 November 2011 - 22:39 PM

Super merci.
Avec ça je vais pouvoir me coller à l'utilisation de différentes textures pour les sprites.

#14 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 25 November 2011 - 03:19 AM

Dans minko tu as une class TextureAtlas :)

#15 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 21 November 2014 - 14:20 PM

Citation

hier j'ai porté un code de TexturePacker (et j'ai échoué lamentablement sur un autre), mais un peu comme toi, je ne suis pas complètement satisfait du résultat (ca marche, mais dans certains cas ca pourrait être bien mieux). Au final, je me demande si le code de Didler, beaucoup plus simple, n'est pas mieux Image IPB

J'ai essayé d'en porter plusieurs autres entre hier et aujourd'hui (je m'amuse avec Processing en ce moment) et je confirme : "celui de Didler est le mieux !". Non seulement le code est plus court / simple / rapide mais en plus il fait ce qu'on lui demande ! :)

Merci encore !



Soit dit en passant Didler, si tu traines encore dans le coin, je te re-invite à essayer Processing.
C'est sur que ça te plaira - je l'ai toujours pensé et je le pense encore -

C'est comme Flash, mais puisque c'est basé sur du java, les perfs ne sont pas les même. Je suis régulièrement surpris par ce que peux faire Java. La plupart du temps, c'est moi qui bride l'animation car je suppose que sinon ça va ramer, mais en fait non.

C'est au moins 10x plus rapide que l'AS3, vraiment ça vaut le détour (on perd le coté web par contre, à moins de compiler en javascript mais à ce moment là les performance se valent avec celles de Flash, voire un peu moins bien).

J'y retourne !

Bonne journée !



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)