BC7-struktur med alfa har samma storlek som BC7 utan alfa

Så jag har gjort en struktur. Jag har sparat RGB-en med BC7-komprimering, lade sedan till alfakanal [spekulär karta] med varierande nivåer av gråskala och sparade filen igen som RGBA med BC7-komprimering. Den resulterande filen har samma storlek som den utan alfa, men den innehåller ytterligare information-alfakanal. Hur är det möjligt? Du kan inte ta tårta och äta tårta som jag förstår, så görs det kompromisser för att säkerställa samma storlek?

Jag använder Photoshop med intel DDS-plugin.

Svar

BC7 kodar alltid effektivt 4 kanaler. Det är en del av formatet. Att slå på alfa betyder att kompressorn läser och använder alfavärdet i källbilden, men det är allt.

Alla BC7-komprimerade bilder med en viss dimension har samma storlek, eftersom BC7 komprimerar varje 4×4 grupp av texter i 128 bitar. Men det betyder inte att de har samma kvalitet .

BC7 är ett adaptivt kodningsformat. Medan varje block har en fast storlek (både rumsligt och bitvis), lagrar varje block hur många kanaler som blockerar faktiskt komprimerar och hur de korrelerar med varandra. Specifikationerna för är komplexa , men den allmänna uppgången är att kompressorn räknar ut per block-block vilket sätt för komprimering som fungerar bäst för ett visst block. Om kompressorn kan titta på ett block och se att alfa för alla texlar är 1.0, kan den spendera fler bitar av 128 bitar på färgerna och färre på alfa.

Som sådan, en struktur " utan alfa " är precis som en textur med alfa där varje text har en alfa på 1. Dessa block spenderar majoriteten av sina bitar på icke-alfa-delarna av texterna, bara slösa några bitar i ett " -läge " -fält som låter dekompressorn veta alfa är konstant 1.0.

Detta betyder också att om din textur har en varierande alfa, men delar av den har en konstant alfa, kan BC7 koda dessa konstanta alfaområden med färre bitar, så att mer bitar kan spenderas på förbättrad färgkodning.

Så du borde inte känna att det finns ett problem eftersom de två kompressionsomkopplarna kom ut med samma antal byte.

Svar

Här är en ar artikel om BCn-formatet: klicka mig . Den är skriven av Nathan Reed, som är ganska aktiv på den här webbplatsen. Så han kommer förmodligen att passera och kanske svara på din fråga med mer detaljer, även om jag tror att artikeln kommer att förklara allt du behöver veta.

Den mest relevanta delen för din fråga verkar vara det här avsnittet från artikel:

BC står för ”blockkomprimering”, och BCn-formaten fungerar alla i termer av 4 × 4 pixelblock. Alla bilder skärs upp i dessa små block, och varje block är fristående – data för att avkoda det är allt i en sammanhängande bit i minnet . Dessutom är storleken på varje komprimerat block fast – antingen 8 eller 16 byte , beroende på vilket BCn-format som används. Detta representerar ett komprimeringsförhållande 4: 1 eller 8: 1 om källbilden är i 8-bitars RGBA-format.

Så länge din pixel räkningen ändras inte, storleken på strukturen ändras inte heller. Ju fler kanaler du använder (endast 3 och 4 stöds av BC7 enligt Microsofts dokumentation ), desto mindre information kan du lagra per färgkanal i en blockera. Det betyder att du tappar mer information på grund av komprimering när du använder RGBA istället för RGB.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *