Come diavolo ottieni un colore decente da 2BPP?


11

Ho esaminato le trame PowerVR e ho incontrato diverse trame che apparentemente sono 2 bit per pixel. Questo, francamente, mi fa impazzire. Come si ottiene una conservazione del colore decente anche a metà quando si hanno solo 4 stati possibili per pi per pixel? Mi piacerebbe qualsiasi risorsa là fuori che parli della compressione dietro tale impresa. Grazie!


Con JPG, puoi ottenere un colore decente con meno di 1PP :)
Ivan Kuckir,

Risposte:


13

La codifica PVRTC 2BPP, come introdotta in questo documento, divide un'immagine in blocchi 8x4-texel e comprime ogni blocco in modo tale che vengano memorizzati solo due colori RGB per ogni blocco di texel trentadue.

Nessuno dei trentadue texel memorizza un colore a sé stante - ogni texel memorizza solo informazioni su come fondere tra i due colori RGB del suo blocco 8x4-texel.

Se l'immagine sorgente ha un blocco texel 8x4 con un arcobaleno di 32 colori, la compressione PVRTC 2BPP farà un pessimo lavoro di mantenimento della sua qualità, perché in PVRTC 2BPP ogni blocco texel 8x4 ha solo due colori RGB con cui fondersi.


Affascinante! Grazie mille. Purtroppo, ho molti problemi a caricare la carta a cui ti sei collegato. Forse è ospitato su EC2 di Amazon? ;)
Toji,

6

La compressione delle trame non comprime i pixel. Comprime blocchi di pixel. Quando viene fatto riferimento a un singolo pixel, la GPU calcola quale blocco rappresenta il pixel. Quindi elabora l'intero blocco per ottenere il colore di quel pixel.

Un esempio

Supponiamo che la dimensione del blocco sia di 4x4 pixel su una trama RGB. Non compresso, ogni blocco consuma 4x4x3 = 48byte nella memoria delle trame.
Ora l'algoritmo di compressione calcolerà la media per ciascun canale (RGB) e la memorizzerà con il blocco (3 byte). Ora diamo a ciascun pixel 2 bit per regolare la media in modo che il pixel sia più vicino al suo colore originale. Questo è un altro 4x4x2x3/8 = 12byte.
I byte totali utilizzati da questo compressore appena inventato sono 15 byte per blocco, con un rapporto di compressione del 31,25%.

Il mio mitico compressore utilizza 7,5 bpp. Questo non è buono come il pvrtc a 2 bpp può raggiungere, ma ora hai una vaga idea di come si possano ottenere 2 bbp.

aggiornamento:
ho appena guardato la pagina di Wikipedia per pvrtc . Sembra che pvrtc non usi la compressione tradizionale basata su blocchi. Ecco un documento che descrive il modo in cui funziona la compressione basata su blocchi e come differisce pvrtc. Nota particolare: i filtri basati su blocchi possono produrre immagini dall'aspetto decente utilizzando 4bpp (no alpha), mentre nvrtc può farlo con 2bpp.


1

@Toji, il sito in cui si trova il documento è un po 'di carattere, ma ha funzionato per me questa mattina. In caso contrario, se hai accesso a ACM / SIGGRAPH, è ospitato qui . Stranamente, era anche sul sito dello sviluppatore IMG / PowerVR (registrazione gratuita) ma non riesco a trovare la sezione giusta. :-(

[AGGIORNAMENTO] È ancora sul sito IMG qui [/ AGGIORNAMENTO]

@bmcnet: PVRTC non suddivide la trama in blocchi come, diciamo, ETC o S3TC. FWIW, ho fatto esperimenti con trame basate su blocchi ma non sono riuscito a trovare un modo per comprimere abbastanza dati in blocchi autonomi e ottenere comunque i risultati desiderati. Invece, è un po 'più di un sistema di compressione delle trame "globale". Dispone di 2 immagini a bassa risoluzione che bilancia in modo bilaterale alla risoluzione target, quindi le mescola insieme su base texel per texel.

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.