PVR Texture con OpenGLES per iPhone.
by Stefano LoduI ragazzi di BubbleTouch continuano ininterrotamente la loro corsa verso la realizzazione completa del loro primo videogame per iPhone.
Hanno molte cose ancora da raccontarci ed oggi ci vogliono spiegare un argomento molto specifico e tecnico: l’ottimizzazione delle texture utilizzando il formato PVR.
Oggi parliamo di Texture con particolare riguardo a qualche ottimizzazione che possiamo fare per i nostri
programmi che usano OpenGLES.
Di base l’Iphone SDK supporta vari formati grafici e come molti di voi sanno di solito viene usato il formato PNG per gestire le texture.
Quello che proponiamo con questo tutorial è l’utilizzo di un formato non molto noto ma che ha molti vantaggi se utilizzato in certi casi.
Il formato in questione è il PVR in particolare PVRTC compression format che devira da PowerVR, analizziamo brevemente vantaggi e svantaggi che si hanno nell’utilizzare tale formato.
I vantaggi ad utilizzare tale formato:
• riduce lo spazio richiesto dalla texture (è un formato compresso)
• minore spazio equivale a minore banda utilizzata e quindi caricamento della texture più veloce
• la decompressione della texture è fatta tramite l’hardware grafico messo a disposizione dall’Iphone / Ipod Touch ergo è più veloce
• caricamento e conversione molto facile da implementare
Mentre gli svantaggi / limiti sono:
• qualità più bassa (parliamo di texture compresse)
• altezza e larghezza della texture devono essere una potenza di 2
• altezza e larghezza della texture devono coincidere
Per quanto riguarda la creazione di texture in formato PVR l’Iphone SDK ha un tool al suo interno che permette di convertire
da formati grafici noti ( PNG, JPG, TIFF e altri ) al formato PVR il tutto tramite riga di comando da un semplice terminale.
Se abbiamo XCode con l’Iphone SDK installato nella cartella di default (/Developer/Platforms/) avremo allora il tool chiamato texturetool direttamente dentro la cartella /Developer/Platforms/Iphone.platform/Developer/usr/bin/.
Texturetool permette di creare 4 varianti del formato PVRTC, in base a queste possiamo quindi trovare un buon compromesso tra compressione e perdita di qualità.
I parametri da passare a texturetool sono molto semplici e li possiamo vedere anche attraverso l’help del programma stesso:
user$ texturetool -h
Usage: texturetool [-hlm] [-e ] [-p
] -o [-f
] input_image
-h Display this help menu.
-l List available encoders, individual encoder options, and file formats.
-m Generate a complete mipmap chain from the input image.
-e Encode texture levels with .
-p
Output a PNG preview of the encoded output to
. Requires -e option.
-o Write processed image to .
-f
Set file
for image.
In particolare come encoder utilizzeremo proprio PVRTC mentre possiamo giocare con il formato scegliendo tra PVR o RAW con le seguenti opzioni aggiuntive:
–channel-weighting-linear
–channel-weighting-perceptual
–bits-per-pixel-2
–bits-per-pixel-4
Di base se lanciamo texturetool senza specificare opzioni avremo il formato –bits-per-pixel-4, –channel-weighting-linear.
Per convertire un ipotetico file prova.png in prova.pvr (con formato a 4bpp (bits per pixel)) scriviamo:
texturetool -e PVRTC -f PVR –channel-weighting-linear –bits-per-pixel-4 -o prova.pvr prova.png
Vediamo dal punto di vista della grandezza quanto conviene:
Ad esempio una texture a 32bpp di dimensioni 256×256 occupa non compressa circa 256kb, se usiamo una compressione a 4bbp avremo
una texture che occupa 32kb più qualcosina per l’header del formato .pvr.
Per il caricamento delle texture dentro la nostra applicazione utilizziamo un’estensione di OPENGLES chiamata glCompressedTexImage2D;
in particolare per chi ha accesso al Developer Connection di Apple è presente una classe PVRTextureLoader che fa già tutto quello che ci serve
per caricare texture compresse in PVR.
Per voi e’ tutto i ragazzi PiXy e BugMaN…e un ringraziamento da Sir. Lodux !






2 Comments. Subscribe to this post comments or trackback.
aprile 29th, 2009
[...] Risorsa: http://www.iphoneandgo.it/2009/04/29/pvr-texture-con-opengles-per-iphone/ [...]
maggio 5th, 2009
Io da quello che ho letto preferisco la smorfia