Format PKM i ETC: kompletny przewodnik
PKM to prosty format kontenera dla tekstur skompresowanych w formacie ETC, szeroko stosowany na platformach Android i OpenGL ES. Ten artykuł zawiera kompletny przewodnik po zrozumieniu struktury formatu PKM, wersji kompresji ETC/ETC2 i sposobu ich efektywnego wykorzystania.
Co to jest format PKM?
PKM (skrót od „PoKeMon”, nazwany przez firmę Ericsson) to prosty format kontenera zaprojektowany specjalnie do przechowywania danych tekstur skompresowanych za pomocą ETC. W przeciwieństwie do złożonych formatów, takich jak KTX czy DDS, PKM ma minimalną strukturę z zaledwie 16-bajtowym nagłówkiem, po którym następują skompresowane dane obrazu.
Format został stworzony, aby zapewnić lekki sposób przechowywania i ładowania skompresowanych tekstur ETC na urządzeniach mobilnych. Jego prostota ułatwia implementację i analizę, praktycznie bez dodatkowych kosztów poza samymi skompresowanymi danymi tekstur.
Struktura pliku PKM
- Nagłówek 16-bajtowy: Liczba magiczna (PKM), wersja, format, wymiary
- Skompresowane dane tekstur: surowe bloki ETC/ETC2
Wersje kompresji ETC
Istnieją dwie główne wersje kompresji ETC, każda z różnymi możliwościami:
ETC1 (kompresja tekstur Ericsson 1)
Oryginalny standard ETC, obsługujący tylko kanały kolorów RGB ze stałym współczynnikiem kompresji 4:1. Szeroko obsługiwane na urządzeniach z Androidem od OpenGL ES 2.0.
Wsparcie: Wszystkie urządzenia OpenGL ES 2.0+
Współczynnik kompresji: 4:1 stały (4 bity na piksel)
ETC2 (kompresja tekstur Ericsson 2)
Ulepszony następca ETC1, dodający obsługę RGBA z wieloma opcjami formatu. Zapewnia lepszą jakość i obsługę kanału alfa przy zachowaniu kompatybilności wstecznej.
Wsparcie: OpenGL ES 3.0+, Vulkan
Współczynnik kompresji: 4:1 do 8:1 w zależności od formatu
Warianty formatu PKM
PKM może zawierać różne typy formatów ETC:
ETC1 RGB
Oryginalny format, tylko RGB, bez kanału alfa
ETC2 RGB
Ulepszona kompresja RGB z lepszą jakością niż ETC1
ETC2 RGBA
Pełna obsługa RGBA z kompresją 8:1 (8 bitów na piksel)
ETC2 RGB + alfa z przebiciem
RGB z 1-bitową alfa, zachowującą kompresję 4:1
Zalety PKM/ETC
Uniwersalna obsługa Androida
Gwarantujemy, że ETC1 będzie obsługiwany na wszystkich urządzeniach z Androidem, co czyni go najbardziej przenośnym formatem kompresji do programowania na Androidzie.
Naprawiono współczynnik kompresji
Przewidywalne wykorzystanie pamięci dzięki stałym współczynnikom kompresji 4:1 lub 8:1, co upraszcza obliczenia budżetu pamięci.
Dobry stosunek jakości do rozmiaru
ETC2 zapewnia doskonałą jakość wizualną dla większości typów tekstur, porównywalną z formatami komputerowymi, takimi jak DXT/BCn.
Dekodowanie sprzętowe
Bezpośrednia dekompresja procesora graficznego przy zerowym obciążeniu procesora podczas renderowania, umożliwiająca efektywne próbkowanie tekstur.
Ograniczenia i rozważania
Limity jakości ETC1
ETC1 może wyświetlać widoczne artefakty na teksturach ze szczegółami o wysokiej częstotliwości lub gładkimi gradientami. Rozważ użycie ETC2, aby uzyskać lepszą jakość.
Brak alfa w ETC1
ETC1 nie obsługuje kanałów alfa. Jeśli chcesz używać urządzeń OpenGL ES 2.0, musisz użyć ETC2 RGBA lub przechowywać alfa oddzielnie.
Ograniczone zaawansowane funkcje
PKM nie obsługuje mipmap, map sześciennych ani tablic tekstur. Dla tych zaawansowanych funkcji użyj formatów KTX lub KTX2.
Jak korzystać z formatu PKM
Używanie plików PKM w swoich projektach jest proste:
Kodowanie do PKM
- Prześlij swój obraz PNG/JPG (musi mieć wymiary potęgi 2 lub wielokrotności 4)
- Wybierz pomiędzy ETC1 RGB lub ETC2 RGB/RGBA w zależności od potrzeb
- Pobierz wygenerowany plik .pkm i zintegruj go ze swoim projektem
Dekodowanie plików PKM
- Prześlij plik .pkm, aby sprawdzić jego zawartość
- Wyświetl podgląd zdekompresowanej tekstury i sprawdź jakość
- Eksportuj do PNG, jeśli chcesz edytować lub sprawdzić teksturę
Najlepsze praktyki
- Użyj ETC1 RGB, aby uzyskać maksymalną kompatybilność ze wszystkimi urządzeniami z Androidem (OpenGL ES 2.0+)
- Preferuj ETC2 RGBA w przypadku nowoczesnych urządzeń (OpenGL ES 3.0+), które wymagają kanałów alfa
- Aby uzyskać najlepszą jakość, upewnij się, że wymiary tekstury są wielokrotnościami 4 (ETC1) lub potęgą 2
- W przypadku tekstur wymagających wersji alfa na starszych urządzeniach rozważ użycie oddzielnych tekstur w skali szarości
- Testuj skompresowane tekstury na rzeczywistych urządzeniach docelowych — postrzeganie jakości różni się w zależności od rodzaju zawartości
Wniosek
PKM z kompresją ETC/ETC2 to standardowy wybór dla Androida i mobilnego rozwoju OpenGL ES. Uniwersalna obsługa, przewidywalna wydajność i dobra jakość sprawiają, że jest to doskonały domyślny kompresor tekstur na urządzeniach mobilnych.
Nasze internetowe narzędzia do kodowania i dekodowania PKM ułatwiają pracę z teksturami skompresowanymi w formacie ETC bez konieczności instalowania narzędzi wiersza poleceń lub zestawów SDK. Niezależnie od tego, czy tworzysz nowe tekstury, czy sprawdzasz istniejące, narzędzia te pomogą Ci zoptymalizować potok grafiki mobilnej.
Dalsza lektura i odniesienia
Dowiedz się więcej o formatach ETC i PKM:
- Kompresja tekstur ETC (Khronos) - Oficjalna specyfikacja OpenGL ES i dokumentacja w formacie ETC
- Kompresja tekstur Ericsson (Wikipedia) - Historia i szczegóły techniczne algorytmów kompresji ETC
- Grafika na Androida: kompresja tekstur - Oficjalny przewodnik dla Androida po formatach kompresji tekstur
- Specyfikacja formatu pliku PKM - Specyfikacja techniczna formatu kontenera PKM