유니티 Overdraw는 왜 성능을 크게 떨어뜨리는가? (GPU Bound 최적화 핵심)

유니티 Overdraw는 GPU 성능을 확인할 때 반드시 이해해야 하는 개념입니다.

앞선 글에서는 CPU Bound와 GPU Bound를 구분하는 방법, 그리고 CPU Bound 상황에서 Draw Call과 Batching이 왜 중요한지 정리했습니다.

 

이번 글에서는 GPU Bound 상황에서 특히 자주 문제가 되는 Overdraw에 대해 정리해보겠습니다.

“UI가 많아지면 왜 느려질까?”
“투명 오브젝트를 많이 쓰면 왜 성능이 떨어질까?”
“화면에는 별로 복잡해 보이지 않는데 왜 GPU 시간이 길어질까?”

이런 문제를 이해하려면 Overdraw 개념을 알아야 합니다.

👉 Overdraw는 같은 픽셀을 여러 번 그리는 현상입니다.

눈에 보이는 결과는 하나의 화면이지만, GPU 내부에서는 같은 픽셀을 여러 번 계산하고 있을 수 있습니다.


//
//

Overdraw란 무엇인가

Overdraw는 말 그대로 이미 그려진 픽셀 위에 다시 픽셀을 그리는 현상을 의미합니다.

예를 들어 화면에 캐릭터가 있고, 그 앞에 반투명 이펙트가 있으며, 그 위에 UI까지 겹쳐져 있다고 생각해봅시다.

플레이어 눈에는 최종적으로 하나의 화면만 보입니다.

하지만 GPU 입장에서는 다음과 같은 일이 발생할 수 있습니다.

  • 배경 픽셀을 그림
  • 그 위에 캐릭터 픽셀을 그림
  • 그 위에 반투명 이펙트 픽셀을 그림
  • 그 위에 UI 픽셀을 그림

결과적으로 같은 화면 위치의 픽셀이 여러 번 계산됩니다.

이처럼 최종적으로는 한 번만 보이는 픽셀이라도 내부적으로 여러 번 그려지는 상황이 많아지면 GPU의 부담은 커질 수밖에 없습니다.

즉, Overdraw는 GPU가 불필요한 픽셀 연산을 반복하게 만드는 대표적인 원인입니다.


Overdraw가 문제가 되는 이유

유니티 Overdraw 발생 원리와 픽셀 중첩 렌더링 구조를 설명하는 GPU 성능 최적화 다이어그램
Overdraw는 같은 픽셀이 여러 번 그려지면서 GPU의 픽셀 처리 비용을 증가시키는 대표적인 원인입니다.

👉 화면에 보이는 것은 하나지만, GPU는 같은 픽셀을 여러 번 계산하고 있을 수 있습니다.

 

Overdraw가 많아지면 GPU는 화면에 보이는 것보다 훨씬 많은 픽셀을 처리해야 합니다.

특히 모바일 환경에서는 이 문제가 더 크게 체감될 수 있습니다.

모바일 GPU는 데스크톱 GPU에 비해 처리 성능과 메모리 대역폭이 제한적입니다.
그래서 같은 픽셀을 여러 번 그리는 작업은 프레임 저하로 이어지기 쉽습니다.

Overdraw가 많을 때 발생하는 문제는 다음과 같습니다.

  • 픽셀 연산량 증가
    같은 화면 위치를 여러 번 계산하기 때문에 GPU 작업량이 증가합니다.
  • 메모리 대역폭 낭비
    픽셀 데이터를 반복해서 읽고 쓰는 과정에서 메모리 사용량이 늘어납니다.
  • GPU 처리 시간 증가
    GPU가 한 프레임을 처리하는 시간이 길어지고, 결과적으로 FPS가 떨어질 수 있습니다.
  • 전력 소모 증가
    모바일 기기에서는 발열과 배터리 소모에도 영향을 줄 수 있습니다.

따라서 GPU Bound 상황에서는 단순히 오브젝트 수만 줄이는 것보다
화면에서 실제로 몇 번이나 픽셀이 그려지고 있는지를 확인하는 것이 중요합니다.

유니티 Overdraw는 GPU 성능 저하의 주요 원인 중 하나입니다.


//

Overdraw가 자주 발생하는 상황

Overdraw는 생각보다 자주 발생합니다.

특히 다음과 같은 요소가 많은 프로젝트에서는 반드시 확인해볼 필요가 있습니다.

  • 투명 오브젝트
    유리, 물, 연기, 안개, 파티클처럼 반투명하게 표현되는 오브젝트는 Overdraw를 크게 증가시킬 수 있습니다.
  • 파티클 이펙트
    폭발, 마법, 먼지, 연기 같은 이펙트는 여러 장의 반투명 텍스처가 겹쳐지는 방식으로 표현되는 경우가 많습니다.
  • UI 요소
    화면 전체를 덮는 패널, 반투명 배경, 중첩된 이미지, 불필요하게 큰 Raycast Target은 UI 렌더링 비용을 증가시킬 수 있습니다.
  • 풀스크린 포스트 프로세싱
    Bloom, Motion Blur, Depth of Field 같은 효과는 화면 전체 픽셀을 대상으로 연산하기 때문에 GPU 비용이 커질 수 있습니다.
  • 불필요하게 큰 스프라이트
    실제로 보이는 부분은 작지만 텍스처의 투명 영역이 큰 경우, 보이지 않는 영역까지 픽셀 처리 대상이 될 수 있습니다.

이 중에서도 특히 UI, 파티클, 투명 오브젝트는 Overdraw 문제를 만들기 쉬운 대표적인 요소입니다.


투명 오브젝트가 특히 위험한 이유

Overdraw를 이야기할 때 투명 오브젝트를 빼놓을 수 없습니다.

불투명 오브젝트는 깊이 정보를 활용해서 뒤에 있는 픽셀을 그리지 않도록 최적화할 수 있습니다.

하지만 투명 오브젝트는 이야기가 조금 다릅니다.

투명 오브젝트는 뒤에 있는 색과 섞여야 하기 때문에, 단순히 앞에 있는 오브젝트만 그리고 뒤를 버리는 방식으로 처리하기 어렵습니다.

예를 들어 반투명한 연기가 여러 겹 겹쳐져 있다면 GPU는 각 연기 레이어를 순서대로 계산해야 합니다.

화면에는 부드러운 연기처럼 보이지만, 내부적으로는 같은 픽셀 위치에 여러 번 연산이 발생하는 것입니다.

그래서 파티클 이펙트를 조금만 과하게 사용해도 GPU 시간이 크게 증가할 수 있습니다.

👉 투명 오브젝트는 예쁘지만, GPU 입장에서는 비싼 표현 방식입니다.


Unity에서 Overdraw 확인하기

유니티에서는 Scene View를 통해 Overdraw를 시각적으로 확인할 수 있습니다.

일반적으로 다음과 같은 방식으로 확인합니다.

Scene View → Shading Mode → Overdraw

이 모드에서는 화면의 픽셀이 얼마나 여러 번 그려지고 있는지를 색상으로 확인할 수 있습니다.

밝거나 진하게 표시되는 영역이 많다면 해당 구간에서 Overdraw가 많이 발생하고 있을 가능성이 높습니다.

다만 Overdraw 시각화 결과를 볼 때 주의할 점도 있습니다.

무조건 색이 진하다고 해서 당장 문제가 된다고 판단하면 안 됩니다.
실제 성능 문제는 타겟 기기, 해상도, 셰이더 비용, 파티클 양, UI 구조와 함께 봐야 합니다.

그래도 Overdraw 시각화는 GPU Bound 문제를 추적할 때 매우 유용한 출발점이 됩니다.


Overdraw 최적화 방법

Overdraw를 줄이기 위해서는 “불필요하게 여러 번 그리는 픽셀”을 줄여야 합니다.

대표적인 방법은 다음과 같습니다.

  • 투명 오브젝트 사용 줄이기
    꼭 필요한 곳에만 투명 오브젝트를 사용하고, 겹치는 영역을 최소화합니다.
  • 파티클 크기와 개수 줄이기
    파티클은 적은 수로도 충분한 효과를 낼 수 있도록 크기, 개수, 지속 시간을 조절해야 합니다.
  • UI 계층 정리하기
    불필요하게 겹쳐진 이미지, 보이지 않는 패널, 화면 전체를 덮는 반투명 배경을 줄입니다.
  • 스프라이트의 투명 영역 줄이기
    실제로 보이는 영역보다 지나치게 큰 텍스처를 사용하지 않도록 정리합니다.
  • 포스트 프로세싱 효과 조절하기
    화면 전체에 적용되는 효과는 비용이 크기 때문에, 모바일이나 저사양 타겟에서는 신중하게 사용해야 합니다.
  • 렌더링 순서와 레이어 구조 점검하기
    불필요하게 뒤쪽 오브젝트까지 많이 그려지는 구조라면 렌더링 순서를 조정하거나 레이어 구조를 정리해야 합니다.

중요한 것은 Overdraw를 무조건 0에 가깝게 만드는 것이 아닙니다.

게임 화면을 표현하기 위해 필요한 Overdraw는 존재할 수밖에 없습니다.

따라서 목표는 불필요한 Overdraw를 줄이는 것입니다.


많이 하는 실수

Overdraw 최적화에서도 자주 하는 실수가 있습니다.

첫 번째는 화면에 보이는 오브젝트 수만 보고 판단하는 것입니다.

화면이 단순해 보여도 반투명 UI, 파티클, 포스트 프로세싱이 많이 겹쳐져 있다면 GPU 부담은 클 수 있습니다.

두 번째는 Draw Call만 줄이면 된다고 생각하는 것입니다.

Draw Call은 CPU Bound와 관련이 깊습니다.
하지만 Overdraw는 GPU가 실제 픽셀을 얼마나 많이 처리하는지와 관련이 깊습니다.

따라서 GPU Bound 상황에서는 Draw Call보다 Overdraw, Shader 비용, 해상도, 포스트 프로세싱을 먼저 확인해야 할 수 있습니다.

세 번째는 고성능 PC에서만 테스트하는 것입니다.

PC에서는 문제가 없어 보여도 모바일 기기나 저사양 환경에서는 Overdraw 문제가 크게 드러날 수 있습니다.

최적화는 반드시 실제 타겟 기기 기준으로 확인해야 합니다.


정리

Overdraw는 같은 픽셀을 여러 번 그리는 현상입니다.

그리고 이 과정은 GPU의 픽셀 처리 비용을 크게 증가시킬 수 있습니다.

  • 투명 오브젝트가 많으면 Overdraw가 증가합니다.
  • 파티클과 UI는 Overdraw를 만들기 쉬운 대표 요소입니다.
  • GPU Bound 상황에서는 Overdraw 확인이 매우 중요합니다.
  • Overdraw 최적화의 핵심은 불필요한 픽셀 연산을 줄이는 것입니다.

렌더링 최적화는 단순히 오브젝트 수를 줄이는 작업이 아닙니다.

화면에 보이는 결과 뒤에서 GPU가 얼마나 많은 픽셀을 처리하고 있는지 이해하는 과정입니다.


다음 글에서 다룰 내용

다음 글에서는 유니티 렌더링 최적화 시리즈의 내용을 실제 프로젝트에 적용할 수 있도록 정리해보겠습니다.

👉 유니티 렌더링 최적화 체크리스트

CPU Bound, GPU Bound, Draw Call, Batching, Overdraw를 기준으로 프로젝트에서 바로 확인할 수 있는 항목들을 정리하겠습니다.


🎯 한 단계 더 나아가고 싶다면

렌더링 최적화는 단순히 옵션을 조절하는 작업이 아니라,
엔진 내부 동작을 이해하는 과정입니다.

이에 더해 게임 엔진 내부에서 동작하는 여러 시스템을 직접 구현해보면 상용 엔진의 동작 원리를 보다 분명하게 이해할 수 있습니다.

게임 엔진의 동작 원리를 분명하게 이해하고 싶은 분들에게 아래 강의를 추천합니다.

👉C++로 만드는 게임 엔진 프레임워크 (소코반과 슈팅 게임으로 배우는 엔진 구조)

//
   

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off