Powrót do bloga
Formaty

Format KTX: kompletny przewodnik po kontenerze tekstur Khronos

20 min. przeczytaj

KTX (Khronos Tekstura) to oficjalny otwarty standard formatów kontenerów tekstur opracowany i utrzymywany przez Grupę Khronos. Jako bezpłatny, neutralny dla dostawców format, zaprojektowany specjalnie dla nowoczesnych graficznych interfejsów API, takich jak OpenGL, OpenGL ES i Vulkan, KTX zapewnia ustandaryzowany sposób przechowywania i transportu skompresowanych tekstur na różnych platformach i aplikacjach. Dzięki dwóm głównym wersjom – KTX1 dla starszych aplikacji OpenGL i KTX2 dla nowoczesnych przepływów pracy opartych na Vulkan – KTX służy jako szkielet dla potoków zasobów tekstur w opracowywaniu profesjonalnej grafiki.

Co to jest format KTX?

KTX to format kontenera przeznaczony do przechowywania danych tekstur w sposób, który może być bezpośrednio wykorzystany przez sprzęt graficzny. W przeciwieństwie do formatów obrazów, takich jak PNG czy JPEG, KTX jest specjalnie zoptymalizowany pod kątem ładowania tekstur GPU i obsługuje różne formaty kompresji, w tym ETC, ASTC, BCn i PVRTC. Format zawiera niezbędne metadane do właściwej interpretacji tekstur, dzięki czemu idealnie nadaje się do wieloplatformowych aplikacji graficznych.

Format został pierwotnie stworzony, aby rozwiązać problem fragmentacji formatów kompresji tekstur na różnych platformach i interfejsach API. Przed KTX programiści musieli obsługiwać wiele zastrzeżonych formatów, takich jak DDS dla DirectX, PVR dla PowerVR i różne formaty specyficzne dla platformy. KTX zapewnia ujednolicone rozwiązanie, które działa w OpenGL, OpenGL ES i Vulkan, z możliwością bezpośredniego ładowania procesora graficznego.

KTX znacznie ewoluował od czasu jego wprowadzenia, a KTX2 stanowi ogromny krok naprzód pod względem funkcji i możliwości. Nowsza wersja dodaje obsługę schematów superkompresji, takich jak Basis Universal, ulepszoną obsługę metadanych za pomocą deskryptora formatu danych (DFD) i lepszą obsługę nowoczesnych funkcji tekstur, takich jak tablice tekstur, tekstury 3D i mapy sześcianów.

Kluczowe cechy formatu KTX

Standard Khronosa

Oficjalny standard Khronos Group zapewniający szerokie zastosowanie w branży i kompatybilność między platformami

Formatuj agnostyka

Obsługuje praktycznie każdy format kompresji tekstur, w tym ETC, ASTC, BCn, PVRTC i formaty nieskompresowane

Bogate metadane

Kompleksowa obsługa metadanych, w tym orientacja, przestrzeń kolorów, ustawienia kompresji i niestandardowe pary klucz-wartość

Pełna obsługa Mipmap

Natywna obsługa łańcuchów mipmap, tablic tekstur, tekstur 3D i map kostek

Zaawansowane typy tekstur

Obsługa tablic tekstur, tekstur 3D, map sześciennych i innych zaawansowanych typów tekstur

Wieloplatformowy

Działa bezproblemowo na platformach Windows, macOS, Linux, iOS, Android i internetowych

Porównanie wersji KTX

Zrozumienie różnic pomiędzy KTX1 i KTX2 jest kluczowe przy wyborze odpowiedniego formatu dla Twojej aplikacji:

KTX1 (starsza wersja)

Oryginalny format KTX przeznaczony dla aplikacji OpenGL i OpenGL ES. Prosta struktura oparta na parametrach tekstury OpenGL.

KTX1 wykorzystuje prostą strukturę nagłówka, po której następują dane klucza i wartości, a następnie dane obrazu. Jest kompatybilny ze starszymi wersjami OpenGL i zapewnia podstawowe możliwości przechowywania tekstur. Choć nadal jest szeroko obsługiwany, brakuje mu zaawansowanych funkcji KTX2.

KTX2 (nowoczesny)

Nowoczesny format KTX przeznaczony dla aplikacji graficznych Vulkan i nowej generacji. Ulepszone funkcje i obsługa superkompresji.

KTX2 wprowadza znaczące ulepszenia, w tym superkompresję Basis Universal, deskryptory formatu danych (DFD), indeks poziomów zapewniający efektywny dostęp do danych oraz lepszą obsługę tablic tekstur i tekstur 3D. Jest to zalecany wybór w przypadku nowych projektów.

Obsługiwane formaty kompresji

KTX służy jako kontener dla różnych formatów kompresji, co czyni go niezwykle wszechstronnym:

ETC (kompresja tekstury Ericsson)

Standardowa kompresja dla urządzeń mobilnych, z ETC1 dla RGB i ETC2 dla kompresji RGBA

ASTC (adaptacyjna skalowalna kompresja tekstury)

Nowoczesna, wysokiej jakości kompresja obsługująca różne rozmiary bloków od 4x4 do 12x12 pikseli

BCn (kompresja bloku)

Formaty kompresji DirectX, w tym BC1-BC7, do gier komputerowych i aplikacji Windows

PVRTC (kompresja tekstur PowerVR)

Kompresja specyficzna dla PowerVR dla systemów iOS i systemów wbudowanych w wariantach 2bpp i 4bpp

Nieskompresowane formaty

Standardowe nieskompresowane formaty, takie jak RGB8, RGBA8 i różne formaty HDR

Struktura pliku KTX

Pliki KTX mają ustrukturyzowany format składający się z trzech głównych komponentów:

Nagłówek pliku

Zawiera identyfikację formatu, informacje o wersji i podstawowe metadane tekstury, takie jak wymiary i format

Dane klucz-wartość

Sekcja metadanych zawierająca niestandardowe pary klucz-wartość w celu uzyskania dodatkowych informacji o teksturze

Dane obrazu

Rzeczywiste skompresowane lub nieskompresowane dane tekstur uporządkowane według poziomów mipmap i warstw tablic

Struktura nagłówka KTX1

KTX1 wykorzystuje 64-bajtowy nagłówek oparty na parametrach tekstury OpenGL:

Identyfikator (12 bajtów)

„«KTX 11»\r\n\x1A\n” - Identyfikator formatu pliku do sprawdzenia

Endianowość (4 bajty)

Określa kolejność bajtów: 0x04030201 dla small-endian, 0x01020304 dla big-endian

glType (4 bajty)

Typ danych OpenGL (np. GL_UNSIGNED_BYTE) - 0 dla formatów skompresowanych

glFormat (4 bajty)

Format OpenGL (np. GL_RGB) - 0 dla formatów skompresowanych

glInternalFormat (4 bajty)

Wewnętrzny format OpenGL (np. GL_COMPRESSED_RGB8_ETC2)

glBaseInternalFormat (4 bajty)

Podstawowy format OpenGL zapewniający kompatybilność ze starszymi wersjami OpenGL

pikselWidth (4 bajty)

Szerokość tekstury w pikselach

wysokość piksela (4 bajty)

Wysokość tekstury w pikselach (0 dla tekstur 1D)

pikselDepth (4 bajty)

Głębokość tekstury w pikselach (0 dla tekstur 2D)

numberOfArrayElements (4 bajty)

Liczba elementów tablicy (0 dla tekstur niebędących tablicą)

liczbaOfFaces (4 bajty)

Liczba ścian (6 dla Cubemap, 1 dla zwykłych tekstur)

numberOfMipmapLevels (4 bajty)

Liczba poziomów mipmap (1 w przypadku braku mipmap)

bytesOfKeyValueData (4 bajty)

Rozmiar sekcji danych klucz-wartość w bajtach

Ulepszenia struktury KTX2

KTX2 wprowadza kilka nowych elementów konstrukcyjnych zwiększających funkcjonalność:

Ulepszony nagłówek

Ulepszona struktura nagłówka z informacjami o wersji, identyfikatorami formatu i wskaźnikami rozmiaru danych

Indeks poziomu

Wydajny system indeksowania zapewniający szybki dostęp do określonych poziomów mipmap i danych tekstur

Deskryptor formatu danych (DFD)

Kompleksowy system opisu formatu zastępujący stałe formatu OpenGL

Dane klucz-wartość

Ulepszony system metadanych z obsługą internacjonalizacji i złożonych typów danych

Globalne dane dotyczące superkompresji

Globalne dane dla schematów superkompresji, takich jak Basis Universal

Metadane i dane typu klucz-wartość

Pliki KTX mogą zawierać obszerne metadane w sekcji danych klucz-wartość:

Orientacja tekstury

Określa orientację tekstury (lewy górny, prawy dolny itp.) w celu prawidłowego renderowania

Informacje o formacie

Szczegółowe informacje na temat formatu kompresji, ustawień jakości i parametrów kodowania

Informacje o pisarzu

Informacje o narzędziu lub aplikacji, która utworzyła plik KTX

Ustawienia kompresji

Zastosowano określone parametry kompresji i ustawienia jakości

Przestrzeń kolorów

Informacje o przestrzeni kolorów, w tym profile kolorów sRGB, liniowe i HDR

Przebieg prac programistycznych KTX

Tworzenie i zarządzanie teksturami KTX obejmuje następujące kluczowe etapy:

1

Przygotowanie zasobów źródłowych

Przygotuj wysokiej jakości obrazy źródłowe o odpowiednich wymiarach i profilach kolorów

2

Wybór formatu

Wybierz odpowiedni format kompresji w oparciu o platformy docelowe i wymagania jakościowe

3

Kompresja tekstur

Użyj narzędzi takich jak toktx lub potoki zasobów, aby skompresować obrazy źródłowe do formatu KTX

4

Dodatek metadanych

Dodaj odpowiednie metadane, w tym orientację, przestrzeń kolorów i właściwości niestandardowe

5

Walidacja pliku

Sprawdź pliki KTX pod kątem zgodności i poprawności z platformami docelowymi

6

Integracja aplikacji

Zintegruj ładowanie i obsługę KTX z aplikacją graficzną

Kluczowe zalety formatu KTX

Standard branżowy

Standard Khronos Group zapewniający długoterminowe wsparcie i szerokie zastosowanie w branży

Elastyczność formatu

Obsługuje praktycznie każdy format kompresji, dzięki czemu jest przyszłościowy i wszechstronny

Bogate metadane

Kompleksowy system metadanych umożliwiający właściwą interpretację tekstur i zarządzanie nimi

Zaawansowane funkcje

Obsługa nowoczesnych funkcji tekstur, takich jak tablice, tekstury 3D i superkompresja

Wieloplatformowy

Działa na wszystkich głównych platformach bez modyfikacji i konwersji

Gotowy na przyszłość

KTX2 i obsługa superkompresji zapewniają kompatybilność z przyszłymi technologiami graficznymi

Typowe przypadki użycia

Aplikacje Vulkan

Podstawowy format nowoczesnych aplikacji Vulkan z możliwością bezpośredniego ładowania procesora graficznego

Aplikacje OpenGL

Wieloplatformowy format tekstur dla aplikacji OpenGL i OpenGL ES

Aplikacje WebGL

Internetowe aplikacje graficzne poprzez moduły ładujące tekstury KTX i WebGL

Rozwój gry

Tworzenie profesjonalnych gier z wykorzystaniem wieloplatformowych potoków zasobów tekstur

Aplikacje VR/AR

Aplikacje rzeczywistości wirtualnej i rozszerzonej wymagające wydajnego ładowania tekstur

Rozwój mobilny

Aplikacje na iOS i Androida ze zoptymalizowanymi formatami kompresji tekstur

KTX kontra inne formaty

Zrozumienie, jak KTX wypada na tle innych formatów tekstur:

KTX kontra DDS

KTX jest wieloplatformowy i niezależny od API, podczas gdy DDS jest specyficzny dla DirectX i koncentruje się na systemie Windows

KTX kontra PVR

KTX obsługuje wiele formatów kompresji, podczas gdy PVR jest zoptymalizowany pod kątem procesorów graficznych PowerVR i iOS

KTX1 kontra KTX2

KTX2 oferuje superkompresję, lepsze metadane i nowoczesne funkcje w porównaniu ze starszym KTX1

KTX vs Podstawa Uniwersalna

KTX to format kontenera, natomiast Basis Universal to format kompresji, który można przechowywać w KTX2

Narzędzia i zasoby programistyczne

Narzędzie toktx

Oficjalne narzędzie wiersza poleceń do tworzenia i konwertowania plików KTX z różnych formatów obrazów

Pakiet narzędzi KTX

Kompletny zestaw narzędzi obejmujący toktx, ktxinfo, ktxcheck i inne narzędzia

SDK Vulkana

Oficjalny zestaw SDK Vulkan zawiera obsługę KTX i narzędzia do ładowania

Biblioteki OpenGL

Różne biblioteki i frameworki OpenGL z wbudowaną obsługą KTX

Wsparcie Unity KTX

Silnik Unity obsługuje ładowanie tekstur KTX poprzez wtyczki i potoki zasobów

Unreal Engine KTX

Unreal Engine zapewnia obsługę tekstur KTX poprzez ustawienia kompresji tekstur

Najlepsze praktyki rozwoju KTX

Użyj KTX2 w nowych projektach, aby skorzystać z nowoczesnych funkcji i możliwości superkompresji

Wybierz odpowiedni format kompresji w oparciu o platformy docelowe: ETC dla urządzeń mobilnych, BCn dla komputerów stacjonarnych

Dołącz kompleksowe metadane, aby zapewnić właściwą interpretację tekstur na różnych platformach

Sprawdź poprawność plików KTX na sprzęcie docelowym na wczesnym etapie projektowania, aby uniknąć problemów ze zgodnością

Użyj odpowiednich ustawień mipmapy, aby zoptymalizować wydajność renderowania przy różnych odległościach oglądania

Rozważ użycie superkompresji Basis Universal w przypadku wdrażania na wielu platformach z optymalnymi rozmiarami plików

Przetestuj wydajność ładowania tekstur przy rzeczywistym docelowym sprzęcie i warunkach sieciowych

Zaimplementuj odpowiednią obsługę błędów i mechanizmy awaryjne dla nieobsługiwanych formatów lub funkcji

Ścieżki migracji i aktualizacji

Wytyczne dotyczące migracji do KTX lub aktualizacji pomiędzy wersjami:

Migracja z KTX1 do KTX2

Użyj toktx z flagą --ktx2, aby przekonwertować starsze pliki KTX1 na nowoczesny format KTX2

Konwersja z DDS do KTX

Użyj narzędzi do konwersji toktx lub tekstur, aby migrować tekstury DirectX do wieloplatformowego formatu KTX

Konwersja z PVR na KTX

Konwertuj tekstury PVR specyficzne dla systemu iOS na KTX, aby zapewnić kompatybilność między platformami

Dodawanie podstawowej kompresji uniwersalnej

Użyj toktx z opcjami Basis Universal, aby dodać superkompresję do plików KTX2

Dlaczego warto wybrać KTX2?

KTX2 oferuje znaczną przewagę nad KTX1 i innymi formatami:

Podstawa Uniwersalnego wsparcia

Natywna obsługa superkompresji Basis Universal umożliwiająca uniwersalne wdrażanie tekstur

Zwiększona kompresja

Ulepszone współczynniki kompresji i jakość dzięki nowoczesnym schematom kompresji

Schematy superkompresji

Obsługa różnych formatów superkompresji poza Basis Universal

Deskryptory formatu danych

Kompleksowy system opisu formatu zastępujący starsze stałe OpenGL

Przyszłościowy projekt

Zaprojektowany dla nowoczesnych i przyszłych graficznych interfejsów API i technologii kompresji

Wniosek

Format KTX reprezentuje standard branżowy w zakresie wieloplatformowego zarządzania teksturami, zapewniając programistom solidne, elastyczne i przyszłościowe rozwiązanie w zakresie potoków zasobów tekstur. Niezależnie od tego, czy używasz starszego KTX1 do aplikacji OpenGL, czy nowoczesnego KTX2 do programowania w oparciu o Vulkan, KTX oferuje narzędzia i funkcje potrzebne do profesjonalnego rozwoju grafiki.

Ponieważ branża graficzna stale ewoluuje w kierunku rozwoju wieloplatformowego i bardziej zaawansowanych technologii kompresji, KTX2 dzięki obsłudze superkompresji Basis Universal i nowoczesnym funkcjom pozycjonuje się jako najlepszy wybór w zakresie zarządzania teksturami. Zrozumienie formatu KTX i jego możliwości jest niezbędne dla każdego programisty pracującego z nowoczesnymi aplikacjami graficznymi.

Dalsza lektura i zasoby

Poszerzaj swoją wiedzę, korzystając z tych wiarygodnych zasobów:

Wypróbuj nasze narzędzia