Tekstura BC7 z alfa ma taki sam rozmiar jak BC7 bez alpha

Więc stworzyłem teksturę. Zapisałem tę z RGB z kompresją BC7, następnie dodano kanał alfa [mapa lustrzana] z różnymi poziomami skali szarości i ponownie zapisano plik jako RGBA z kompresją BC7. Plik wynikowy ma taki sam rozmiar jak plik bez alfy, ale zawiera dodatkowe informacje -alfa kanał. Jak to jest możliwe? Nie możesz jeść ciasta i jeść ciasta, jak rozumiem, więc czy są jakieś kompromisy, aby zapewnić ten sam rozmiar?

Używam Photoshopa z wtyczką Intel DDS.

Odpowiedź

BC7 zawsze skutecznie koduje 4 kanały. Na tym polega natura tego formatu. Włączenie alfa oznacza, że kompresor odczyta i użyje wartości alfa w obrazie źródłowym, ale to wszystko.

Wszystkie skompresowane obrazy BC7 danego wymiaru mają ten sam rozmiar, ponieważ BC7 kompresuje każdy 4×4 grupa tekseli na 128-bitowe. Ale to nie znaczy, że mają tę samą jakość .

BC7 jest adaptacyjnym formatem kodowania. Podczas gdy każdy blok ma ustalony rozmiar (zarówno pod względem przestrzennym, jak i bitowym), każdy blok przechowuje liczbę kanałów, które faktycznie są poddawane kompresji, oraz sposób, w jaki są ze sobą skorelowane. Specyfika jest złożona , ale ogólną zaletą jest to, że kompresor ustala na podstawie bloku, jaki sposób kompresji działa najlepiej dla danego bloku. Jeśli kompresor może spojrzeć na blok i zobaczyć, że alfa dla wszystkich tekseli wynosi 1.0, to może wydać więcej bitów ze 128 bitów na kolory, a mniej na alfa.

Jako taka, tekstura " bez kanału alfa " jest dokładnie jak tekstura z kanałem alfa, gdzie każdy texel ma wartość alfa równą 1. Te bloki spędzą większość swojego bity w innych niż alfa części tekstów, marnując tylko kilka bitów na pole " trybu ", które informuje dekompresor, że alfa to stała wartość 1.0.

Oznacza to również, że jeśli twoja tekstura ma zmienną wartość alfa, ale jej części mają stałą alfa, BC7 może zakodować te stałe obszary alfa z mniejszą liczbą bitów, dzięki czemu więcej bity można wydać na ulepszone kodowanie kolorów.

Więc nie powinieneś uważać, że jest problem, ponieważ dwa przełączniki kompresji wyszły z taką samą liczbą bajtów.

Odpowiedź

Oto ar artykuł o formacie BCn: kliknij mnie . Został napisany przez Nathana Reeda, który jest dość aktywny na tej stronie. Więc prawdopodobnie przejdzie obok i może odpowiedzieć na twoje pytanie, podając więcej szczegółów, chociaż myślę, że artykuł wyjaśni wszystko, co musisz wiedzieć.

Najbardziej odpowiednią częścią twojego pytania wydaje się być ta sekcja z artykuł:

BC oznacza „kompresję blokową”, a formaty BCn działają w kategoriach 4 × 4 bloki pikseli. Wszystkie obrazy są dzielone na te małe bloki, a każdy blok jest samowystarczalny – dane do zdekodowania znajdują się w jednym ciągłym fragmencie w pamięci . Ponadto rozmiar każdego skompresowanego bloku jest stały – 8 lub 16 bajtów , w zależności od używanego formatu BCn. Oznacza to współczynnik kompresji 4: 1 lub 8: 1, jeśli obraz źródłowy jest w 8-bitowym formacie RGBA.

Tak długo, jak piksel liczba nie zmienia się, nie zmienia się również rozmiar tekstury. Jednak im więcej kanałów używasz (tylko 3 i 4 są obsługiwane przez BC7 zgodnie z dokumentacją firmy Microsoft ), tym mniej informacji można przechowywać dla każdego kanału koloru w blok. Oznacza to, że tracisz więcej informacji z powodu kompresji, gdy używasz RGBA zamiast RGB.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *