Bonjour à tous,
je cherche un moyen de compresser des textures importées depuis l'exterieur en runtime (hors dossier assets) sur mon app android.
En particulier, je cherche à leur imposer une certaine résolution et un format particulier (ETC2_RGBA1). J'aurais aimé utiliser la méthode Texture2D.resize qui prends comme argument tout ce dont j'ai besoin, mais cette méthode n'agit que sur la texture et non le contenu.. de plus, lorsque je vérifie la taille de ma texture après cette méthode, elle n'a pas été modifié..
Savez-vous quelle est la méthode la plus simple pour réduire les dimensions d'une texture et son contenu? l'objectif étant d'optimiser la mémoire (je cherche à afficher des miniatures d'images haute résolution, avec une résolution bien inférieure).
merci d'avance.
[MY] Compression textures android
Re: [MY] Compression textures android
Je poste ici le code actuellement utilisé:
Code : Tout sélectionner
www = new WWW("file://" + imgURL);
yield return www;
imageTex = new Texture2D(4, 4);
www.LoadImageIntoTexture(imageTex);
//Compress and resize texture
int compressFactor = (int)(540.0f / (imageTex.width * 1.0f));
//imageTex.Resize(540, imageTex.height * compressFactor, TextureFormat.ETC2_RGBA1, true);
imageTex.Apply();
Debug.log(imageTex.width); //la largeur de la texture devrait être de 540, mais elle conserve sa valeur d'origine
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [MY] Compression textures android
Là , tel quel, c'est normal que rien ne se passe, puisque rien n'est fait. La fonction Resize () est en commentaire.
D'après la doc, il faut que la texture soit flaguée isReadable dans les imports settings, vu que tu l'uploades depuis le net, je ne sais pas si cela s'applique....
D'après la doc, il faut que la texture soit flaguée isReadable dans les imports settings, vu que tu l'uploades depuis le net, je ne sais pas si cela s'applique....
Euh... Là, faut m'expliquer... C'est quoi la différence??mais cette méthode n'agit que sur la texture et non le contenu
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [MY] Compression textures android
Merci de ta réponse,
Ma texture est créée en Runtime et est donc par défaut définie en Read/Write enabled (non concernée par le texture importer qui ne fonctionne que dans l'editor): https://answers.unity.com/questions/988 ... at-ru.html
J'ai posté le code avec la ligne commentée car j'ai fait d'autres tests ensuite, mais j'ai bien testé la fonction sans les commentaires.
En fait, avec un LogCat, j'ai pu voir l'erreur "Can't resize to a compressed texture format" lié au format ETC2_RGBA1. j'ai donc supprimé le format comme argument, en gardant donc:
Là la texture est correctement redimensionnée, mais apparait grise.
Quand je dis que la fonction n'agit pas sur le contenu, d'après la doc sur Texture2D.resize:
"After resizing, texture pixels will be undefined."
Il est donc normal que j'obtienne une texture grise,
Cependant je trouve l'intérêt de cette fonction assez limitée du coup..
Et je ne trouve également étonnant qu'une fonction finalement assez "basique" ne soit pas déjà implémentée dans Unity.
J'ai néanmoins trouvé une solution à mon problème, une fonction qui effectue correctement le scaling du contenu
http://wiki.unity3d.com/index.php/TextureScale
Ma texture est créée en Runtime et est donc par défaut définie en Read/Write enabled (non concernée par le texture importer qui ne fonctionne que dans l'editor): https://answers.unity.com/questions/988 ... at-ru.html
J'ai posté le code avec la ligne commentée car j'ai fait d'autres tests ensuite, mais j'ai bien testé la fonction sans les commentaires.
En fait, avec un LogCat, j'ai pu voir l'erreur "Can't resize to a compressed texture format" lié au format ETC2_RGBA1. j'ai donc supprimé le format comme argument, en gardant donc:
Code : Tout sélectionner
imageTex.Resize(540, (int)(imageTex.height * compressFactor));
Quand je dis que la fonction n'agit pas sur le contenu, d'après la doc sur Texture2D.resize:
"After resizing, texture pixels will be undefined."
Il est donc normal que j'obtienne une texture grise,
Cependant je trouve l'intérêt de cette fonction assez limitée du coup..
Et je ne trouve également étonnant qu'une fonction finalement assez "basique" ne soit pas déjà implémentée dans Unity.
J'ai néanmoins trouvé une solution à mon problème, une fonction qui effectue correctement le scaling du contenu
http://wiki.unity3d.com/index.php/TextureScale
Re: [MY] Compression textures android
Pour ceux qui rencontreraient des besoins similaires,
je conseil vivement le plugin "ResizePro" (ce que j'ai finalement utilisé), plus efficace et stable (pas de leak mémoire) que la classe donnée dans mon précédent post (TextureScale). Il perd cependant l'avantage d'être gratuit..
je conseil vivement le plugin "ResizePro" (ce que j'ai finalement utilisé), plus efficace et stable (pas de leak mémoire) que la classe donnée dans mon précédent post (TextureScale). Il perd cependant l'avantage d'être gratuit..