Fragment Shader 전환
ChosenPros
- Async 의존성 제거, 파이프라인 단순화, RT 포맷 자유도
Cons
- 전면 교체 필요

Compute Shader 기반 Bloom을 Fragment Shader로 전환
Pros
Cons
Pros
Cons
Why Fragment Shader 전환: 선택: Fragment Shader 전환 버그 수정을 위해 프레임 지연을 제거하면 Compute의 성능 이점이 없어지는 상황. 이 기회에 History RT·GC 할당 등 누적 tech debt를 함께 정리.
Bloom Pass 4(Prefilter), 5(DownSample), 6(UpSample)을 Fragment Shader 기반으로 교체.
ComputePass → RasterRenderPass 체인DispatchCompute → DrawProcedural blitenableRandomWrite = falseCOSBloomHistoryFrameRT 영구 RT 시스템 제거. Bloom 결과를 bloomResultTexture 필드로 직접 전달.
→ 4.15 MB 상시 점유 해제 + 1프레임 지연 제거.
매 프레임 new 배열 → 고정 크기 필드 캐시:
PreMiscPass: miscActivated == false일 때 완전 스킵.
(Distortion/RadialBlur 미사용 확정 시 패스 제거 예정)
Tools: Memory Profiler / AGI · Build: Dev · Scene:
| Device | GPU | API | RenderTexture | COSPostProcessing GPU time | ||
|---|---|---|---|---|---|---|
| Before | After | Before | After | |||
| Galaxy S21 | Mali-G78 | Vulkan 1.1.0 | 95.0 MB | 79.9 MB (-15.1 MB) | 8.368 ms | 1.263 ms (−85%) |
Galaxy S21


Galaxy S21


RT 메모리
| RT | Before | After | 비고 |
|---|---|---|---|
| HistoryTexture × 2 | 10.0 MB | 0 MB | 시스템 제거 |
| TempRTBloom0 | 5.0 MB | 1.0 MB | 포맷+해상도 |
| TempRTBloom1 | 1.3 MB | 395.5 KB | |
| TempRTBloom2 | 342.9 KB | 52.9 KB | |
| Bloom RT 합계 | 16.6 MB | 1.4 MB (-91%) | |
| 전체 RenderTexture | 95.0 MB | 79.9 MB (-15.1 MB) |
GPU 성능 (Android GPU Inspector)
| 항목 | Before | After |
|---|---|---|
| COSPostProcessing GPU time | 8.368 ms | 1.263 ms (−85%) |
| 베이스 해상도 | 1/2 | 1/4 |
| DownSample 샘플 | 5/pixel | 4/pixel |
| UpSample 샘플 | 8/pixel | 4/pixel |
| UpSample Interpolator | 18 floats | 8 floats |
Tradeoffs
Compute Shader의 Async 버퍼 오버랩 구조가 다이얼로그·스크린 오버레이 환경에서
버퍼 충돌을 일으키는 근본 원인이었다. 버그 수정을 위해 프레임 지연을 제거하면
Compute의 성능 이점이 사라지는 상황에서, 이 기회에 History RT·GC 할당·Dead Code 등
누적된 구조적 부채를 Fragment Shader 전환으로 일괄 정리했다.
결과: COSPostProcessing GPU time −85% (8.37ms → 1.26ms),
Bloom RT 메모리 −91% (16.6 MB → 1.4 MB), 렌더링 버그 3건 해소.
시각 품질은 QA 검수 기준 허용 범위 내로 유지됐다.
버그 대응이 리팩토링의 트리거가 된 사례 — 근본 원인을 파고들면
국소 수정보다 더 큰 개선 여지가 열리는 경우가 많다.