본질적으로 컴퓨터는 어떻게 동작을 하죠?

한줄한줄씩 순차적으로 명령어를 실행한다. 하지만 사용자 입장에서는 순차적 혹은 동시에 진행되는 여러작업을 한번에 모아서 본다.

대표적으로 게임에서의 렌더링이 그부분 해당한다. 유저에게 보여줄 화면을 그릴때, 멀리있는 산, 언덕, 나무, 유저, NPC 이런것들 보여줄떄 전부 한번에 그려서 보여준다. 하나씩 그리는 걸 눈으로 보여지게 된다면 그 과정이 눈에보이면서 게임에 몰입하기가 어렵다.

화면 장면이 빠르게 업데이트가 되어야 하고 매 프레임이 완성되면 한번에 보여줘야 한다.

또한 화면을 지우고 다시그려야 하는 문제가 있기때문에 의도치 않게 화면에 깜박임이 생기며 이를 보완해주는 방법이 더블 버퍼링이다.

들어가기 앞서 컴퓨터가 화면을 어떻게 그리는지부터 복습해보자.

컴퓨터 그래픽스 작동 원리

컴퓨터 모니터 같은 디스플레이는 한번에 한 픽셀을 그린다. 화면 왼쪽에서 오른쪽으로 한줄을 그린후에 화면 다음 줄로 내려간다.

image.png

화면 우화단에 도달하면 다시 좌상단으로 돌아가서 같은 작업을 계속 반복한다. 너무 빠르기 떄문에 (1초 60번 60FPS) 눈으로는 이것을 알아채기가 어렵다.

이 과정은 픽셀들을 좁은 호스를 통해서 화면에 전달하는 것과 유사합니다. 그럼 호스는 어떤 색을 어디에 뿌려야 하는지 알고 있을까?

대부분의 컴퓨터는 픽셀을 프레임버퍼(FrameBuffer, RenderTarget) 메모리에 할당된 픽셀들의 배열로, 한 픽셀의 색을 여러 바이트로 표현하여 정하고 있다. 해당 호스는 이 값들을 가져와서 모니터에 한픽셀씩 그려준다.

결론적으로 게임을 화면에 보여주려면 이 프레임 버퍼 안에 그림을 그려주면 된다.

8ec63f3c7868230229ff03482b46c1f2.gif