게임을 하거나 그래픽 작업을 할 때 화면이 아주 부드럽게 움직이는 것을 보신 적이 있을 겁니다. 이 장면이 나오기까지 컴퓨터 내부에서는 정말 바쁜 움직임이 일어납니다. GPU가 이미지를 화면에 뿌려주는 과정은 한 번에 뚝딱 이루어지지 않거든요. 여러 단계를 물 흐르듯 통과해야만 끊김 없는 화면을 볼 수 있습니다.

오늘은 프로그래머가 알아두면 좋은 그래픽 데이터의 이동 경로를 살펴보겠습니다. 이미지가 어디서 출발해서 어떤 과정을 거쳐 우리 눈앞에 나타나는지 알아보죠. 이 흐름을 이해하면 최적화 문제를 해결하는 데 큰 도움이 됩니다.

이미지 데이터의 출발지

우리가 보는 화려한 게임 그래픽은 처음부터 GPU 안에 들어 있는 것이 아닙니다. 모든 이미지 데이터는 하드디스크나 SSD 같은 저장 장치에 파일 형태로 얌전히 잠들어 있습니다. 게임을 켜거나 새로운 맵으로 이동할 때 비로소 깨어날 준비를 합니다.

이때 가장 먼저 바빠지는 것은 CPU입니다. CPU는 저장 장치에 있는 데이터를 읽어서 시스템 메모리로 옮기는 작업을 지휘합니다. 어떤 데이터를 언제 불러올지 판단하는 것도 CPU의 몫입니다. 그래픽 작업의 첫 단추는 이렇게 CPU의 판단과 데이터 이동으로 시작됩니다.

GPU가 이미지를 화면에 띄우기까지의 숨겨진 과정

GPU를 위한 전용 공간 VRAM

시스템 메모리에 데이터가 올라왔다고 해서 바로 화면에 그릴 수 있는 것은 아닙니다. GPU가 데이터를 빠르게 가져다 쓰기에는 시스템 메모리가 조금 멉니다. 그래서 GPU는 자신만을 위한 전용 메모리인 VRAM(Video Random Access Memory)을 가지고 있습니다.

시스템 메모리에 있던 이미지 데이터는 다시 한 번 VRAM으로 복사됩니다. 이 과정은 필수적입니다. GPU가 작업할 때 필요한 재료들을 손 닿는 곳에 미리 가져다 놓는 것과 비슷하죠. 그래야 렌더링 속도가 늦어지지 않고 제때 화면을 그릴 수 있습니다.

텍스처로 관리되는 이미지

VRAM으로 넘어온 이미지는 우리가 흔히 아는 사진 파일과는 조금 다른 형태로 관리됩니다. 이를 보통 텍스처(Texture)라고 부릅니다. 텍스처란 GPU가 표면에 색을 입히거나 질감을 표현할 때 바로 사용할 수 있도록 가공된 데이터입니다.

예를 들어 캐릭터가 입은 갑옷의 문양이나 바닥의 거친 느낌이 모두 텍스처입니다. 하늘에 떠 있는 구름도 마찬가지입니다. 이렇게 GPU가 이해하기 쉬운 형태로 정리가 되어 있어야 나중에 연산할 때 낭비되는 시간이 없습니다.

화면에 그림을 찍어내는 Bitblt

이제 준비된 텍스처를 실제 화면에 보여줄 차례입니다. 이때 등장하는 개념이 Bitblt(Bit Block Transfer) 연산입니다. 이름이 조금 어렵게 느껴질 수 있지만 하는 일은 명확합니다.

이 연산은 이미 만들어진 이미지 블록을 메모리의 특정 위치에서 화면 버퍼로 빠르게 복사합니다. 쉽게 말해 다 그려진 그림을 화면이라는 도화지에 쾅 찍어주는 역할입니다. 이 과정이 빨라야 플레이어는 캐릭터가 자연스럽게 움직인다고 느낍니다. 반대로 이 복사가 늦어지면 화면이 뚝뚝 끊기는 현상을 겪게 되죠.

CPU와 GPU가 호흡을 맞추는 방법

이 모든 과정에서 눈여겨볼 점은 CPU와 GPU가 긴밀하게 움직인다는 사실입니다. CPU는 전체적인 데이터의 흐름을 관리하고 명령을 내립니다. 반면 GPU는 그 명령을 받아 엄청난 양의 그래픽 계산과 출력을 담당합니다.

오픈 월드 게임을 예로 들어보겠습니다. 플레이어가 새로운 지역으로 이동하면 CPU는 앞으로 필요할 풍경 데이터를 미리 예측해서 불러옵니다. 그리고 GPU는 그 데이터를 받아 즉시 화면에 띄울 준비를 마칩니다. 두 장치의 호흡이 잘 맞으면 로딩 화면 없이도 쾌적한 플레이가 가능합니다.

속도만큼 중요한 데이터의 흐름

많은 분들이 그래픽 성능이라고 하면 GPU의 계산 속도만 떠올리곤 합니다. 하지만 데이터를 얼마나 빠르고 효율적으로 옮기느냐도 그에 못지않게 중요합니다. 저장 장치에서 시스템 메모리로, 다시 VRAM으로 이어지는 이 길이 막히지 않아야 합니다.

데이터 전송이 원활하지 않으면 아무리 좋은 그래픽 카드를 써도 제 성능을 내기 어렵습니다. 텍스처가 늦게 뜨거나 갑작스러운 멈춤이 생기는 이유도 대개 이런 병목 현상 때문입니다. 흐름이 매끄러울 때 비로소 사용자는 기술적인 부분을 잊고 화면 그 자체에 몰입하게 됩니다.

제목 영역
이미지