Sat
08
Nov 2008
W amatorskich grach tekstury zapisujemy zwykle w "tradycyjnych" formatach plików, np. TGA. Ci, którzy piszą w DirectX mają ten komfort, że ich biblioteka potrafi sama z siebie wczytywać różne formaty plików. Pośród nich jest DDS - naturalny format DirectX-a, którego możliwości są takie jak różnorodność formatów dostępnych dla tekstur przechowywanych w pamięci. Programy graficzne można skłonić do obsługi tego formatu instalując darmową wtyczkę (do Photoshopa, do GIMP-a). Można też konwertować tekstury na ten format za pomocą DirectX Texture Tool - programu dołączonego do DX SDK.
Pośród formatów, w jakich może być obrazek zapisany w pliku DDS (jak i wczytana z niego do pamięci tekstura) warto wymienić formaty skompresowane DXT. Stosowana w nich kompresja używa bardzo ciekawego algorytmu, w niczym niepodobnego do np. JPEG. Każdy blok 4x4 teksele jest zapisany w postaci dwóch kolorów R5G6B5 oraz, dla każdego teksela, dwóch bitów mówiących o interpolacji między tymi kolorami. W ten sprytny sposób można w takim bloku zapisać równie dobrze płynny gradient, co ostrą krawędź. Format DXT1 służy do tekstur nieprzezroczystych lub z 1-bitowym kanałem Alfa, a DXT5 obsługuje zróżnicowane wartości Alfa. DXT1 poświęca 8 bajtów na blok, a DXT5 - 16 bajtów na blok. Niestety, do kompresji normal map żaden z nich się nie nadaje i dlatego badacze próbują na różne sposoby rozwiązać ten problem.
Podsumowując, warto stosować format pliku DDS, a użycie odpowiedniego formatu tekstury zaoszczędzi miejsca zarówno na dysku, jak i w pamięci karty graficznej (tam też tekstury DXT leżą nadal w postaci skompresowanej!), bez zauważalnej straty jakości.