게임의 심장 게임엔진
게임 하나를 만들려면 물리 계산과 화면 그리기, 소리 처리까지 모두 필요하다. 게임엔진은 이 공통 작업을 미리 만들어 둔 도구다.
편집부 · 2025년 7월 13일 · 읽는 데 2분
공을 던지면 포물선을 그리며 떨어지고, 벽에 부딪히면 튕긴다. 화면에는 빛과 그림자가 맞게 그려진다. 이 모든 것을 게임마다 처음부터 만든다면 낭비가 크다. 게임엔진은 이런 공통 부분을 미리 만들어 둔 틀이다.
한 프레임 동안 벌어지는 일
게임은 같은 일을 초당 수십 번 반복한다. 이 한 바퀴를 게임 루프라 한다.
먼저 입력을 읽는다. 어떤 키가 눌렸는지, 마우스가 어디로 움직였는지를 확인한다. 다음으로 세계의 상태를 갱신한다. 물체의 위치를 옮기고, 충돌을 판정하고, 인공지능이 조종하는 대상의 다음 행동을 정한다. 마지막으로 화면을 그린다.
초당 60프레임이라면 이 세 단계가 약 16.7밀리초 안에 끝나야 한다. 한 번이라도 넘기면 화면이 끊긴 것처럼 보인다.
시간 간격을 다루는 문제
컴퓨터마다 성능이 다르므로 한 바퀴에 걸리는 시간도 다르다. 이를 무시하고 매 프레임 같은 거리를 움직이게 하면, 빠른 컴퓨터에서 캐릭터가 더 빨리 달린다.
그래서 지난 프레임과의 시간 차를 곱해 이동량을 계산한다. 이 값을 델타 타임이라 한다. 다만 물리 계산에서는 시간 간격이 들쭉날쭉하면 결과가 불안정해진다. 그래서 물리만 따로 고정된 간격으로 계산하고, 화면 표시와 분리하는 방식이 널리 쓰인다.
충돌을 값싸게 판정하기
물체가 1,000개 있으면 서로 부딪히는지 확인할 조합은 약 50만 가지다. 매 프레임 이만큼 계산할 수는 없다.
그래서 두 단계로 나눈다. 먼저 각 물체를 상자나 구로 감싼 뒤, 이 단순한 도형끼리 겹치는지만 빠르게 확인한다. 공간을 격자로 나눠 가까이 있는 것끼리만 비교하기도 한다. 이 단계를 넘긴 소수의 후보만 실제 모양으로 정밀하게 검사한다.
그리는 일은 순서 싸움이다
화면에 무언가를 그리라고 그래픽 카드에 지시하는 일에는 고정된 비용이 든다. 풀잎 1만 개를 각각 그리라고 1만 번 지시하면, 그리는 시간보다 지시하는 시간이 더 걸린다.
그래서 같은 재질을 쓰는 것들을 묶어 한 번에 보낸다. 시야에 들어오지 않는 것, 다른 물체에 완전히 가려진 것은 아예 목록에서 뺀다. 멀리 있는 물체는 단순한 모양으로 바꿔 그린다.
엔진을 쓰지 않는 선택
널리 쓰이는 상용 엔진은 기능이 많은 만큼 무겁고, 세밀한 조정이 어려운 부분도 있다. 특정한 방식의 게임을 만들려는 곳에서는 직접 엔진을 만들기도 한다.
반대로 작은 팀일수록 기성 엔진의 이점이 크다. 여러 기기에 맞춰 내보내는 작업, 소리와 입력 장치를 다루는 작업은 직접 하면 시간이 많이 드는데 게임의 재미와는 직접 관련이 없다.
게임 바깥으로
게임엔진은 이제 게임 밖에서도 쓰인다. 건축 설계의 시각화, 영상물의 배경 촬영, 자율주행 알고리즘을 시험하는 가상 환경 구축에 쓰인다. 실시간으로 그럴듯한 장면을 만들어내는 능력이 필요한 곳이면 어디든 쓸 수 있기 때문이다.
이어서 읽기