Powrót do bloga
Formaty

Format PKM i ETC: kompletny przewodnik

10 min. przeczytaj

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

  1. Prześlij swój obraz PNG/JPG (musi mieć wymiary potęgi 2 lub wielokrotności 4)
  2. Wybierz pomiędzy ETC1 RGB lub ETC2 RGB/RGBA w zależności od potrzeb
  3. Pobierz wygenerowany plik .pkm i zintegruj go ze swoim projektem

Dekodowanie plików PKM

  1. Prześlij plik .pkm, aby sprawdzić jego zawartość
  2. Wyświetl podgląd zdekompresowanej tekstury i sprawdź jakość
  3. 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:

Wypróbuj nasze narzędzia