Compositing (композитинг) — це процес об'єднання кількох візуальних шарів (layers) в одне підсумкове зображення. За даними документації Apple Core Animation, 2025, у мобільній розробці композитинг використовується для накладання UI-шарів, об'єднання 3D-рендера з інтерфейсом та створення анімацій. Compositing керує порядком відтворення, прозорістю та змішуванням кольорів між шарами.
Головне
Compositing — це фінальний етап графічного конвеєра, на якому всі окремо відрендерені шари (3D-сцени, UI-елементи, відео, системний інтерфейс) об'єднуються в одне зображення для виведення на екран. Кожен шар може мати свій колір, прозорість (alpha), позицію та порядок накладання.
У контексті мобільної розробки композитинг важливий для користувацького інтерфейсу: вікна, кнопки, текст, іконки — всі ці елементи композитуються в єдину сцену. Система композитингу керує порядком відтворення (z-order), коректним накладанням напівпрозорих елементів та анімацією переходу між станами UI.
У графічному конвеєрі композитинг відбувається після завершення всіх шейдерних проходів та растеризації. GPU бере готові шари з framebuffer-ів, застосовує blending-операції та записує результат в основний кадровий буфер (front buffer) для відправки на дисплей.
Compositing використовує попіксельне змішування (blending) кольорів з різних шарів. Кожен піксель вихідного зображення обчислюється на основі кольорів пікселів з шарів, що накладаються, з урахуванням прозорості (alpha-каналу) та вибраного режиму змішування.
Кожен шар містить alpha-канал (четвертий компонент кольору RGBA), що визначає його непрозорість. Alpha = 1.0 — повністю непрозорий, alpha = 0.0 — повністю прозорий. Alpha blending обчислює колір пікселя як зважену суму кольорів переднього (source) та заднього (destination) шарів: результат = source * alpha + dest * (1 - alpha).
Композитинг виконується в порядку від найдальшого шару до найближчого (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-операції, прискорюючи композитинг. Premultiplied alpha — стандартний формат для GPU-композитингу в iOS Core Animation та Android HWUI.
Кожна мобільна операційна система має власну систему композитингу, оптимізовану для своїх апаратних платформ. Compositing у мобільних ОС відповідає за відтворення всього користувацького інтерфейсу.
В iOS композитингом керує Core Animation — високорівнева система, що працює поверх Metal або OpenGL ES. Core Animation створює layer tree (дерево шарів), яке потім композитується у фінальне зображення. Core Animation автоматично визначає, які шари змінилися, та перемальовує тільки їх (інкрементальний композитинг), що мінімізує навантаження на GPU.
В Android композитинг виконує SurfaceFlinger — системний сервіс, який об'єднує поверхні (surfaces) від різних додатків та системного UI. SurfaceFlinger використовує HWC (Hardware Composer) для передачі частини роботи з композитингу на виділене апаратне забезпечення дисплейного контролера.
Продуктивність композитингу — частий вузький місцем у мобільних додатках, особливо при складних анімаціях та накладанні багатьох напівпрозорих шарів. Кожен додатковий шар вимагає читання, змішування та запису пікселів у пам'ять.
Сучасні мобільні пристрої виконують композитинг на GPU через спеціалізовані блоки blending. GPU-композитинг використовує паралельні ROP-блоки та texture-фільтри для швидкого змішування пікселів. CPU-композитинг використовується лише в рідкісних випадках (старі пристрої, тестування).
Оптимізація композитингу — одне з ключових завдань при розробці мобільних інтерфейсів. Плавність UI (60 FPS) безпосередньо залежить від ефективності об'єднання шарів.
Для аналізу продуктивності композитингу використовуйте: Core Animation Profiler (Xcode Instruments) — показує кількість шарів та частоту композитингу; GPU Debugger (Android Studio) — відображає GPU-навантаження та overdraw; Overdraw Visualization — інструмент налагодження, що показує області багаторазового перемальовування пікселів.
Часті запитання
Compositing — це як склеювання кількох прозорих плівок з малюнками в одну картинку. Кожна плівка — це шар (кнопка, фон, текст), а прозорість визначає, як шари просвічують один через одного.
Рендеринг — створення вмісту кожного шару (малювання кнопки, текстурування 3D-моделі). Композитинг — об'єднання готових шарів у фінальне зображення з урахуванням прозорості та порядку накладання.
Core Animation композитить шари на GPU через Metal. Проблеми починаються при великій кількості напівпрозорих шарів (overdraw) або при CPU-композитингу (off-screen rendering). Використовуйте Core Animation Profiler для діагностики.
Hardware Composer (HWC) — апаратний модуль дисплейного контролера, що виконує композитинг без завантаження GPU. HWC може об'єднувати до 4-8 шарів апаратно, що знижує енергоспоживання та звільняє GPU для інших завдань.
Об'єднуйте статичні шари (layer flattening), використовуйте непрозорі кольори де можливо, зменшуйте розмір offscreen-буферів та уникайте зайвих анімацій, що викликають перекомпозитинг всієї сцени.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також