Game Loop & System Timing
엔진의 심장 박동 역할을 하는 메인 루프 구조와, 가변(Variable) 및 고정(Fixed) 시간 간격을 수리적으로 관리하여 물리적 동기화를 보장하는 타이밍 메커니즘을 다룹니다.
sys.entry
M
Me
hyunyoun's Blog
posts6 min read
1. Overview
게임 루프 및 시스템 타이밍(Game Loop & System Timing, GST)은 가상 세계의 모든 물리적 변화를 시간()의 흐름에 따라 순차적으로 전산 처리하는 '엔진의 시공간 오케스트레이션'입니다.
학습자는 무한 루프 내에서 입력을 받고 상태를 갱신하며 화면을 그려내는 메인 루프의 표준 수순과, 프레임률() 변화에 무관하게 일관된 물리 속도를 보장하는 델타 타임() 수리 기제를 배옵니다. 특히, 연산량이 많은 물리 시뮬레이션을 위해 분리된 **고정 단계 업데이트( )**와 멀티 스레드 하드웨어에서의 수리적 동기화 수순을 익힙니다. 이를 통해 하드웨어의 성능 편차에 관계없이 사용자에게 동일한 물리 경험을 제공하는 하이엔드 시스템 거버넌스 역량을 확보합니다.
2. Scope & Boundaries
In-Scope
- Main Loop Lifecycle Dynamics: Input → Update → Render → Sync로 이어지는 물리적 순환 구조
- Variable vs Fixed Time-step: 하드웨어 가변 프레임과 물리 고정 주기의 수리적 분리 및 결합
- Delta Time Calculus: 프레임 소요 시간 수치를 객체의 물리 이동량에 투영하는 법
- Frame Pacing & V-Sync: 화면 찢어짐(Tearing) 방지를 위한 하드웨어 수직 동기화 역학
- Subsystem Update Ordering: 렌더링 시작 전 전처리 물리 수순 등 하부 시스템 간의 선후 관계
Out-of-Scope
- 일반적인 OS의 프로세스 스케줄링 알고리즘 (03-01-XX 영역에서 분담)
- 분산 컴퓨팅 환경에서의 네트워크 레이턴시 동기화 (08-01-XX 영역에서 분담)
Boundaries
- GST vs. UI Loop: 일반 앱의 UI 루프(14-XX-XX)가 '이벤트 대기(--)'에 집중한다면, GST는 '실시간 상태 강제 업데이트(--)'라는 물리적 능동성에 집중하여 구분합니다.
3. Counterexample
- 단순히 "while(true) 쓰기"라 설명하는 것은 GST 학습이 아닙니다. 왜 하드웨어 성능이 좋아져서 루프 속도가 빨라졌을 때 물리 개체의 이동 속도 수치가 수리적으로 폭증(Speedup)하는 현상을 방지하지 못하는지 증명할 수 있어야 하며, 가변 시간( ) 조절 없이 물리 충돌 수치를 연산할 때 발생하는 '터널링()' 하자를 논증하지 못한다면 루프 설계의 본질을 이해하지 못한 것입니다.
4. Prerequisites
- Linear Algebra (Basic): 04-XX-XX의 속도, 가속도 벡터 수리 기반 이해가 필수입니다.
- Real-Time Rendering & GPU Physics (Recommended): 12-05-XX의 렌더링 파이프라인 호출 주기 이해가 권장됩니다.
5. Learning Map
- The Heartbeat: 무한히 반복되며 세계를 갱신하는 기본 물리 루프를 이해합니다.
- Time Normalization: 하드웨어마다 다른 프레임 속도를 수리적으로 정규화하여 물리적 등가성을 확보합니다.
- Simulation Stability: 물리 시뮬레이션 전용 고정 타임스텝 수순을 루프에 주입하여 하이엔드 안정성을 구축합니다.
- Multi-threaded Sync: 여러 심장(Core)이 하나의 시간을 공유하도록 수리적으로 조율하는 거버넌스를 완성합니다.
6. Learning Topics
Basic
Core: 기본 게임 루프 구조 (The Basic Loop)
- Why to Learn: 프로그램이 종료될 때까지 쉬지 않고 세계를 갱신하는 엔진의 근본 작동 방식을 이해하기 위해서입니다.
- What to Learn:
- Processing Input: 사용자 명령 수치를 물리적으로 샘플링
- Updating States: 개체의 위치, 애니메이션 수치 전이
- Rendering Result: 수리적 결과를 시각적 물리 픽셀로 전송
- How to Learn:
while (running)문을 사용하여 입력 수치에 따라 물리 좌표가 변하는 최소 기능 엔진 작성 실습- 입력 처리가 누락되었을 때 하드웨어와 사용자 간의 수리적 피드백 단절 현상 관찰
- Implement: 입력을 받아 좌표를 갱신하고 콘솔에 출력하는 순환형 기초
Logic_Loop
Recommended
Core: 델타 타임과 프레임 독립성 (Delta Time Dynamics)
- Why to Learn: 저사양 하드웨어와 고사양 하드웨어에서 물리적 속도가 동일하게 느껴지도록 수리 보정하기 위함입니다.
- What to Learn:
dt(Delta Time) Calculation: 현재 루프와 이전 루프 간의 물리적 시간차 산출- Frame-Rate Independence: 속도 수치에
dt를 곱하여 물리 거리를 수리 보간 - Floating Point Precision in Time: 누적된 시간 수치의 물리적 오차 한계
- How to Learn:
- 초당 30프레임과 60프레임 환경에서 캐릭터가 동일한 물리 거리를 이동하는지 수리 증명 실습
- FPS Limiter 수치를 인위적으로 조절하며 루프 지연이 물리적 가독성에 주는 영향 분석
- Implement: 이전 프레임 소요 시간을 측정해 전역 수리 상수로 반환하는
Delta_Timer_Module
Practical
Core: 고정 타임스텝과 물리 업데이트 (Fixed Step Mechanics)
- Why to Learn: 가변적인 렌더링 프레임과 무관하게 물리 엔진의 수리적 정확성을 유지하기 위해서입니다.
- What to Learn:
- Fixed Update vs Update: 물리 연산 수순과 연출 위주 수순의 수리적 분리
- Accumulator Pattern: 남는 물리 시간을 다음 루프로 수리 이월하는 기술
- State Interpolation: 물리 업데이트 사이의 빈틈을 렌더링 시 수리적으로 메우는 법
- How to Learn:
- 복잡한 물리 충돌 수치를 가변 루프에서 돌렸을 때 튕겨 나가는 오류를 고정 루프로 해결하는 실습
- FixedUpdate 주기를 0.01초에서 0.1초로 늘려보며 물리 수치의 불연속성(Jerk)을 수리 진단
- Implement: 가변 렌더 타임 내에서 고정 물리 업데이트 횟수를 수리 산출하는
Fixed_Step_Governor
Advanced
Core: 멀티스레드 동기화와 시간 거버넌스 (Advanced Sync)
- Why to Learn: 하드웨어의 여러 코어가 시각, 물리, 오디오 수치를 제각기 처리하면서도 단일한 시간선을 유지하게 하기 위함입니다.
- What to Learn:
- Thread-local Time: 각 스레드가 참조하는 수리적 시간 수치의 일관성
- Frame Lag & Double Buffering: 연산 중인 수치와 출력 중인 수치의 물리적 격리
- Triple Buffering Physics: 입력 지연 수치를 희생하고 프레임 물리 안정성을 상향
- How to Learn:
- VTune 같은 하드웨어 프로파일러를 통해 메인 스레드와 워커 스레드 간의 물리적 동기화 대기 수치 분석 실습
- Thread-safe Time Provider를 구현하여 고성능 하드웨어 병렬 환경에서도 수리 무결성을 유지하는 전략 프로젝트
- Implement: 여러 서브시스템의 업데이트 완료 수치를 취합하여 다음 프레임 물리 실행을 허가하는
System_Tick_Synchronizer
7. Terminology
8. References
Primary
- [P1] CS2023 - Graphics & Interactive Techniques - Real-time Graphics — Academic curricula.
- [Game Programming Patterns] Robert Nystrom - Chapter: Game Loop.
Secondary
- [Fix Your Timestep!] Glenn Fiedler - The seminal article on accumulator physics.
- [Real-Time Collision Detection] Christer Ericson - Loop timing for stability.
Industry
- [Unity: Execution Order of Event Functions] — Industrial lifecycle standard.
- [Unreal Engine: Actor Ticking and Simulation Timing] — High-end engine timing governance.
9. Final Checklist
Primary
- '루프 속도'와 상관없이 캐릭터의 '이동 수치'를 일정하게 유지하는 수리 모델()을 구현할 수 있는가? (P1)
- 물리 시뮬레이션이 '가변 시간' 환경에서 붕괴()되는 수리적 이유를 논증할 수 있는 가? (P1)
Secondary
- '프레임 누적기()' 기술을 사용하여 렌더링 프레임과 물리 프레임을 수리적으로 결합할 수 있는 가?
- Jitter 수치를 최소화하기 위해 스레드 간 물리적 동기화 지점을 어느 수순에 배치해야 하는지 제안할 수 있는 가?
Industry
- 실무 엔진 구축 시, 하드웨어의 Refresh Rate 수치를 감지하여 적절한 Target FPS 거버넌스를 주입할 수 있는 가? (SFIA)
- Frame Pacing Tool 수치 분석을 통해 물리적 스터터링(Stuttering)이 발생하는 수리적 병목 구간을 진단할 수 있는 가?