🚀 들어가며
이전 글에서는 C++로 게임 루프를 직접 구현하면서
👉 고정 프레임(Fixed Timestep) 구조를 살펴봤습니다.
이번 글에서는 한 단계 더 나아가
👉 게임 루프의 다양한 방식들을 비교해보겠습니다.
🎯 이번 글의 목표
게임 루프에는 여러 방식이 존재합니다.
이번 글에서는 다음을 비교합니다:
- Fixed timestep (고정 프레임)
- Variable timestep (가변 프레임)
- Hybrid 방식 (혼합 구조)
🎮 왜 여러 방식이 존재할까?
게임 루프의 핵심 문제는 다음입니다.
❓ 프레임을 일정하게 유지할 것인가?
❓ 아니면 시간에 맞게 유연하게 처리할 것인가?
이 선택에 따라 구조가 달라집니다.
🥇 1. Fixed Timestep (고정 프레임)
구조
if (deltaTime >= targetFrameTime)
{
Update(targetFrameTime);
Render();
}
특징
- 프레임 간 시간이 일정
- 물리 계산 안정적
- 구현 단순
장점
- 안정적인 결과
- 디버깅 쉬움
- 예측 가능
단점
- FPS가 낮아지면 게임이 느려질 수 있음
- 프레임 드랍 시 부자연스러움
🎯 언제 사용?
- 간단한 게임
- 교육용 엔진
- 일정한 로직이 중요한 경우
🥈 2. Variable Timestep (가변 프레임)
구조
Tick(deltaTime); Draw();
특징
- 매 프레임마다 deltaTime 사용
- 프레임 시간 변화에 대응
장점
- FPS 변화에 유연
- 항상 최신 상태 유지
단점
- 물리 계산 불안정
- FPS에 따라 결과 달라짐
⚠️ 문제 예시
👉 이론적으로는 정상 동작하지만
👉 deltaTime이 크게 튀면 물리 오류 발생 가능
🥉 3. Hybrid 방식 (혼합 구조) 🔥
👉 실제 게임 엔진에서 가장 많이 사용되는 방식
구조 (핵심 아이디어)
accumulator += deltaTime;
while (accumulator >= fixedTimeStep)
{
Tick(fixedTimeStep);
accumulator -= fixedTimeStep;
}
Draw();
특징
- Tick은 고정 시간
- Draw는 자유롭게 수행
장점
- 물리 안정성 유지
- 렌더링 부드러움
단점
- 구현 복잡
- 구조 이해 필요
🧠 개념 도식
시간 흐름 ↓ deltaTime 누적 ↓ 고정 시간만큼 Update 반복 ↓ Render 수행
🎯 핵심 비교
| 방식 | 안정성 | 성능 | 구현 난이도 |
|---|---|---|---|
| Fixed | 높음 | 낮음 | 쉬움 |
| Variable | 낮음 | 높음 | 쉬움 |
| Hybrid | 높음 | 높음 | 어려움 |
📚 참고 자료
게임 루프에 대한 고전적인 설명은
👉 Game Programming Patterns의 Game Loop 장을 참고해보셔도 좋습니다.
👉 https://gameprogrammingpatterns.com/game-loop.html
🎮 실제 엔진에서는?
대표적인 예:
- Unity
- Update() → Variable
- FixedUpdate() → Fixed
- Unreal
- Tick(deltaTime) 기반
- 내부적으로 다양한 시스템과 결합
👉 대부분 Hybrid 구조를 사용합니다
🔥 중요한 포인트
👉 단순히 “어떤 방식이 좋다”가 아니라
어떤 문제를 해결하려는가에 따라 선택이 달라진다
🎯 지금까지 정리
- Fixed → 안정성
- Variable → 유연성
- Hybrid → 균형
🎮 마무리
게임 루프는 단순한 반복 구조가 아니라
👉 시간을 어떻게 처리할 것인가에 대한 설계 문제입니다.
🚀 한 단계 더 나아가고 싶다면
아래 강의도 참고해보셔도 좋습니다.