Compositing(컴포지팅)은 여러 시각적 레이어(layers)를 하나의 최종 이미지로 결합하는 프로세스입니다. Apple Core Animation 문서, 2025에 따르면, 모바일 개발에서 컴포지팅은 UI 레이어 오버레이, 3D 렌더링과 인터페이스 결합, 애니메이션 생성에 사용됩니다. Compositing은 그리기 순서, 투명도 및 레이어 간 색상 혼합을 제어합니다.
핵심 사항
Compositing은 그래픽 파이프라인의 최종 단계로, 개별적으로 렌더링된 모든 레이어(3D 장면, UI 요소, 비디오, 시스템 인터페이스)를 화면 출력을 위해 하나의 이미지로 결합합니다. 각 레이어는 고유한 색상, 투명도(alpha), 위치 및 스태킹 순서를 가질 수 있습니다.
모바일 개발의 맥락에서 컴포지팅은 사용자 인터페이스에 중요합니다: 창, 버튼, 텍스트, 아이콘 — 이러한 모든 요소는 단일 장면으로 컴포지팅됩니다. 컴포지팅 시스템은 그리기 순서(z-order), 반투명 요소의 올바른 중첩 및 UI 상태 간 전환 애니메이션을 관리합니다.
그래픽 파이프라인에서 컴포지팅은 모든 셰이더 패스와 래스터화가 완료된 후에 발생합니다. GPU는 프레임버퍼에서 완성된 레이어를 가져와 블렌딩 연산을 적용하고 결과를 디스플레이로 보내기 위해 메인 프레임버퍼(프론트 버퍼)에 기록합니다.
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)로 미리 곱해져 저장됩니다. 이는 각 블렌딩 연산에서 곱셈이 필요하지 않게 하여 컴포지팅을 가속화합니다. Premultiplied alpha는 iOS Core Animation 및 Android HWUI의 GPU 컴포지팅 표준 형식입니다.
각 모바일 운영 체제는 자체 하드웨어 플랫폼에 최적화된 고유한 컴포지팅 시스템을 가지고 있습니다. 모바일 OS의 Compositing은 전체 사용자 인터페이스 렌더링을 담당합니다.
iOS에서 컴포지팅은 Core Animation에 의해 관리됩니다 — Metal 또는 OpenGL ES 위에서 작동하는 고수준 시스템입니다. Core Animation은 레이어 트리(layer tree)를 생성한 다음 최종 이미지로 컴포지팅됩니다. Core Animation은 자동으로 변경된 레이어를 감지하고 변경된 레이어만 다시 그립니다(증분 컴포지팅). 이를 통해 GPU 부하가 최소화됩니다.
Android에서 컴포지팅은 SurfaceFlinger에 의해 수행됩니다 — 다양한 애플리케이션과 시스템 UI의 표면을 결합하는 시스템 서비스입니다. SurfaceFlinger는 HWC(Hardware Composer)를 사용하여 컴포지팅 작업의 일부를 디스플레이 컨트롤러의 전용 하드웨어에 오프로드합니다.
컴포지팅 성능은 특히 복잡한 애니메이션과 여러 반투명 레이어 중첩에서 모바일 애플리케이션의 일반적인 병목 현상입니다. 추가 레이어마다 메모리에서 픽셀을 읽고, 혼합하고, 쓰는 작업이 필요합니다.
최신 모바일 기기는 특수 블렌딩 유닛을 통해 GPU에서 컴포지팅을 수행합니다. GPU 컴포지팅은 병렬 ROP 유닛과 텍스처 필터를 사용하여 빠른 픽셀 블렌딩을 구현합니다. CPU 컴포지팅은 드문 경우(오래된 기기, 테스트)에만 사용됩니다.
컴포지팅 최적화는 모바일 인터페이스 개발의 주요 과제 중 하나입니다. UI의 부드러움(60 FPS)은 레이어 결합 효율성에 직접적으로 의존합니다.
컴포지팅 성능 분석에는 Core Animation Profiler(Xcode Instruments) — 레이어 수와 컴포지팅 빈도 표시, GPU Debugger(Android Studio) — GPU 부하 및 오버드로우 표시, Overdraw Visualization — 픽셀 반복 다시 그리기 영역을 보여주는 디버깅 도구를 사용합니다.
자주 묻는 질문
컴포지팅은 여러 투명 시트에 그려진 그림을 하나의 이미지로 겹치는 것과 같습니다. 각 시트는 레이어(버튼, 배경, 텍스트)이며 투명도는 레이어가 서로 어떻게 비쳐 보이는지 결정합니다.
렌더링 — 각 레이어의 콘텐츠 생성(버튼 그리기, 3D 모델 텍스처링). 컴포지팅 — 투명도와 스태킹 순서를 고려하여 완성된 레이어를 최종 이미지로 결합.
Core Animation은 Metal을 통해 GPU에서 레이어를 컴포지팅합니다. 다수의 반투명 레이어(오버드로우) 또는 CPU 컴포지팅(오프스크린 렌더링)에서 문제가 발생합니다. 진단에는 Core Animation Profiler를 사용하세요.
Hardware Composer(HWC)는 GPU에 부하를 주지 않고 컴포지팅을 수행하는 디스플레이 컨트롤러의 하드웨어 모듈입니다. HWC는 하드웨어에서 최대 4-8개 레이어를 결합할 수 있어 전력 소비를 줄이고 GPU를 다른 작업에 사용할 수 있게 합니다.
정적 레이어를 결합하고(layer flattening), 가능한 경우 불투명 색상을 사용하고, 오프스크린 버퍼 크기를 줄이며, 전체 장면의 재컴포지션을 유발하는 불필요한 애니메이션을 피하세요.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.