BC7-struktur med alfa har samme størrelse som BC7 uden alfa

Så jeg har lavet en struktur. Jeg har gemt RGB-en med BC7-komprimering, tilføjede derefter alfakanal [specular map] med forskellige niveauer af gråtoner og gemte filen igen som RGBA med BC7-komprimering. Den resulterende fil har samme størrelse som den uden alfa, men alligevel indeholder den yderligere information-alfakanal. Hvordan er det muligt? Du kan ikke have kage og spise kage, som jeg forstår, så er der kompromiser, der er lavet for at sikre samme størrelse?

Jeg bruger photoshop med intel DDS-plugin.

Svar

BC7 koder altid effektivt for 4 kanaler. Det er en del af formatet. Aktivering af alpha betyder, at kompressoren læser og bruger alfa-værdien i dit kildebillede, men det er alt.

Alle BC7-komprimerede billeder af en given dimension har samme størrelse, da BC7 komprimerer hver 4×4 gruppe af tekster i 128 bit. Men det betyder ikke, at de har samme kvalitet .

BC7 er et adaptivt kodningsformat. Mens hver blok har en fast størrelse (både rumligt og bitvis), gemmer hver blok hvor mange kanaler, der blokerer, faktisk komprimerer, og den måde, de korrelerer med hinanden. -specifikationer er komplekse , men den generelle opside er, at kompressoren regner ud pr. Blok, hvilken komprimeringsmetode, der fungerer bedst for en bestemt blok. Hvis kompressoren kan se på en blok og se, at alfa for alle texler er 1.0, kan den bruge flere bits på 128 bit på farverne og færre på alfa.

Som sådan er en struktur " uden alfa " er nøjagtigt som en tekstur med alfa, hvor hver tekst har en alfa på 1. Disse blokke vil bruge størstedelen af deres bits på de ikke-alfadele af teksterne, der kun spilder et par bit i et " -tilstand " -felt, der lader dekompressoren vide alfa er en konstant 1.0.

Dette betyder også, at hvis din tekstur har en varierende alfa, men dele af den har en konstant alfa, kan BC7 kode for disse konstante alfa-områder med færre bits, så flere bits kan bruges på forbedret farvekodning.

Så du skal ikke føle, at der er et problem, fordi de to kompressionskontakter kom ud med det samme antal bytes.

Svar

Her er en ar artikel om BCn-formatet: klik på mig . Det er skrevet af Nathan Reed, som er ret aktiv på dette websted. Så han vil sandsynligvis gå forbi og muligvis besvare dit spørgsmål med flere detaljer, selvom jeg tror, at artiklen forklarer alt, hvad du har brug for at vide.

Den mest relevante del for dit spørgsmål ser ud til at være dette afsnit fra artikel:

BC står for “blokkomprimering”, og BCn-formaterne fungerer alle med hensyn til 4 × 4 blokke af pixels. Alle billeder er skåret i disse små blokke, og hver blok er selvstændig – dataene til at afkode det er alt sammen i et sammenhængende stykke i hukommelsen . Desuden er størrelsen på hver komprimeret blok fast — enten 8 eller 16 byte , afhængigt af hvilket BCn-format der bruges. Dette repræsenterer et komprimeringsforhold på 4: 1 eller 8: 1, hvis kildebilledet er i 8-bit RGBA-format.

Så længe din pixel optælling ændres ikke, teksturens størrelse ændres heller ikke. Jo flere kanaler du bruger (kun 3 og 4 understøttes af BC7 i henhold til Microsoft-dokumentationen ), jo færre oplysninger kan du gemme pr. Farvekanal i en blok. Dette betyder, at du mister flere oplysninger på grund af komprimering, når du bruger RGBA i stedet for RGB.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *