Tehát készítettem egy textúrát. Mentettem az RGB-t BC7 tömörítéssel, majd hozzáadott alfa-csatornát [tükrös térkép] változó szürkeárnyalatos szintekkel, és a fájlt ismét RGBA formátumban mentette BC7 tömörítéssel. A kapott fájl mérete megegyezik az alfa nélküli fájl méretével, mégis tartalmaz további információkat – alfa csatornát. Hogyan lehetséges? Nem lehet tortát enni és süteményt enni, ahogy megértem, ezért vannak-e kompromisszumok az azonos méret biztosítása érdekében?
A Photoshopot használom az Intel DDS beépülő moduljával.
Válasz
A BC7 mindig hatékonyan kódol 4 csatornát. Ez része a formátum természetének. Az alfa bekapcsolása azt jelenti, hogy a kompresszor beolvassa és felhasználja az alfa értéket a forrásképedben, de ez mind.
Egy adott dimenzió összes BC7 tömörített képe azonos méretű, mivel a BC7 minden 4×4-et tömörít a texels csoport 128 bitre. De ez nem azt jelenti, hogy ugyanaz a minőségük .
A BC7 adaptív kódolási formátum. Míg mindegyik blokknak rögzített mérete van (térben és bitenként is), mindegyik blokk eltárolja, hogy a blokkolt csatornák hányszor tömörülnek, és hogyan korrelálnak egymással. A sajátosságok összetettek , de az általános fejlemény, hogy a kompresszor blokkonként kiszámítja, hogy az adott blokkhoz milyen tömörítési mód működik a legjobban. Ha a kompresszor meg tud nézni egy blokkot, és látja, hogy az összes texel alfa értéke 1.0, akkor a 128 bitből több bitet költhet a színekre és kevesebbet az alfára.
Mint ilyen, egy textúra " alfa nélkül " pontosan olyan, mint egy alfával ellátott textúra, ahol minden texel alfa értéke 1. Ezek a blokkok költik a legtöbbjüket bitek a texelek nem alfa részein, csak néhány bitet pazarolnak egy " mód " mezőbe, amely tudatja a dekompresszorral, hogy az alfa konstans 1.0.
Ez azt is jelenti, hogy ha a textúrájának változó alfája van, de egyes részeinek állandó alfája van, akkor a BC7 ezeket az állandó alfa területeket kevesebb bittel kódolhatja, így több biteket lehet fejleszteni a továbbfejlesztett színkódolásra.
Tehát nem szabad úgy éreznie, hogy probléma van, mert a két tömörítő kapcsoló azonos bájtszámmal jelent meg.
Válasz
Itt van egy ar cikk a BCn formátumról: kattintson rám . Nathan Reed írta, aki meglehetősen aktív ezen az oldalon. Tehát valószínűleg elhalad, és további kérdésekkel válaszolhat a kérdésére, bár azt hiszem, hogy a cikk mindent megmagyaráz, amit tudnia kell.
Úgy tűnik, hogy a kérdésed szempontjából a legrelevánsabb rész ez a cikk:
A BC jelentése „blokktömörítés”, és a BCn formátumok mind a 4 × 4 pixel blokk. Az összes kép fel van osztva ezekre a kis blokkokra, és mindegyik blokk önálló – az összes dekódoláshoz szükséges adatok egy összefüggő darabban vannak a memóriában . Ezenkívül az egyes tömörített blokkok mérete rögzített – akár 8, akár 16 bájt , attól függően, hogy melyik BCn formátumot használják. Ez 4: 1 vagy 8: 1 tömörítési arányt képvisel, ha a forráskép 8 bites RGBA formátumban van.
Mindaddig, amíg a pixel a szám nem változik, a textúra mérete sem változik. Minél több csatornát használ (azonban a BC7 csak a 3-at és a 4-et támogatja a a Microsoft dokumentációja alapján ), annál kevesebb információ tárolható színes csatornánként egy Blokk. Ez azt jelenti, hogy több információt veszít a tömörítés miatt, ha RGB helyett RGBA-t használ.