Compositing — este procesul de combinare a mai multor straturi vizuale într-o singură imagine finală. Conform Apple Core Animation Documentation, 2025, în dezvoltarea mobilă compozitarea este utilizată pentru suprapunerea straturilor UI, combinarea randării 3D cu interfața și crearea animațiilor. Compositing gestionează ordinea de desenare, transparența și amestecarea culorilor între straturi.
Principalele puncte
Compositing — este etapa finală a pipeline-ului grafic, în care toate straturile randate separat (scene 3D, elemente UI, video, interfața sistemului) sunt combinate într-o singură imagine pentru afișare pe ecran. Fiecare strat poate avea propria culoare, transparență (alpha), poziție și ordine de suprapunere.
În contextul dezvoltării mobile, compozitarea este importantă pentru interfața utilizatorului: ferestre, butoane, text, pictograme — toate aceste elemente sunt compozitate într-o singură scenă. Sistemul de compozitare gestionează ordinea de desenare (z-order), suprapunerea corectă a elementelor semi-transparente și animația de tranziție între stările UI.
În pipeline-ul grafic, compozitarea are loc după finalizarea tuturor pasajelor de shader și rasterizare. GPU preia straturile gata din framebuffer-e, aplică operații de blending și scrie rezultatul în buffer-ul principal de cadru (front buffer) pentru trimiterea la display.
Compositing utilizează amestecarea pixel-cu-pixel (blending) a culorilor din diferite straturi. Fiecare pixel al imaginii de ieșire este calculat pe baza culorilor pixelilor din straturile suprapuse, ținând cont de transparență (canalul alpha) și modul de amestecare selectat.
Fiecare strat conține un canal alpha (a patra componentă a culorii RGBA) care determină opacitatea sa. Alpha = 1.0 — complet opac, alpha = 0.0 — complet transparent. Alpha blending calculează culoarea pixelului ca o sumă ponderată a culorilor stratului frontal (source) și posterior (destination): result = source * alpha + dest * (1 - alpha).
Compozitarea se execută în ordinea de la stratul cel mai îndepărtat la cel mai apropiat (back-to-front). Mai întâi se randază stratul de fundal, apoi fiecare strat următor se suprapune peste cel anterior ținând cont de transparența sa. Z-order determină care strat este deasupra și va acoperi straturile subiacente.
Compositing suportă diferite moduri de amestecare (blend modes) care determină cum se combină culorile straturilor. Fiecare mod oferă un efect vizual diferit și are propriile costuri de calcul.
| Mod | Formulă | Aplicație |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Suprapunere standard cu transparență |
| Additive | src + dst | Efecte de strălucire, particule |
| Multiply | src * dst | Întunecare, umbre |
| Screen | 1 - (1 - src) * (1 - dst) | Iluminare, reflexii |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Eficient (fără înmulțire din mers) |
În modul premultiplied alpha, canalele de culoare sunt stocate deja înmulțite cu canalul alpha (RGB × A). Aceasta elimină necesitatea înmulțirii la fiecare operație de blending, accelerând compozitarea. Premultiplied alpha — format standard pentru GPU-compositing în iOS Core Animation și Android HWUI.
Fiecare sistem de operare mobil are propriul sistem de compozitare, optimizat pentru platforma sa hardware. Compositing în sistemele de operare mobile este responsabil pentru randarea întregii interfețe de utilizator.
În iOS, compozitarea este gestionată de Core Animation — un sistem de nivel înalt care funcționează pe Metal sau OpenGL ES. Core Animation creează un layer tree (arbore de straturi) care apoi este compozitat într-o imagine finală. Core Animation detectează automat care straturi s-au modificat și le rerandază doar pe acestea (compozitare incrementală), minimizând încărcarea GPU-ului.
În Android, compozitarea este executată de SurfaceFlinger — un serviciu de sistem care combină suprafețele (surfaces) de la diferite aplicații și interfața sistemului. SurfaceFlinger utilizează HWC (Hardware Composer) pentru a transfera o parte din munca de compozitare pe hardware-ul dedicat al controlerului de display.
Performanța compositing-ului — un blocaj frecvent în aplicațiile mobile, în special la animații complexe și suprapunerea mai multor straturi semi-transparente. Fiecare strat suplimentar necesită citirea, amestecarea și scrierea pixelilor în memorie.
Dispozitivele mobile moderne execută compozitarea pe GPU prin blocuri specializate de blending. GPU-compositing utilizează blocuri ROP paralele și filtre de textură pentru amestecarea rapidă a pixelilor. CPU-compositing este utilizat doar în cazuri rare (dispozitive vechi, testare).
Optimizarea compositing-ului — una dintre sarcinile cheie în dezvoltarea interfețelor mobile. Fluiditatea UI (60 FPS) depinde direct de eficiența combinării straturilor.
Pentru analiza performanței compozitării utilizați: Core Animation Profiler (Xcode Instruments) — arată numărul de straturi și frecvența compozitării; GPU Debugger (Android Studio) — afișează încărcarea GPU-ului și overdraw; Overdraw Visualisation — instrument de debug care arată zonele de rerandare multiplă a pixelilor.
Întrebări frecvente
Compositing este ca lipirea mai multor folii transparente cu desene într-o singură imagine. Fiecare folie este un strat (buton, fundal, text), iar transparența determină cum straturile se văd unul prin celălalt.
Randarea — crearea conținutului fiecărui strat (desenarea butonului, texturarea modelului 3D). Compozitarea — combinarea straturilor gata într-o imagine finală ținând cont de transparență și ordinea de suprapunere.
Core Animation compozitează straturile pe GPU prin Metal. Problemele încep la un număr mare de straturi semi-transparente (overdraw) sau la CPU-compositing (off-screen rendering). Utilizați Core Animation Profiler pentru diagnosticare.
Hardware Composer (HWC) — modul hardware al controlerului de display care execută compozitarea fără a încărca GPU-ul. HWC poate combina până la 4-8 straturi hardware, reducând consumul de energie și eliberând GPU-ul pentru alte sarcini.
Combinați straturile statice (layer flattening), utilizați culori opace acolo unde este posibil, reduceți dimensiunea buffer-elor offscreen și evitați animațiile inutile care cauzează recompozitarea întregii scene.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și