Compositing — to proces łączenia wielu wizualnych warstw w jeden końcowy obraz. Według Apple Core Animation Documentation, 2025, w tworzeniu aplikacji mobilnych compositing jest używany do nakładania warstw UI, łączenia renderowania 3D z interfejsem i tworzenia animacji. Compositing zarządza kolejnością rysowania, przezroczystością i mieszaniem kolorów między warstwami.
Najważniejsze
Compositing — to końcowy etap potoku graficznego, na którym wszystkie oddzielnie wyrenderowane warstwy (sceny 3D, elementy UI, wideo, interfejs systemowy) są łączone w jeden obraz do wyświetlenia na ekranie. Każda warstwa może mieć swój kolor, przezroczystość (alpha), pozycję i kolejność nakładania.
W kontekście tworzenia aplikacji mobilnych compositing jest ważny dla interfejsu użytkownika: okna, przyciski, tekst, ikony — wszystkie te elementy są kompozytowane w jedną scenę. System compositingu zarządza kolejnością rysowania (z-order), prawidłowym nakładaniem półprzezroczystych elementów i animacją przejść między stanami UI.
W potoku graficznym compositing odbywa się po zakończeniu wszystkich przejść shaderów i rasteryzacji. GPU pobiera gotowe warstwy z framebufferów, stosuje operacje blendingu i zapisuje wynik do głównego bufora ramki (front buffer) w celu wysłania na wyświetlacz.
Compositing wykorzystuje mieszanie piksel po pikselu (blending) kolorów z różnych warstw. Każdy piksel obrazu wyjściowego jest obliczany na podstawie kolorów pikseli z nakładanych warstw z uwzględnieniem przezroczystości (kanał alpha) i wybranego trybu mieszania.
Każda warstwa zawiera kanał alpha (czwarty składnik koloru RGBA), określający jej nieprzezroczystość. Alpha = 1,0 — całkowicie nieprzezroczysty, alpha = 0,0 — całkowicie przezroczysty. Alpha blending oblicza kolor piksela jako ważoną sumę kolorów warstwy przedniej (source) i tylnej (destination): result = source * alpha + dest * (1 - alpha).
Compositing jest wykonywany w kolejności od warstwy najdalszej do najbliższej (back-to-front). Najpierw renderowana jest warstwa tła, a następnie każda kolejna warstwa nakładana jest na poprzednią z uwzględnieniem jej przezroczystości. Z-order określa, która warstwa znajduje się wyżej i będzie zakrywać warstwy poniżej.
Compositing obsługuje różne tryby mieszania (blend modes), które określają, jak kolory warstw są łączone. Każdy tryb daje inny efekt wizualny i ma swoje koszty obliczeniowe.
| Tryb | Formuła | Zastosowanie |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Standardowe nakładanie z przezroczystością |
| Additive | src + dst | Efekty poświaty, cząsteczki |
| Multiply | src * dst | Przyciemnianie, cienie |
| Screen | 1 - (1 - src) * (1 - dst) | Rozjaśnianie, refleksy |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Wydajny (bez mnożenia w locie) |
W trybie premultiplied alpha kanały kolorów są przechowywane już pomnożone przez kanał alpha (RGB × A). Eliminuje to konieczność mnożenia przy każdej operacji blendingu, przyspieszając compositing. Premultiplied alpha — standardowy format dla GPU-compositingu w iOS Core Animation i Android HWUI.
Każdy mobilny system operacyjny ma własny system compositingu, zoptymalizowany dla swojej platformy sprzętowej. Compositing w mobilnych systemach operacyjnych odpowiada za renderowanie całego interfejsu użytkownika.
W iOS compositingiem zarządza Core Animation — wysokopoziomowy system działający na Metal lub OpenGL ES. Core Animation tworzy layer tree (drzewo warstw), które następnie jest kompozytowane w końcowy obraz. Core Animation automatycznie określa, które warstwy uległy zmianie, i przerysowuje tylko je (incremental compositing), co minimalizuje obciążenie GPU.
W Android compositing jest wykonywany przez SurfaceFlinger — usługę systemową, która łączy powierzchnie (surfaces) z różnych aplikacji i interfejsu systemowego. SurfaceFlinger wykorzystuje HWC (Hardware Composer) do przeniesienia części pracy związanej z compositingiem na dedykowany sprzęt kontrolera wyświetlacza.
Wydajność compositingu — częste wąskie gardło w aplikacjach mobilnych, szczególnie przy złożonych animacjach i nakładaniu wielu półprzezroczystych warstw. Każda dodatkowa warstwa wymaga odczytu, mieszania i zapisu pikseli w pamięci.
Nowoczesne urządzenia mobilne wykonują compositing na GPU poprzez wyspecjalizowane bloki blendingu. GPU-compositing wykorzystuje równoległe bloki ROP i filtry tekstur do szybkiego mieszania pikseli. CPU-compositing jest używany tylko w rzadkich przypadkach (stare urządzenia, testowanie).
Optymalizacja compositingu — jedno z kluczowych zadań przy tworzeniu interfejsów mobilnych. Płynność UI (60 FPS) bezpośrednio zależy od efektywności łączenia warstw.
Do analizy wydajności compositingu używaj: Core Animation Profiler (Xcode Instruments) — pokazuje liczbę warstw i częstotliwość compositingu; GPU Debugger (Android Studio) — wyświetla obciążenie GPU i overdraw; Overdraw Visualisation — narzędzie debugowania pokazujące obszary wielokrotnego przerysowywania pikseli.
Często zadawane pytania
Compositing to jak sklejanie kilku przezroczystych folii z rysunkami w jeden obrazek. Każda folia to warstwa (przycisk, tło, tekst), a przezroczystość określa, jak warstwy prześwitują przez siebie nawzajem.
Renderowanie — tworzenie zawartości każdej warstwy (rysowanie przycisku, teksturowanie modelu 3D). Compositing — łączenie gotowych warstw w końcowy obraz z uwzględnieniem przezroczystości i kolejności nakładania.
Core Animation kompozytuje warstwy na GPU przez Metal. Problemy zaczynają się przy dużej liczbie półprzezroczystych warstw (overdraw) lub przy CPU-compositingu (off-screen rendering). Używaj Core Animation Profiler do diagnostyki.
Hardware Composer (HWC) — sprzętowy moduł kontrolera wyświetlacza wykonujący compositing bez obciążania GPU. HWC może łączyć do 4-8 warstw sprzętowo, co zmniejsza zużycie energii i uwalnia GPU do innych zadań.
Łącz statyczne warstwy (layer flattening), używaj nieprzezroczystych kolorów gdzie to możliwe, zmniejszaj rozmiar buforów offscreen i unikaj zbędnych animacji powodujących ponowny compositing całej sceny.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również