Compositing è il processo di combinazione di più livelli visivi (layers) in un'unica immagine finale. Secondo la Documentazione Apple Core Animation, 2025, nello sviluppo mobile il compositing viene utilizzato per sovrapporre livelli UI, combinare rendering 3D con l'interfaccia e creare animazioni. Compositing controlla l'ordine di disegno, la trasparenza e la miscelazione dei colori tra i livelli.
Punti chiave
Compositing è la fase finale della pipeline grafica in cui tutti i livelli renderizzati separatamente (scene 3D, elementi UI, video, interfaccia di sistema) vengono combinati in un'unica immagine per la visualizzazione sullo schermo. Ogni livello può avere il proprio colore, trasparenza (alpha), posizione e ordine di impilamento.
Nel contesto dello sviluppo mobile, il compositing è importante per l'interfaccia utente: finestre, pulsanti, testo, icone — tutti questi elementi vengono composti in un'unica scena. Il sistema di compositing gestisce l'ordine di disegno (z-order), la corretta sovrapposizione di elementi semitrasparenti e l'animazione di transizione tra gli stati dell'interfaccia.
Nella pipeline grafica, il compositing avviene dopo il completamento di tutti i passaggi shader e della rasterizzazione. La GPU prende i livelli pronti dai framebuffer, applica operazioni di blending e scrive il risultato nel framebuffer principale (front buffer) per l'invio al display.
Compositing utilizza la miscelazione pixel per pixel (blending) dei colori provenienti da diversi livelli. Ogni pixel dell'immagine di output viene calcolato in base ai colori dei pixel dei livelli sovrapposti, tenendo conto della trasparenza (canale alpha) e della modalità di miscelazione selezionata.
Ogni livello contiene un canale alpha (il quarto componente del colore RGBA) che determina la sua opacità. Alpha = 1.0 — completamente opaco, alpha = 0.0 — completamente trasparente. Alpha blending calcola il colore del pixel come somma ponderata dei colori dei livelli anteriore (source) e posteriore (destination): risultato = source * alpha + dest * (1 - alpha).
Il compositing viene eseguito dal livello più lontano a quello più vicino (back-to-front). Prima viene renderizzato il livello di sfondo, poi ogni livello successivo viene sovrapposto al precedente tenendo conto della sua trasparenza. Z-order determina quale livello è sopra e coprirà quelli sottostanti.
Compositing supporta varie modalità di miscelazione (blend modes) che determinano come i colori dei livelli vengono combinati. Ogni modalità produce un effetto visivo diverso e ha i propri costi computazionali.
| Modalità | Formula | Applicazione |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Sovrapposizione standard con trasparenza |
| Additive | src + dst | Effetti luminosi, particelle |
| Multiply | src * dst | Ombreggiatura, ombre |
| Screen | 1 - (1 - src) * (1 - dst) | Schiaritura, riflessi |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Prestazioni (senza moltiplicazione a runtime) |
Nella modalità premultiplied alpha, i canali colore vengono memorizzati già moltiplicati per il canale alpha (RGB × A). Questo elimina la necessità di moltiplicare in ogni operazione di blending, accelerando il compositing. Premultiplied alpha è il formato standard per il compositing GPU in iOS Core Animation e Android HWUI.
Ogni sistema operativo mobile ha il proprio sistema di compositing ottimizzato per le proprie piattaforme hardware. Compositing nei sistemi operativi mobili è responsabile del rendering dell'intera interfaccia utente.
Su iOS, il compositing è gestito da Core Animation — un sistema di alto livello che funziona su Metal o OpenGL ES. Core Animation crea un layer tree (albero di livelli) che viene poi composto nell'immagine finale. Core Animation determina automaticamente quali livelli sono cambiati e ridisegna solo quelli (compositing incrementale), riducendo al minimo il carico sulla GPU.
Su Android, il compositing è eseguito da SurfaceFlinger — un servizio di sistema che combina superfici (surfaces) da varie applicazioni e dall'interfaccia di sistema. SurfaceFlinger utilizza HWC (Hardware Composer) per delegare parte del lavoro di compositing all'hardware dedicato del controller del display.
Le prestazioni del compositing sono un collo di bottiglia comune nelle applicazioni mobili, specialmente con animazioni complesse e molti livelli semitrasparenti sovrapposti. Ogni livello aggiuntivo richiede lettura, miscelazione e scrittura di pixel in memoria.
I dispositivi mobili moderni eseguono il compositing sulla GPU tramite unità di blending specializzate. GPU compositing utilizza unità ROP parallele e filtri di texture per una rapida miscelazione dei pixel. Il CPU compositing viene utilizzato solo in rari casi (dispositivi vecchi, test).
L'ottimizzazione del compositing è uno dei compiti principali nello sviluppo di interfacce mobili. La fluidità dell'interfaccia (60 FPS) dipende direttamente dall'efficienza della combinazione dei livelli.
Per analizzare le prestazioni del compositing, utilizzare: Core Animation Profiler (Xcode Instruments) — mostra il numero di livelli e la frequenza di compositing; GPU Debugger (Android Studio) — visualizza il carico della GPU e l'overdraw; Overdraw Visualization — strumento di debug che mostra le aree di ridisegno multiplo dei pixel.
Domande frequenti
Il compositing è come sovrapporre più fogli trasparenti con disegni in un'unica immagine. Ogni foglio è un livello (pulsante, sfondo, testo), e la trasparenza determina come i livelli si vedono attraverso l'un l'altro.
Rendering — creazione del contenuto di ogni livello (disegnare un pulsante, texturizzare un modello 3D). Compositing — combinazione dei livelli finiti nell'immagine finale considerando trasparenza e ordine di impilamento.
Core Animation compone i livelli sulla GPU tramite Metal. I problemi iniziano con un gran numero di livelli semitrasparenti (overdraw) o con il CPU compositing (rendering off-screen). Utilizzare Core Animation Profiler per la diagnosi.
Hardware Composer (HWC) è un modulo hardware del controller del display che esegue il compositing senza caricare la GPU. HWC può combinare fino a 4-8 livelli in hardware, riducendo il consumo energetico e liberando la GPU per altre attività.
Combinare livelli statici (layer flattening), utilizzare colori opachi dove possibile, ridurre la dimensione dei buffer offscreen ed evitare animazioni non necessarie che causano la ricomposizione dell'intera scena.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche