Compositing (phối hợp) là quá trình kết hợp nhiều lớp hình ảnh (layers) thành một hình ảnh cuối cùng duy nhất. Theo Tài liệu Apple Core Animation, 2025, trong phát triển di động, compositing được sử dụng để chồng các lớp UI, kết hợp kết xuất 3D với giao diện và tạo hoạt ảnh. Compositing kiểm soát thứ tự vẽ, độ trong suốt và pha trộn màu sắc giữa các lớp.
Những điểm chính
Compositing là giai đoạn cuối cùng của đường ống đồ họa, nơi tất cả các lớp được kết xuất riêng biệt (cảnh 3D, phần tử UI, video, giao diện hệ thống) được kết hợp thành một hình ảnh duy nhất để hiển thị trên màn hình. Mỗi lớp có thể có màu sắc, độ trong suốt (alpha), vị trí và thứ tự xếp chồng riêng.
Trong bối cảnh phát triển di động, compositing rất quan trọng đối với giao diện người dùng: cửa sổ, nút bấm, văn bản, biểu tượng — tất cả các phần tử này được phối hợp thành một cảnh duy nhất. Hệ thống compositing quản lý thứ tự vẽ (z-order), sự chồng lấn chính xác của các phần tử bán trong suốt và hoạt ảnh chuyển tiếp giữa các trạng thái UI.
Trong đường ống đồ họa, compositing xảy ra sau khi tất cả các lượt shader và quá trình rasterization hoàn tất. GPU lấy các lớp đã hoàn thành từ framebuffer, áp dụng các thao tác blending và ghi kết quả vào framebuffer chính (front buffer) để gửi đến màn hình.
Compositing sử dụng sự pha trộn từng pixel (blending) màu sắc từ các lớp khác nhau. Mỗi pixel của hình ảnh đầu ra được tính toán dựa trên màu sắc pixel từ các lớp chồng lên, có tính đến độ trong suốt (kênh alpha) và chế độ pha trộn đã chọn.
Mỗi lớp chứa một kênh alpha (thành phần màu thứ tư của RGBA) xác định độ mờ đục của nó. Alpha = 1.0 — hoàn toàn mờ đục, alpha = 0.0 — hoàn toàn trong suốt. Alpha blending tính toán màu pixel dưới dạng tổng trọng số của màu lớp trước (source) và lớp sau (destination): kết quả = source * alpha + dest * (1 - alpha).
Compositing được thực hiện từ lớp xa nhất đến lớp gần nhất (back-to-front). Đầu tiên, lớp nền được kết xuất, sau đó mỗi lớp tiếp theo được chồng lên lớp trước có tính đến độ trong suốt của nó. Z-order xác định lớp nào ở trên và sẽ che phủ các lớp bên dưới.
Compositing hỗ trợ nhiều chế độ pha trộn (blend modes) khác nhau xác định cách màu sắc của các lớp được kết hợp. Mỗi chế độ tạo ra hiệu ứng hình ảnh khác nhau và có chi phí tính toán riêng.
| Chế độ | Công thức | Ứng dụng |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | Chồng lớp tiêu chuẩn với độ trong suốt |
| Additive | src + dst | Hiệu ứng phát sáng, hạt |
| Multiply | src * dst | Tạo bóng, đổ bóng |
| Screen | 1 - (1 - src) * (1 - dst) | Làm sáng, điểm nhấn |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | Hiệu suất (không cần nhân trong thời gian chạy) |
Trong chế độ premultiplied alpha, các kênh màu được lưu trữ đã được nhân với kênh alpha (RGB × A). Điều này loại bỏ nhu cầu nhân trong mỗi thao tác blending, tăng tốc compositing. Premultiplied alpha là định dạng tiêu chuẩn cho compositing GPU trong iOS Core Animation và Android HWUI.
Mỗi hệ điều hành di động có hệ thống compositing riêng được tối ưu hóa cho nền tảng phần cứng của mình. Compositing trong hệ điều hành di động chịu trách nhiệm kết xuất toàn bộ giao diện người dùng.
Trên iOS, compositing được quản lý bởi Core Animation — một hệ thống cấp cao hoạt động trên Metal hoặc OpenGL ES. Core Animation tạo một cây lớp (layer tree) sau đó được phối hợp thành hình ảnh cuối cùng. Core Animation tự động xác định lớp nào đã thay đổi và chỉ vẽ lại những lớp đó (compositing gia tăng), giảm thiểu tải cho GPU.
Trên Android, compositing được thực hiện bởi SurfaceFlinger — một dịch vụ hệ thống kết hợp các bề mặt (surfaces) từ các ứng dụng khác nhau và UI hệ thống. SurfaceFlinger sử dụng HWC (Hardware Composer) để chuyển một phần công việc compositing sang phần cứng chuyên dụng của bộ điều khiển màn hình.
Hiệu suất compositing là một nút thắt cổ chai phổ biến trong các ứng dụng di động, đặc biệt với hoạt ảnh phức tạp và nhiều lớp bán trong suốt chồng lên nhau. Mỗi lớp bổ sung yêu cầu đọc, pha trộn và ghi pixel vào bộ nhớ.
Các thiết bị di động hiện đại thực hiện compositing trên GPU thông qua các đơn vị blending chuyên dụng. GPU compositing sử dụng các đơn vị ROP song song và bộ lọc kết cấu để pha trộn pixel nhanh chóng. CPU compositing chỉ được sử dụng trong các trường hợp hiếm (thiết bị cũ, thử nghiệm).
Tối ưu hóa compositing là một trong những nhiệm vụ chính trong phát triển giao diện di động. Độ mượt của UI (60 FPS) phụ thuộc trực tiếp vào hiệu quả kết hợp các lớp.
Để phân tích hiệu suất compositing, hãy sử dụng: Core Animation Profiler (Xcode Instruments) — hiển thị số lượng lớp và tần suất compositing; GPU Debugger (Android Studio) — hiển thị tải GPU và overdraw; Overdraw Visualization — công cụ gỡ lỗi hiển thị các khu vực vẽ lại pixel nhiều lần.
Câu hỏi thường gặp
Compositing giống như xếp chồng nhiều tờ giấy trong suốt có hình vẽ thành một bức tranh. Mỗi tờ là một lớp (nút, nền, văn bản), và độ trong suốt xác định cách các lớp hiển thị xuyên qua nhau.
Kết xuất — tạo nội dung của từng lớp (vẽ nút, tạo kết cấu mô hình 3D). Compositing — kết hợp các lớp đã hoàn thành thành hình ảnh cuối cùng có tính đến độ trong suốt và thứ tự xếp chồng.
Core Animation phối hợp các lớp trên GPU qua Metal. Vấn đề bắt đầu khi có nhiều lớp bán trong suốt (overdraw) hoặc với CPU compositing (kết xuất off-screen). Sử dụng Core Animation Profiler để chẩn đoán.
Hardware Composer (HWC) là một mô-đun phần cứng của bộ điều khiển màn hình thực hiện compositing mà không làm tải GPU. HWC có thể kết hợp tới 4-8 lớp trong phần cứng, giảm tiêu thụ điện năng và giải phóng GPU cho các tác vụ khác.
Kết hợp các lớp tĩnh (layer flattening), sử dụng màu mờ đục khi có thể, giảm kích thước bộ đệm offscreen và tránh các hoạt ảnh không cần thiết gây tái phối hợp toàn bộ cảnh.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm