Compositing — فرآیند ترکیب چندین لایه بصری در یک تصویر نهایی است. بر اساس Apple Core Animation Documentation, 2025، در توسعه موبایل از compositing برای لایهبندی UI، ترکیب رندر سهبعدی با رابط کاربری و ایجاد انیمیشن استفاده میشود. Compositing ترتیب رندر، شفافیت و ترکیب رنگها بین لایهها را مدیریت میکند.
مهمترین نکات
Compositing — مرحله نهایی خط لوله گرافیک است که در آن همه لایههای رندر شده جداگانه (صحنههای سهبعدی، عناصر UI، ویدئو، رابط سیستم) در یک تصویر برای نمایش روی صفحه ترکیب میشوند. هر لایه میتواند رنگ، شفافیت (alpha)، موقعیت و ترتیب لایهبندی خود را داشته باشد.
در زمینه توسعه موبایل، compositing برای رابط کاربری مهم است: پنجرهها، دکمهها، متن، آیکونها — همه این عناصر در یک صحنه کامپوزیت میشوند. سیستم compositing ترتیب رندر (z-order)، لایهبندی صحیح عناصر نیمه شفاف و انیمیشن انتقال بین حالتهای UI را مدیریت میکند.
در خط لوله گرافیک، compositing پس از اتمام همه مراحل shader و rasterization رخ میدهد. GPU لایههای آماده را از framebufferها میگیرد، عملیات blending را اعمال میکند و نتیجه را در بافر فریم اصلی (front buffer) برای ارسال به نمایشگر مینویسد.
Compositing از ترکیب پیکسل به پیکسل (blending) رنگها از لایههای مختلف استفاده میکند. هر پیکسل از تصویر خروجی بر اساس رنگهای پیکسلهای لایههای لایهبندی شده با در نظر گرفتن شفافیت (کانال alpha) و حالت ترکیب انتخاب شده محاسبه میشود.
هر لایه شامل کانال alpha (چهارمین مؤلفه رنگ RGBA) است که opacity آن را تعیین میکند. Alpha = 1.0 — کاملاً opaque، alpha = 0.0 — کاملاً شفاف. Alpha blending رنگ پیکسل را به صورت مجموع وزنی رنگهای لایه جلو (source) و عقب (destination) محاسبه میکند: result = source * alpha + dest * (1 - alpha).
Compositing به ترتیب از دورترین لایه به نزدیکترین (back-to-front) اجرا میشود. ابتدا لایه پس زمینه رندر میشود، سپس هر لایه بعدی با در نظر گرفتن شفافیت آن روی لایه قبلی قرار میگیرد. Z-order تعیین میکند کدام لایه بالاتر است و لایههای پایینتر را میپوشاند.
Compositing از حالتهای مختلف ترکیب (blend modes) پشتیبانی میکند که نحوه ترکیب رنگهای لایهها را تعیین میکنند. هر حالت جلوه بصری متفاوتی میدهد و هزینه محاسباتی خاص خود را دارد.
| حالت | فرمول | کاربرد |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | لایهبندی استاندارد با شفافیت |
| Additive | src + dst | جلوههای درخشش، ذرات |
| Multiply | src * dst | تیره کردن، سایهها |
| Screen | 1 - (1 - src) * (1 - dst) | روشن کردن، بازتابها |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | کارآمد (بدون ضرب در لحظه) |
در حالت premultiplied alpha، کانالهای رنگی از قبل در کانال alpha ضرب شده ذخیره میشوند (RGB × A). این کار نیاز به ضرب در هر عملیات blending را از بین میبرد و compositing را加速 میبخشد. Premultiplied alpha — فرمت استاندارد برای GPU-compositing در iOS Core Animation و Android HWUI است.
هر سیستمعامل موبایل سیستم compositing مخصوص خود را دارد که برای پلتفرم سختافزاری خود بهینه شده است. Compositing در سیستمعاملهای موبایل مسئول رندر کل رابط کاربری است.
در iOS، compositing توسط Core Animation مدیریت میشود — یک سیستم سطح بالا که روی Metal یا OpenGL ES کار میکند. Core Animation یک layer tree (درخت لایهها) ایجاد میکند که سپس در تصویر نهایی کامپوزیت میشود. Core Animation به طور خودکار تشخیص میدهد کدام لایهها تغییر کردهاند و فقط آنها را دوباره رندر میکند (incremental compositing)، که بار GPU را به حداقل میرساند.
در Android، compositing توسط SurfaceFlinger انجام میشود — سرویس سیستمی که سطوح (surfaces) را از برنامههای مختلف و رابط سیستم ترکیب میکند. SurfaceFlinger از HWC (Hardware Composer) برای انتقال بخشی از کار compositing به سختافزار اختصاصی کنترلکننده نمایشگر استفاده میکند.
عملکرد compositing — یک bottleneck مکرر در برنامههای موبایل، به ویژه در انیمیشنهای پیچیده و لایهبندی چندین لایه نیمه شفاف است. هر لایه اضافی نیاز به خواندن، ترکیب و نوشتن پیکسلها در حافظه دارد.
دستگاههای موبایل مدرن compositing را روی GPU از طریق بلوکهای تخصصی blending انجام میدهند. GPU-compositing از بلوکهای ROP موازی و فیلترهای بافت برای ترکیب سریع پیکسلها استفاده میکند. CPU-compositing فقط در موارد نادر (دستگاههای قدیمی، تست) استفاده میشود.
بهینهسازی compositing — یکی از وظایف کلیدی در توسعه رابطهای موبایل است. روانی UI (60 FPS) مستقیماً به کارایی ترکیب لایهها بستگی دارد.
برای تحلیل عملکرد compositing استفاده کنید: Core Animation Profiler (Xcode Instruments) — تعداد لایهها و فرکانس compositing را نشان میدهد; GPU Debugger (Android Studio) — بار GPU و overdraw را نمایش میدهد; Overdraw Visualisation — ابزار debug که مناطق رندر مجدد چندگانه پیکسلها را نشان میدهد.
سوالات متداول
Compositing مانند چسباندن چند فیلم شفاف با نقاشی در یک تصویر است. هر فیلم یک لایه است (دکمه، پسزمینه، متن) و شفافیت تعیین میکند که لایهها چگونه از یکدیگر نمایان میشوند.
رندرینگ — ایجاد محتوای هر لایه (رسم دکمه، بافتدهی مدل سهبعدی). Compositing — ترکیب لایههای آماده در تصویر نهایی با در نظر گرفتن شفافیت و ترتیب لایهبندی.
Core Animation لایهها را از طریق Metal روی GPU کامپوزیت میکند. مشکلات با تعداد زیادی لایه نیمه شفاف (overdraw) یا CPU-compositing (off-screen rendering) شروع میشود. برای تشخیص از Core Animation Profiler استفاده کنید.
Hardware Composer (HWC) — ماژول سختافزاری کنترلکننده نمایشگر که compositing را بدون بارگیری GPU انجام میدهد. HWC میتواند تا 4-8 لایه را به صورت سختافزاری ترکیب کند که مصرف انرژی را کاهش میدهد و GPU را برای کارهای دیگر آزاد میکند.
لایههای استاتیک را ترکیب کنید (layer flattening)، تا حد امکان از رنگهای opaque استفاده کنید، اندازه بافرهای offscreen را کاهش دهید و از انیمیشنهای غیرضروری که باعث کامپوزیت مجدد کل صحنه میشوند خودداری کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید