Textura BC7 s alfa má stejnou velikost jako BC7 bez alfa

Takže jsem vytvořil texturu. Uložil jsem RGB s kompresí BC7, poté byl přidán alfa kanál [zrcadlová mapa] s různou úrovní stupňů šedi a soubor uložen znovu jako RGBA s kompresí BC7. Výsledný soubor má stejnou velikost jako soubor bez alfa, přesto obsahuje další informace – alfa kanál. Jak je to možné Nemůžete mít dort a jíst dort, jak rozumím, takže existují nějaké kompromisy, které zajistí stejnou velikost?

Používám photoshop s pluginem Intel DDS.

Odpověď

BC7 vždy efektivně kóduje 4 kanály. To je součást povahy formátu. Zapnutí alfa znamená, že kompresor načte a použije hodnotu alfa ve zdrojovém obrázku, ale to je vše.

Všechny komprimované obrázky BC7 dané dimenze mají stejnou velikost, protože BC7 komprimuje každou 4×4 skupina textů na 128 bitů. To ale neznamená, že mají stejnou kvalitu .

BC7 je formát adaptivního kódování. Zatímco každý blok má pevnou velikost (prostorově i bitově), každý blok ukládá, kolik kanálů tento blok skutečně komprimuje a způsob, jakým vzájemně korelují. Specifikace jsou složité , ale hlavní výhodou je, že kompresor zjišťuje na základě jednotlivých bloků, jaký způsob komprese nejlépe funguje pro konkrétní blok. Pokud se kompresor dokáže podívat na blok a zjistit, že alfa pro všechny texty je 1,0, pak může utratit více bitů ze 128 bitů na barvy a méně na alfa.

Jako takový, textura " bez alfa " je přesně jako textura s alfa, kde každý texel má alfa 1. Tyto bloky utratí většinu svých bitů na části alfa textů, které nejsou alfa, zbytečně jen pár bitů v poli " režimu ", které dekompresoru umožňuje vědět, že alfa je konstanta 1.0.

To také znamená, že pokud má vaše textura proměnnou alfa, ale její části mají konstantní alfa, může BC7 tyto konstantní alfa oblasti kódovat s méně bity, takže více bity lze utratit za vylepšené kódování barev.

Takže byste neměli mít pocit, že nastal problém, protože dva přepínače komprese vyšly se stejným počtem bytů.

Odpověď

Tady je ar článek o formátu BCn: klikněte na mě . Autorem je Nathan Reed, který je na tomto webu docela aktivní. Pravděpodobně tedy projde kolem a může na vaši otázku odpovědět podrobněji, i když si myslím, že článek vysvětlí vše, co potřebujete vědět.

Nejdůležitější částí pro vaši otázku se zdá být tato část z article:

BC je zkratka pro „block compression“ a všechny formáty BCn fungují ve smyslu 4 × 4 bloky pixelů. Všechny obrázky jsou nakrájeny na malé bloky a každý blok je samostatný – data k jeho dekódování jsou v jednom souvislém bloku v paměti . Kromě toho je velikost každého komprimovaného bloku pevná – buď 8 nebo 16 bajtů , v závislosti na použitém formátu BCn. To představuje kompresní poměr 4: 1 nebo 8: 1, pokud je zdrojový obrázek v 8bitovém formátu RGBA.

Takže pokud váš pixel počet se nemění, nemění se ani velikost textury. Čím více kanálů však použijete (BC7 podle dokumentace společnosti Microsoft podporuje pouze 3 a 4), tím méně informací můžete uložit na barevný kanál v blok. To znamená, že při použití RGBA místo RGB ztratíte více informací kvůli kompresi.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *