Compositing — je proces spojování několika vizuálních vrstev do jednoho výsledného obrazu. Podle Apple Core Animation Documentation, 2025 se v mobilním vývoji compositing používá k vrstvení UI, kombinování 3D renderování s rozhraním a vytváření animací. Compositing řídí pořadí kreslení, průhlednost a míchání barev mezi vrstvami.
Hlavní body
Compositing — je poslední fáze grafické pipeline, ve které se všechny samostatně vyrenderované vrstvy (3D scény, UI prvky, video, systémové rozhraní) spojují do jednoho obrazu pro zobrazení na obrazovce. Každá vrstva může mít svou barvu, průhlednost (alpha), pozici a pořadí vrstvení.
V kontextu mobilního vývoje je compositing důležitý pro uživatelské rozhraní: okna, tlačítka, text, ikony — všechny tyto prvky se kompozitují do jedné scény. Systém compositingu řídí pořadí kreslení (z-order), správné vrstvení poloprůhledných prvků a animaci přechodu mezi stavy UI.
V grafické pipeline probíhá compositing po dokončení všech shader průchodů a rasterizace. GPU vezme hotové vrstvy z framebufferů, aplikuje blending operace a zapíše výsledek do hlavního snímkového bufferu (front buffer) pro odeslání na displej.
Compositing používá míchání pixel po pixelu (blending) barev z různých vrstev. Každý pixel výstupního obrazu se vypočítává na základě barev pixelů z vrstvených vrstev s ohledem na průhlednost (alfa kanál) a zvolený režim míchání.
Každá vrstva obsahuje alfa kanál (čtvrtou složku barvy RGBA), který určuje její neprůhlednost. Alpha = 1.0 — zcela neprůhledná, alpha = 0.0 — zcela průhledná. Alpha blending vypočítá barvu pixelu jako vážený součet barev přední (source) a zadní (destination) vrstvy: result = source * alpha + dest * (1 - alpha).
Compositing se provádí v pořadí od nejvzdálenější vrstvy k nejbližší (back-to-front). Nejprve se vykreslí vrstva pozadí, poté se každá další vrstva vrství na předchozí s ohledem na svou průhlednost. Z-order určuje, která vrstva je nahoře a bude zakrývat vrstvy pod ní.
Compositing podporuje různé režimy míchání (blend modes), které určují, jak se barvy vrstev kombinují. Každý režim dává jiný vizuální efekt a má své výpočetní náklady.
| Režim | Vzorec | Použití |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Standardní vrstvení s průhledností |
| Additive | src + dst | Efekty záře, částice |
| Multiply | src * dst | Ztmavení, stíny |
| Screen | 1 - (1 - src) * (1 - dst) | Světlení, odlesky |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Efektivní (bez násobení za běhu) |
V režimu premultiplied alpha jsou barevné kanály uloženy již vynásobené alfa kanálem (RGB × A). To eliminuje potřebu násobení při každé blending operaci, zrychluje compositing. Premultiplied alpha — standardní formát pro GPU-compositing v iOS Core Animation a Android HWUI.
Každý mobilní operační systém má svůj vlastní systém compositingu, optimalizovaný pro svou hardwarovou platformu. Compositing v mobilních OS je zodpovědný za vykreslování celého uživatelského rozhraní.
V iOS compositing řídí Core Animation — vysokoúrovňový systém pracující nad Metal nebo OpenGL ES. Core Animation vytváří layer tree (strom vrstev), který je následně kompozitován do výsledného obrazu. Core Animation automaticky detekuje, které vrstvy se změnily, a překresluje pouze je (incremental compositing), čímž minimalizuje zatížení GPU.
V Android compositing provádí SurfaceFlinger — systémová služba, která spojuje povrchy (surfaces) z různých aplikací a systémového rozhraní. SurfaceFlinger používá HWC (Hardware Composer) k přenesení části práce compositingu na vyhrazený hardware řadiče displeje.
Výkon compositingu — časté úzké hrdlo v mobilních aplikacích, zejména u složitých animací a vrstvení mnoha poloprůhledných vrstev. Každá další vrstva vyžaduje čtení, míchání a zápis pixelů do paměti.
Moderní mobilní zařízení provádějí compositing na GPU prostřednictvím specializovaných blending bloků. GPU-compositing používá paralelní ROP bloky a texturové filtry pro rychlé míchání pixelů. CPU-compositing se používá jen ve vzácných případech (stará zařízení, testování).
Optimalizace compositingu — jeden z klíčových úkolů při vývoji mobilních rozhraní. Plynulost UI (60 FPS) přímo závisí na efektivitě spojování vrstev.
Pro analýzu výkonu compositingu použijte: Core Animation Profiler (Xcode Instruments) — zobrazuje počet vrstev a frekvenci compositingu; GPU Debugger (Android Studio) — zobrazuje zatížení GPU a overdraw; Overdraw Visualisation — nástroj pro ladění ukazující oblasti vícenásobného překreslování pixelů.
Často kladené otázky
Compositing je jako lepení několika průhledných fólií s kresbami do jednoho obrázku. Každá fólie je vrstva (tlačítko, pozadí, text) a průhlednost určuje, jak vrstvy prosvítají jedna přes druhou.
Renderování — vytváření obsahu každé vrstvy (kreslení tlačítka, texturování 3D modelu). Compositing — spojování hotových vrstev do výsledného obrazu s ohledem na průhlednost a pořadí vrstvení.
Core Animation kompozituje vrstvy na GPU přes Metal. Problémy začínají při velkém počtu poloprůhledných vrstev (overdraw) nebo při CPU-compositingu (off-screen rendering). Pro diagnostiku použijte Core Animation Profiler.
Hardware Composer (HWC) — hardwarový modul řadiče displeje provádějící compositing bez zatížení GPU. HWC dokáže hardwarově spojit až 4-8 vrstev, což snižuje spotřebu energie a uvolňuje GPU pro jiné úkoly.
Spojujte statické vrstvy (layer flattening), používejte neprůhledné barvy kde je to možné, zmenšujte velikost offscreen bufferů a vyhýbejte se zbytečným animacím způsobujícím opětovný compositing celé scény.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také