델타 타임 방식은 편리하지만 가끔 불안정할 수 있습니다. 그래서 많은 게임 엔진은 프레임 레이트 고정(Frame Rate Governing) 전략을 사용합니다. 용어가 조금 어렵게 느껴질 수도 있을 겁니다. 쉽게 풀자면 엔진이 프레임마다 걸리는 시간을 직접 관리하는 것입니다.
엔진이 시간을 통제하는 방식
보통은 프레임이 얼마나 빨리 끝날지 자연스럽게 둡니다. 하지만 이 전략은 다릅니다. 목표로 정한 시간을 기준으로 게임의 리듬을 맞추는 식이죠. 프로그래머가 목표를 30FPS로 정했다고 가정해 봅시다.

그러면 한 프레임의 목표 시간은 약 33.3ms가 됩니다. 엔진은 입력 처리와 업데이트, 렌더링을 이 시간 안에 마쳐야 합니다. 작업을 모두 끝낸 뒤 실제 걸린 시간을 확인합니다.
남는 시간을 활용하는 방법
만약 목표 시간보다 작업이 빨리 끝났다면 어떻게 할까요? 엔진은 남은 시간 동안 일부러 대기 상태에 들어갑니다. 잠시 쉬면서 시간을 맞추는 것이죠. 이렇게 하면 다음 프레임은 늘 비슷한 시점에 시작됩니다.
덕분에 델타 타임 값도 거의 일정하게 유지됩니다. 애니메이션이나 이동 계산이 예측 가능한 간격으로 실행되죠. 들쭉날쭉하던 시간 간격이 안정적으로 변합니다.
안정성이 주는 장점
이 방식은 델타 타임 예측 실패로 인한 문제를 줄여줍니다. 물리 연산이 불안정해지는 현상을 막는 데 큰 도움이 됩니다. 일정한 박자로 움직여야 하는 게임에 아주 적합합니다. 프레임 안정성이 필수인 콘솔 환경에서도 자주 쓰이는 방법입니다.
프로그래머 입장에서도 개발이 한결 수월해집니다. 시스템이 항상 일정한 시간 단위로 갱신된다고 가정할 수 있기 때문입니다. 변수를 줄이고 예측 가능성을 높이는 좋은 접근입니다.
성능 한계와 프레임 드롭
하지만 이 방법이 만능은 아닙니다. 한 프레임 처리 시간이 목표 시간을 넘기면 문제가 생깁니다. 엔진은 이미 늦어진 시간을 만회할 방법이 없습니다. 억지로 시간을 줄일 수는 없기 때문입니다.
그래서 다음 프레임은 자연스럽게 늦게 시작됩니다. 실제 프레임 레이트는 목표보다 낮아지게 되죠. 플레이어는 화면이 끊기는 프레임 드롭을 느끼게 됩니다.
속도를 유지하는 기술
기억해야 할 점은 이 기술의 목적입니다. 느린 게임을 빠르게 만들어주는 기술이 아닙니다. 이미 충분히 빠른 게임의 속도를 고르게 유지하는 것에 가깝습니다. 성능 여유가 있을 때만 그 빛을 발합니다.
적절한 기법의 조화
프레임 레이트 고정은 델타 타임의 단점을 덮어주는 훌륭한 선택지입니다. 하지만 성능 한계를 넘는 순간에는 무력해집니다. 그래서 실제 엔진에서는 여러 기법을 섞어서 씁니다.
델타 타임 클램핑이나 고정 타임스텝 물리를 상황에 맞게 조합하죠. 하나의 기법이 모든 걸 해결해주지는 않습니다. 시간과 델타 타임을 어떻게 다룰지 명확한 계획이 필요합니다.