Qual è la dimensione ottimale della trama?


12

Di recente ho aggiunto un texture packager al mio progetto che comprime una certa quantità di trame in una singola, in questo modo:

Trama imballata

Ad esempio, questo ha una dimensione di 582x1023 pixel. L'obiettivo dell'aggiunta di queste trame confezionate era ovviamente quello di migliorare le prestazioni, quindi volevo cercare la dimensione ottimale della trama per le trame OpenGL (usando LWJGL). Le cose che ho scoperto sono state che una dimensione massima della trama ampiamente supportata sembra essere 1024x1024, secondo questo ad esempio. Questo mi sembra strano perché ovviamente molte trame da sole sarebbero più grandi di così, quindi cosa succede con quelli? Sono abbastanza sicuro che la maggior parte delle schede grafiche supporti trame più grandi di così. Posso ragionevolmente aspettarmi che la maggior parte delle schede grafiche gestisca ad esempio trame 4096x4096 (o forse anche più grandi di così)?

Per giungere al mio secondo punto (spero che questo conti ancora come una domanda, ma essenzialmente si riduce allo stesso problema): le trame dovrebbero essere dimensionate a una potenza di 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) e dovrei Riempo le trame impacchettate di dimensioni inferiori alla potenza successiva di 2? Secondo questa domanda del 2011 non è un requisito, ma può migliorare le prestazioni ed evitare bug minori e questo del 2012 dice che dovresti assolutamente riempire le trame. Quindi mi rendo conto che queste domande sono state poste in precedenza ma sono ragionevolmente datate per la modifica delle risposte e inoltre ciascuna di esse risponde solo parzialmente alla mia domanda. Come altri progetti / gestiscono questo?

TL; DR: Quali dimensioni delle trame posso aspettarmi di gestire la maggior parte delle schede grafiche? Quali sono le dimensioni ottimali della trama (o ci sono)? Devo riempire la larghezza delle trame alla potenza successiva di 2?


4
La GPU si occupa solo di potenze di 2. Se non riempi manualmente le tue trame, la GPU (o il tuo motore di gioco preferito) lo fa per te, con un leggero ritardo in fase di esecuzione per trama, che può sommarsi. Tuttavia, non posso offrire alcun aiuto sulle dimensioni massime / ottimali delle trame.
ketura,

@ketura Ah, grazie. Quindi dire che ho un'immagine che è 513x10. Sarebbe più veloce riempirlo con 1024x1024 e quindi trasferire tutti questi pixel vuoti o lasciare che la GPU lo faccia?
flotothemoon,

4
Non avresti bisogno di andare così in alto. 1024 x 16 funzionerebbe; non deve essere QUADRATO, solo una potenza di 2 in ogni direzione. Anche se in quel caso prenderei seriamente in considerazione se non potevo risparmiare un pixel e portarlo a 512x16, lol.
ketura,

Risposte:


6

Ho intenzione di rispondere a questo, anche se YMMV. Uso Steam Hardware Survey ( http://store.steampowered.com/hwsurvey?platform=pc ) per determinare qual è la RAM video (VRAM) disponibile sulla maggior parte dei computer. Guardando i risultati al 13-10-2015 (oggi), quasi l'85% delle persone ha VRAM da 1024 MB.

La tua domanda è molto ampia, poiché non indica l'hardware di destinazione (console, PC, palmare, dispositivi mobili?) Parlerò di PC e puoi estrapolare altre piattaforme in base alle specifiche hardware.

Supponendo 32 bit di colore + alfa per pixel, ovvero 4 byte per pixel, 1 GB VRAM può contenere al massimo ~ 256 milioni di pixel. Ciò equivale a 256 trame da 1K per 1K. Ciò presuppone (erroneamente) che tu voglia conservare solo le trame nella tua VRAM, mentre ci saranno un sacco di altre cose (ad esempio dati mesh, se lavori in 3D) per cui devi lasciare spazio. Probabilmente vuoi anche lasciare un po 'più di spazio per la mappatura mip delle trame, che di solito funziona meglio se le tue trame sono potenze di due.

Le console moderne (XBOX One e PS4) hanno 4-8 GB di RAM unificata, la maggior parte dei palmari e dei dispositivi mobili hanno 1-2 GB di RAM unificata, con restrizioni su quanto è possibile allocare come VRAM.

Generalmente creerei trame 2K in modo che funzionasse sulla maggior parte dei PC, consentendo l'opzione di ridimensionare per i dispositivi di fascia bassa. Se stai scrivendo un gioco 2D e vuoi scegliere come target display a risoluzione più elevata (4K, iPad Retina, ecc.) Puoi usare trame 4K per lo sfondo, ma per la maggior parte delle altre parti, potrebbe essere eccessivo.

Spero che questo abbia aiutato e non abbia confuso le acque.


Grazie per la risposta, sicuramente aiuta. Per quanto riguarda l'ampiezza, mi dispiace, ho dimenticato di includere alcuni dettagli: sto sviluppando per PC in 2D. Cosa accadrebbe se si usassero trame più grandi della dimensione massima supportata della trama? Non funziona affatto o diventa solo più lento?
flotothemoon,

1
Sembra che la mia risposta sia stata perfetta. Controllare altri post del forum del sito Le trame 2k sono ciò che dovresti supportare affinché il tuo gioco funzioni sulla maggior parte dei dispositivi. Il limite della dimensione della trama dipende dall'hardware specifico e dalla particolare versione di OpenGL-ES. Non sono sicuro di quale sarebbe il messaggio di errore specifico, ma verrebbe da OpenGL-ES quando si tenta di caricare la trama. Link utili: answers.unity3d.com/questions/563094/... , forum.unity3d.com/threads/texture-sizes-and-videocards.281422 e feedback.wildfiregames.com/report/opengl/feature/...
Vijay Varadan

Quando provo a caricare o provare a rilegare la trama? O è la stessa cosa qui?
flotothemoon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.