[MY] Compression textures android

Toutes les questions sur le développement Mobile, y compris la partie script.
Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

[MY] Compression textures android

Message par Fasol0 » 18 Déc 2017 11:53

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.

Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

Re: [MY] Compression textures android

Message par Fasol0 » 18 Déc 2017 11:55

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

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY] Compression textures android

Message par boubouk50 » 18 Déc 2017 12:05

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....
mais cette méthode n'agit que sur la texture et non le contenu
Euh... Là, faut m'expliquer... C'est quoi la différence??
"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

Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

Re: [MY] Compression textures android

Message par Fasol0 » 18 Déc 2017 13:03

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:

Code : Tout sélectionner

imageTex.Resize(540, (int)(imageTex.height * compressFactor));
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

Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

Re: [MY] Compression textures android

Message par Fasol0 » 03 Jan 2018 15:57

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..

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »