Skip to content
  • English
  • Polski
Digital Karabela
Digital Karabela
Primary Navigation Menu
Menu
  • Strona główna
  • Produkty
  • DevBlog
  • Castle Engine
  • Kurs bash
  • O firmie

Obsługa kompresji ASTC w Castle Game Engine

Castle Game Engine Logo

Obsługa kompresji ASTC (Adaptable Scalable Texture Compression) to kolejna funkcja, którą opracowałem dla Castle Game Engine podczas pracy nad moją grą mobilną.

Dlaczego kompresja tekstur jest tak ważna (szczególnie) dla gier mobilnych?

Powolne CPU/GPU

CPU/GPU w urządzeniach mobilnych są znacznie wolniejsze niż przeciętne CPU/GPU w komputerach stacjonarnych. Dlatego kiedy używasz zwykłych plików PNG, muszą one zostać przetworzone (zdekompresowane), zanim będą mogły być użyte. Zabija to wydajność i ma istotny wpływ na czas działania urządzenia na baterii. W przeciwieństwie do tekstur skompresowanych specjalnie dla GPU.

Brak oddzielnej pamięci dla GPU

W większości urządzeń GPU używa po prostu pamięci RAM urządzenia, dodatkowo tej pamięci nie jest za dużo i nie jest za szybka. Plik PNG na dysku może wydawać się mały, ale zajmuje dużo więcej pamięci GPU (pamięci RAM dla urządzeń mobilnych) niż specjalnie skompresowana tekstura, która może być większa na dysku.

Np.: jeżeli mamy obraz PNG 512×512 RGBA (32-bitowy) o rozmiarze na dysku 11 045 bajtów to w pamięci będzie to 512 x 512 x 4 = 1 048 576 bajtów.

W przypadku skompresowania tego obrazu za pomocą ASTC 8×8 będzie to (512/8) x (512/8) x 16 = 65 536 bajtów (w pamięci i na dysku).

Jak widać pliki PNG są lepsze tylko pozornie. Oczywiście jakość może być niższa (kompresja jest stratna), ale wzrost wydajności jest ogromny i wart niewielkiej redukcji jakości.

Dlaczego ASTC?

Jest wiele formatów kompresji tekstur (obsługiwanych przez CGE):

  • PVRTC – obsługiwane przez GPU PowerVR
  • ATITC – obsługiwane przez Qualcomm (układy Adreno)
  • S3TC – obsługiwane przez Nvidia (układy Tegra)
  • ETC1 – powinien być obsługiwany przez wszystkie urządzenia, ale nie obsługuje kanału alfa

Czy musimy więc wygenerować i dodać tekstury dla wszystkich tych układów GPU? Dzięki ASTC, na szczęście nie!

Jeden by wszystkimi rządzić!

ASTC (Adaptable Scalable Texture Compression) zostało stworzone, aby pozbyć się tego bałaganu, zapewniając jeden elastyczny format. Wszystkie nowe procesory graficzne począwszy od drugiej generacji serii Mali-T600, Adreno 400, Apple A8 obsługują ASTC. Bardzo stare urządzenia nie są obsługiwane, ale myślę, że nie są one obecnie zbyt szeroko używane (szczególnie do grania w gry). Jeśli chcesz, zawsze możesz dodać inny format kompresji w celu ich obsługi.

Różne poziomy kompresji

Rozmiar bloku może wynosić od 4 (najlepsza jakość) do 12 (najmniejszy rozmiar). W zależności od przeznaczenia możesz wybrać inny poziom jakości.

Wszystkie rozmiary

Rozmiar tekstury nie musi być potęgą 2 więc nie ma problemu z nieregularnymi rozmiarami tekstur (jak np. w elementach GUI).

Jak użyć ASTC w Castle Game Engine?

Castle Game Engine pozwala łatwo generować skompresowane wersje tekstur, ale najpierw musisz skonfigurować swoje środowisko.

Konfiguracja narzędzi

Aby generować tekstury ASTC, potrzebujesz dwóch narzędzi w zmiennej środowiskowej PATH:

  • astcenc – narzędzie, które generuje tekstury, możesz je pobrać razem z Mali Texture Compression Tool,
  • PVRTexToolCLI z PowerVR Tools and SDK – dobrze wybrać instalator online i dostosować instalację (pełny instalator waży powyżej 2GB)

Na moim komputerze z systemem Windows ścieżki wyglądają następująco:

C:\Program Files\ARM\Mali Developer Tools\Mali Texture Compression Tool v4.3.0\bin\ i C:\Imagination\PowerVR_Graphics\PowerVR_Tools\PVRTexTool\CLI\Windows_x86_64.

Na maszynie z systemem Linux, możesz zmodyfikować plik .profile:

export PATH=$PATH:"/opt/Imagination/PowerVR_Graphics/PowerVR_Tools/PVRTexTool/CLI/Linux_x86_64/"

export PATH=$PATH:"/home/user/bin/Mali_Texture_Compression_Tool_v4.3.0.b81c088_Linux_x64/bin/"

Oczywiście podane powyżej ścieżki to tylko przykłady, powinieneś użyć ścieżek, w których zainstalowałeś te narzędzia.

Konfiguracja CGE

Najpierw musisz przygotować plik material_properties.xml, najprostszy będzie wyglądał tak:

<?xml version="1.0"?>
<properties>
  <auto_generated_textures>
    <compress>
      <format name="ASTC_8x8_RGBA"/> 
    </compress>

    <scale smallest="1" />

    <include path="*" recursive="True" />
  </auto_generated_textures>
</properties>

Więcej informacji na temat tego pliku możesz znaleźć tutaj.

Następnie musisz poinformować CGE o wygenerowanych teksturach. Aby to zrobić, po prostu dodaj CastleMaterialProperties do sekcji uses i ustaw MaterialProperties.URL:

MaterialProperties.URL := 'castle-data:/material_properties.xml';

Generowanie tekstur

Aby wygenerować tekstury, wywołaj narzędzie budowania castle-engine z opcją auto-generate-textures:

castle-engine auto-generate-textures

Po zmianie danych gry zawsze wywołuj generowanie tekstur castle-engine auto-generate-textures. Dzięki temu zostaną przebudowane zmienione pliki.

Projekt można wyczyścić z automatycznie wygenerowanych plików za pomocą:

castle-engine auto-generate-clean

Uwaga! Jeżeli używasz wydania CGE sprzed 24.07.2019, musisz przebudować narzędzie castle-engine

Co dodać do systemu kontroli wersji?

Generowanie tekstur może zajmować trochę czasu, jeżeli chcesz tego uniknąć wygenerowane pliki możesz dodać do VSC. Ale w takim przypadku powinieneś dodać także plik castle_engine_auto_generated.xml. Jeżeli nie chcesz dodawać wygenerowanych plików do VSC, nie dodawaj także pliku castle_engine_auto_generated.xml.

2019-08-02
Poprzedni wpis: Aktualizacja modułu Admob w Castle Game Engine
Następny wpis: Lazarus 2.0.4 wydany!

Wypróbuj moją nową grę! Zupełnie za darmo!

Logo Bricks Color Pick

Bricks Color Pick to zupełnie nowe podejscie do klasycznego arkanoida! Brak dolnej belki! Zasady gry są bardzo proste: Twoim zadaniem jest zmienianie koloru piłki na kolor cegły, z którą piłka się zderzy. Gdy kolor będzie taki sam cegła zostanie zniszczona, w przeciwnym wypadku stracisz życie.

Pobierz z Google Play

Zrzut ekranu pozimu 37/40 5-6 kolorów

Dodatkowo można zmienić kierunek ruchu piłki, przez co nie musimy czekać wieczność aż trafi w ostatni blok.

QR Code Google Play Bricks Color Pick

Zrzut ekranu poziom 62/80 (Tryb relaks)

Ostatnie wpisy

  • Jak skompilować bibliotekę OpenAL z Oboe dla systemu Android
  • Lazarus 2.0.12 wydany
  • Jak naprawić zamrażanie GUI LMMS w systemie Linux?
  • Jak zaktualizować wine do wersji 5.0.0 w Linux Mint 19 / Ubuntu 18
  • Agile Commander 1.2.3 wydany!

Kategorie

  • DevBlog
  • Linux
    • Kurs bash
    • Narzędzie WoeUSB
  • Programowanie
    • Język D (dlang)
      • Kontrolki DlangUI
    • Język Object Pascal
      • Lazarus (pl)
    • Narzędzie make
  • Promocja
  • Tworzenie gier
    • Castle Engine (pl)
    • Godot
  • Windows 10
    • Narzędzie WoeUSB

Produkty:
Agile Commander
Bricks Color Pick

 

 

Digital Karabela – Andrzej Kilijański
76-015 Wyszebórz 32, Poland
https://digitalkarabela.com
Kontakt
Polityka prywatności