Develog

2. Graphics API 본문

Technology/Shading & Rendering

2. Graphics API

Priv 2026. 1. 25. 19:35

보틀넥 문제 (Bottle neck)

GPU가 연산하는데 필요한 모든 소스 데이터는 CPU를 통해 가져와야 한다.
(정점 좌표, 면의 순서, 광원 좌표 등)

컴퓨터는 기본적으로 CPU, GPU, DRAM 등 다양한 역할을 담당하는 부품이 모여서 구성된 복합체다. 이 때문에 특정 부품의 성능이 다른 부품의 성능보다 상대적으로 떨어진다면 병목 현상이 발생해 전체적인 성능이 떨어질 수밖에 없다.

즉, 컴퓨터의 전체 성능은 여러 부품 중에서 가장 느린 성능을 지닌 부품의 속도에 맞게 결정된다. GPU의 경우, 연산에 필요한 데이터를 비디오 메모리에서 가져오는 단계에서 성능이 떨어지는 상황이 흔히 발생한다.

그 중에서도 텍스처는 가장 흔히 보틀넥 문제를 일으키는 요소로 지목된다.

  • 용량이 너무 큰 텍스처 데이터를 한꺼번에 GPU의 비디오 메모리에 올리려고 시도함에 따라 용량 확보를 위해 메모리에 있는 기존의 데이터를 정리하는 작업이 추가로 요구됨.

예) 게임 캐릭터와 배경을 개별적으로 렌더링할 때는 문제가 없었지만, 이 둘을 함께 렌더링하면 속도가 떨어진다?

  • 텍스처, 폴리곤 등 GPU가 처리해야 하는 데이터의 용량을 최적화하여 병목 현상이 생기지 않도록 조절.

GPU 컨텍스트 롤 (Context Roll)

GPU 컨텍스트는 'GPU의 현재 운영 상태'를 의미한다.
(파이프라인, 셰이더, 리소스 등)

컨텍스트 롤은 드로우 콜에 따라 GPU 운영 상태(컨텍스트)가 변경되면서 발생하는 비용이 높은 재설정 작업을 의미한다.

GPU는 기본적으로 1대이기 때문에 CPU의 명령을 처리하기 위한 상태 조건이 너무 자주 변경되면(CPU의 명령에 일관성이 떨어지면), 오버헤드가 발생할 수밖에 없다. 즉, 동일한 컨텍스트 안에 있는 명령은 병렬 연산이 가능하지만, 그렇지 않은 명령은 병렬 연산이 불가능하다는 것이다.

만약, 머티리얼 A와 B를 렌더링해야 하는 상황을 가정한다면 아래와 같이 비교할 수 있다.

  • A > (컨텍스트 롤) > B > (컨텍스트 롤) > A > (컨텍스트 롤) > B
  • A > A > (컨텍스트 롤) > B > B

쿼드 오버드로우 (Quad Overdraw)

일반적으로 셰이딩 유닛(Shading Unit)은 스케줄링을 정해진 단위에 맞게 묶어서 처리한다.
(8 * 8, 16 * 16, 32 * 32 등)

픽셀 셰이더 또한 스케줄링 단위에 맞게 연산을 묶어서 처리하는데, 이 스케줄링 단위보다 더 작은 크기의 삼각형을 연산해야 하는 상황이 발생하면 연산 자원은 그만큼 낭비된다. 그런데 모델링 데이터 특성상, 작은 크기의 삼각형이 1개 존재한다면 그 주변에도 비슷한 크기의 작은 삼각형이 존재할 가능성이 매우 높다.

만약, 스케줄링 단위보다 작은 삼각형 3개(A, B, C)가 연달아 붙어있다면, 셰이딩 유닛은 이 3개의 삼각형을 1개의 스케줄링 단위로 묶기 때문에 A, B, C를 순서대로 연산을 처리할 수밖에 없다.

만약, 스케줄링 단위보다 큰 삼각형 3개 (A', B', C')가 연달아 붙어있다면, 셰이딩 유닛은 이 3개의 삼각형을 3개의 스케줄링 단위로 묶을 수 있기 때문에 A', B', C'를 병렬 처리할 수 있게 된다.

즉, 폴리곤의 수가 많은 것도 문제지만, 폴리곤의 크기가 과하게 작은 것도 성능에 부담을 주는 요인이 된다.

예) 게임 캐릭터를 툴에서 모델링을 할 때는 성능 문제가 없었는데, 게임 내 환경에 배치하니 성능 문제가 발생했다?

  • 가까운 거리에서 모델링을 하다가 완성된 캐릭터를 실제 환경에 배치하게 되면 상대적으로 거리가 멀어지게 된다. 이에 따라 폴리곤의 크기도 함께 작아지면서 쿼드 오버드로우 문제가 발생할 수 있음.
  • 이를 해결하기 위해 도입된 기술 중 하나가 거리에 따라서 모델의 디테일 수준을 다르게 적용하는 LOD(Level Of Detail).

'Technology > Shading & Rendering' 카테고리의 다른 글

1. Shader  (0) 2026.01.25
Comments