Dovrei usare trame non dimensionate a una potenza di 2?


40

All'inizio di OpenGL e DirectX, le dimensioni delle trame dovevano essere potenze di due. Ciò significava che l'interpolazione dei valori float poteva essere eseguita molto rapidamente, usando lo spostamento e così via.

A partire da OpenGL 2.0 (e precedente, tramite un'estensione) sono state supportate le dimensioni della trama non di potenza di due.

Le trame power-of-two offrono vantaggi prestazionali su GPU moderne integrate e discrete? Quali sono i vantaggi delle trame senza potenza di due?

Una popolazione desktop significativa ha schede che supportano trame non power-of-two?


Risposte:


15

Ci sono vantaggi prestazionali nel rispettare le trame power-of-two su GPU moderne integrate e discrete?

La maggior parte delle GPU moderne supporta trame non power of two (NPOT) e le gestisce bene. Il calo delle prestazioni è piuttosto limitato. Ma ci sono alcuni problemi da considerare:

  • Quando si utilizza la trama NPOT occupa più spazio nella RAM, proprio come la trama POT di dimensioni successive. Tecnicamente sprechi solo lo spazio che potrebbe essere usato per mettere qualcosa dentro;

  • Le trame NPOT possono essere gestite notevolmente più lentamente (in OpenGL 2.1 ho avuto un calo delle prestazioni fino al 30%) rispetto al POT delle dimensioni successive;

  • Le GPU più vecchie e le GPU integrate / su chip non sono così avanzate, spesso supportano trame NPOT, ma il supporto è piuttosto lento e goffo;

  • Anche le GPU più vecchie potrebbero rifiutare di accettare / visualizzare le trame NPOT;

  • Potrebbero esserci degli artefatti sui bordi causati dall'interpolazione mip-map, la tua trama 25x25 potrebbe avere una frangia nera in cui sono stati aggiunti pixel per riempirlo di dimensioni 32x32.

PS: non so con certezza sui dispositivi mobili, potrebbero esserci ancora più restrizioni per quanto riguarda le trame POT.

Quali sono i vantaggi di eventuali trame non-power-of-two?

Per quanto ne so ci sono solo 2 vantaggi:

  • Occupano meno spazio sull'HDD se non sono imballati (quando le aree vuote impacchettate danno pochissimo)
  • È possibile risparmiare tempo scrivendo NPOT -> POT converter. Ne avrai bisogno per la versione di rilascio, ma l'uso di trame NPOT per la progettazione e la prototipazione di interfacce / modelli va bene

Esistono vaste popolazioni di utenti desktop che non dispongono di schede che supportano trame non power-of-two?

Per quanto ne so e testato su PC - Sì. Ciò include una percentuale maggiore di GPU di riduzione della velocità / bug minori e una percentuale minore di schede che non gestiranno affatto NPOT.


6

Un uso comune di trame non di potenza di due è per il rendering di trame di destinazione "di dimensioni dello schermo" o "di metà schermo" (e così via) utilizzate per gli effetti di postelaborazione.

In questi casi, le mipmap non sono necessarie, il buffer è sempre non compresso, quindi le dimensioni di trama dispari causano meno problemi qui


4

Vi erano limitazioni per le trame NPOT sull'hardware precedente. Come accennato in questo wiki OpenGL , alcuni hardware meno recenti richiedono NPOT per non avere mipmap, le trame compresse richiedono un allineamento di pixel 4x4, ma il nuovo hardware dovrebbe gestirlo perfettamente.

Nella mia esperienza, alcuni hardware anche relativamente nuovi sperimentano un notevole successo in termini di prestazioni se si utilizzano trame NPOT anziché POT. Non so quale sia il problema; è possibile che in alcune combinazioni di stati di rendering, il rendering sia effettivamente eseguito nel software. Quindi, a meno che tu non abbia buone ragioni, ti consiglio di provare a usare il POT il più possibile.

Per quanto riguarda il motivo per cui utilizzare NPOT anziché POT - se si dispone di immagini di dimensioni NPOT, ad esempio 1600x1200, l'utilizzo di una superficie di 2048x2048 pixel sprecherà molta memoria video.


3
Se si utilizzano formati di trama compressi in memoria (PVR o DXT, ad esempio), il ridimensionamento alla potenza successiva di due utilizzerà una memoria di trama significativamente inferiore rispetto a una trama NPOT non compressa, ma più piccola.
Tetrad,

3
La tua formulazione è un po 'vaga, quindi scusami se è ridondante con quello che stai cercando di dire: le trame compresse richiedono ancora dimensioni dei pixel in multipli di 4, anche su hardware moderno che supporta trame NPOT.

1
Mi aspetto che l'hardware attuale continui a piastrellare / muovere le trame nei driver quando le caricate. Ciò modifica il layout della trama per rendere l'accesso più ottimale per l'hardware. Le console (non includo XNA in questo) richiedono di eseguire manualmente questa ottimizzazione del layout nella propria catena di strumenti, sono abbastanza sicuro che funzionino solo su POW2.
Roger Perkins,

-1

la potenza di 2 trame aumenta le prestazioni di circa il 30% per qualsiasi tipo di GPU non solo vecchie GPU (il 30% più veloce è la differenza tra una GPU di fascia alta e una media) prendono il 30% in più di ram ma è necessario meno vram aumentano la qualità di fornendo dimensioni della trama adeguate per una distanza specifica, funziona come l'antialiasing per le trame che l'artefatto della linea scura dovrebbe essere gestito dai motori di gioco e i motori aaa gestirli bene


Ciò fornisce solo un vantaggio (già specificato) delle trame power-of-two, non affronta la domanda stessa, motivo per cui useresti trame non power-of-two dati i vantaggi sopra.
Josh

scusa ho frainteso la domanda, con il potere di 2 sei limitato a 2048, 1024, 512, ecc. probabilmente questo è il motivo principale
yusef ghatavi

anche la non potenza di 2 è utile per le trame che non richiedono mipmap come trame gui e trame per il personaggio in prima persona che è sempre vicino alla fotocamera
yusef ghatavi

-3

La mia arte del programmatore ha solo la dimensione corretta.

Certamente semplifica la mia logica di visualizzazione per sapere che se voglio impostare una trama nella parte superiore sinistra dello schermo, posso semplicemente impostare 0,0 come la parte superiore sinistra della trama e vedere tutta la trama lì nella posizione corretta, mentre se dovessi aggiungere un'imbottitura 0alpha, posizionare la trama contro il bordo dello schermo sarebbe più complesso. Inoltre, ovviamente, 0alpha deve ancora essere miscelato alfa, e se sto guardando trame opache, potrei preferire non avere un canale alfa.


6
Di solito si posizionano poligoni, non trame, sullo schermo. Ai poligoni può essere dato qualunque UV necessario - non devono necessariamente passare da 0 a 1; se la tua trama è larga solo 30, va bene andare a 0,9375 (che è un altro motivo per cui le trame POT sono buone - gli UV sono esattamente rappresentabili).
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.