Compositing (birleştirme), birden fazla görsel katmanın (layers) tek bir nihai görüntüde birleştirilmesi sürecidir. Apple Core Animation Dokümantasyonu, 2025'ye göre, mobil geliştirmede compositing, UI katmanlarını üst üste bindirmek, 3D render'ı arayüzle birleştirmek ve animasyonlar oluşturmak için kullanılır. Compositing çizim sırasını, şeffaflığı ve katmanlar arasındaki renk karışımını kontrol eder.
Önemli Noktalar
Compositing, grafik hattının son aşamasıdır; burada ayrı ayrı render edilmiş tüm katmanlar (3D sahneler, UI öğeleri, video, sistem arayüzü) ekranda görüntülenmek üzere tek bir görüntüde birleştirilir. Her katmanın kendi rengi, şeffaflığı (alpha), konumu ve istifleme sırası olabilir.
Mobil geliştirme bağlamında, compositing kullanıcı arayüzü için önemlidir: pencereler, düğmeler, metin, simgeler — tüm bu öğeler tek bir sahnede birleştirilir. Compositing sistemi çizim sırasını (z-order), yarı saydam öğelerin doğru şekilde üst üste bindirilmesini ve UI durumları arasındaki geçiş animasyonunu yönetir.
Grafik hattında, compositing tüm shader geçişleri ve rasterizasyon tamamlandıktan sonra gerçekleşir. GPU, framebuffer'lardan hazır katmanları alır, blending işlemlerini uygular ve sonucu ekrana göndermek için ana framebuffer'a (front buffer) yazar.
Compositing, farklı katmanlardan gelen renklerin piksel bazında karıştırılmasını (blending) kullanır. Çıktı görüntüsünün her pikseli, üst üste bindirilmiş katmanların piksel renklerine dayalı olarak şeffaflık (alpha kanalı) ve seçilen karıştırma modu dikkate alınarak hesaplanır.
Her katman, opaklığını belirleyen bir alpha kanalı (RGBA renginin dördüncü bileşeni) içerir. Alpha = 1.0 — tamamen opak, alpha = 0.0 — tamamen şeffaf. Alpha blending piksel rengini ön (source) ve arka (destination) katman renklerinin ağırlıklı toplamı olarak hesaplar: sonuç = source * alpha + dest * (1 - alpha).
Compositing, en uzak katmandan en yakına (back-to-front) doğru gerçekleştirilir. Önce arka plan katmanı render edilir, ardından her sonraki katman şeffaflığı dikkate alınarak bir öncekinin üzerine bindirilir. Z-order, hangi katmanın üstte olduğunu ve alttakileri kapatacağını belirler.
Compositing, katman renklerinin nasıl birleştirileceğini belirleyen çeşitli karıştırma modlarını (blend modes) destekler. Her mod farklı bir görsel efekt üretir ve kendi hesaplama maliyetine sahiptir.
| Mod | Formül | Uygulama |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Şeffaflık ile standart bindirme |
| Additive | src + dst | Parlama efektleri, parçacıklar |
| Multiply | src * dst | Gölgeleme, gölgeler |
| Screen | 1 - (1 - src) * (1 - dst) | Aydınlatma, vurgular |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Performans (çalışma zamanında çarpma yok) |
Premultiplied alpha modunda, renk kanalları alpha kanalıyla (RGB × A) önceden çarpılmış olarak saklanır. Bu, her blending işleminde çarpma ihtiyacını ortadan kaldırarak compositing'i hızlandırır. Premultiplied alpha, iOS Core Animation ve Android HWUI'de GPU compositing için standart formattır.
Her mobil işletim sisteminin, kendi donanım platformları için optimize edilmiş kendi compositing sistemi vardır. Mobil işletim sistemlerinde Compositing, tüm kullanıcı arayüzünün render edilmesinden sorumludur.
iOS'ta compositing, Core Animation tarafından yönetilir — Metal veya OpenGL ES üzerinde çalışan üst düzey bir sistem. Core Animation, daha sonra nihai görüntüde birleştirilen bir katman ağacı (layer tree) oluşturur. Core Animation otomatik olarak hangi katmanların değiştiğini belirler ve yalnızca bunları yeniden çizer (artımlı compositing), GPU yükünü en aza indirir.
Android'te compositing, SurfaceFlinger tarafından gerçekleştirilir — çeşitli uygulamalardan ve sistem arayüzünden yüzeyleri (surfaces) birleştiren bir sistem hizmeti. SurfaceFlinger, compositing işinin bir kısmını ekran denetleyicisinin özel donanımına aktarmak için HWC (Hardware Composer) kullanır.
Compositing performansı, özellikle karmaşık animasyonlar ve çok sayıda yarı saydam katman bindirmesinde mobil uygulamalarda yaygın bir darboğazdır. Her ek katman, bellekte piksel okuma, karıştırma ve yazma gerektirir.
Modern mobil cihazlar, özel blending birimleri aracılığıyla GPU'da compositing gerçekleştirir. GPU compositing, hızlı piksel karıştırma için paralel ROP birimleri ve doku filtreleri kullanır. CPU compositing yalnızca nadir durumlarda (eski cihazlar, test) kullanılır.
Compositing optimizasyonu, mobil arayüz geliştirmede ana görevlerden biridir. UI akıcılığı (60 FPS) doğrudan katman birleştirme verimliliğine bağlıdır.
Compositing performans analizi için kullanın: Core Animation Profiler (Xcode Instruments) — katman sayısını ve compositing sıklığını gösterir; GPU Debugger (Android Studio) — GPU yükünü ve overdraw'u görüntüler; Overdraw Visualization — piksellerin tekrar tekrar çizildiği alanları gösteren bir hata ayıklama aracı.
Sıkça Sorulan Sorular
Compositing, üzerinde çizimler olan birkaç şeffaf tabakayı tek bir resimde üst üste koymak gibidir. Her tabaka bir katmandır (düğme, arka plan, metin) ve şeffaflık katmanların birbirinin içinden nasıl göründüğünü belirler.
Render — her katmanın içeriğini oluşturma (düğme çizme, 3D modeli dokulandırma). Compositing — şeffaflık ve istifleme sırasını dikkate alarak hazır katmanları nihai görüntüde birleştirme.
Core Animation, Metal aracılığıyla GPU'da katmanları birleştirir. Çok sayıda yarı saydam katman (overdraw) veya CPU compositing (offscreen render) ile sorunlar başlar. Teşhis için Core Animation Profiler kullanın.
Hardware Composer (HWC), GPU'yu yüklemeden compositing gerçekleştiren ekran denetleyicisinin bir donanım modülüdür. HWC, donanımda 4-8 katmana kadar birleştirme yapabilir, bu da güç tüketimini azaltır ve GPU'yu diğer görevler için serbest bırakır.
Statik katmanları birleştirin (layer flattening), mümkün olduğunda opak renkler kullanın, offscreen buffer boyutlarını azaltın ve tüm sahnenin yeniden birleştirilmesine neden olan gereksiz animasyonlardan kaçının.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun