Textura BC7 cu alfa are aceeași dimensiune ca BC7 fără alfa

Deci am făcut o textură. Am salvat-o pe RGB cu compresie BC7, apoi a adăugat canal alfa [hartă speculară] cu niveluri variate de tonuri de gri și a salvat din nou fișierul ca RGBA cu compresie BC7. Fișierul rezultat are aceeași dimensiune ca cel fără alfa, totuși conține informații suplimentare – canal alfa. Cum este posibil? Nu puteți mânca tort și mâncați tort așa cum am înțeles, deci există compromisuri pentru a asigura aceeași dimensiune?

Im folosesc Photoshop cu pluginul DDS intel.

Răspuns

BC7 codifică întotdeauna în mod eficient 4 canale. Aceasta face parte din natura formatului. Activarea alfa înseamnă că compresorul va citi și va folosi valoarea alfa din imaginea sursă, dar asta este tot.

Toate imaginile comprimate BC7 cu o anumită dimensiune au aceeași dimensiune, deoarece BC7 comprimă fiecare 4×4 grup de texte în 128 de biți. Dar asta nu înseamnă că au aceeași calitate .

BC7 este un format de codificare adaptivă. În timp ce fiecare bloc are o dimensiune fixă (atât din punct de vedere spațial, cât și din punct de vedere al bitului), fiecare bloc stochează câte canale care blochează efectiv comprimarea și modul în care se corelează între ele. Specificațiile sunt complexe , dar partea generală pozitivă este că compresorul își dă seama, pe bloc, ce mod de compresie funcționează cel mai bine pentru un anumit bloc. Dacă compresorul poate privi un bloc și poate vedea că alfa pentru toate texelele este 1,0, atunci poate cheltui mai mulți biți din cei 128 de biți pe culori și mai puțini pe alfa.

Ca atare, o textură " fără alfa " este exact ca o textură cu alfa în care fiecare texel are un alfa de 1. Aceste blocuri vor cheltui majoritatea lor biți pe părțile non-alfa ale texelurilor, pierzând doar câțiva biți pe un mod " " care permite decompresorului să știe că alfa este o constantă 1.0.

Aceasta înseamnă, de asemenea, că, dacă textura dvs. are un alfa diferit, dar părți ale acestuia au un alfa constant, BC7 poate codifica aceste zone alfa constante cu mai puțini biți, astfel încât mai mult biții pot fi cheltuiți pentru o codificare îmbunătățită a culorilor.

Deci, nu ar trebui să simțiți că există o problemă, deoarece cele două comutatoare de compresie au ieșit cu același număr de octeți.

Răspuns

Iată un ar articol despre formatul BCn: faceți clic pe mine . Este scris de Nathan Reed, care este destul de activ pe acest site. Așa că probabil va trece și ar putea răspunde la întrebarea dvs. cu mai multe detalii, chiar dacă cred că articolul va explica tot ce trebuie să știți.

Cea mai relevantă parte a întrebării dvs. pare să fie această secțiune din articol:

BC înseamnă „compresie bloc”, iar formatele BCn toate funcționează în termeni de 4 × 4 blocuri de pixeli. Toate imaginile sunt împărțite în aceste blocuri mici și fiecare bloc este autonom – datele pentru decodare sunt toate într-o singură bucată contiguă din memorie . Mai mult, dimensiunea fiecărui bloc comprimat este fixă – fie 8, fie 16 octeți , în funcție de formatul BCn utilizat. Aceasta reprezintă un raport de compresie 4: 1 sau 8: 1, dacă imaginea sursă este în format RGBA pe 8 biți.

Deci, atâta timp cât pixelul dvs. numărul nu se modifică, nici dimensiunea texturii nu se schimbă. Cu toate acestea, cu cât utilizați mai multe canale (doar 3 și 4 sunt acceptate de BC7 conform documentației Microsoft ), cu atât mai puține informații puteți stoca pe canal color într-un bloc. Aceasta înseamnă că pierdeți mai multe informații din cauza compresiei atunci când utilizați RGBA în loc de RGB.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *