게임 델타 시간과 고정 타임스텝 실험실

반복 가능한 프레임 스파이크, 움직임 시뮬레이션, 따라잡기 스텝과 보이는 시간 차이로 가변 및 고정 게임 루프를 비교합니다.

프레임 패턴 만들기

초당 렌더링 프레임

스파이크 프레임에 더할 시간

같은 크기의 시뮬레이션 스텝

실험 공간

두 개의 시계, 하나의 움직이는 오브젝트

막대는 hitch를 보여 주고 선은 두 위치를 추적합니다. 아래 선은 최종값에 가려질 수 있는 차이를 분리합니다.

실험 업데이트됨

움직임 기록

경과한 실제 시간에 따른 위치입니다. 점선은 같은 고정 스텝을 표시합니다.

가변 델타 경로고정 타임스텝 경로프레임 스파이크

가변 모델은 현재 프레임 시간으로 속도를 한 번 적용합니다. 고정 모델은 전체 실제 시간을 누적하고 같은 크기의 스텝으로 진행합니다. 어느 경로도 성능 측정값은 아닙니다.

값은 이 브라우저에만 저장되어 다음에 돌아왔을 때 실험을 이어갈 수 있습니다. 게임 데이터나 텔레메트리는 전송되지 않습니다.

Zoom 100%
유틸리티 스튜디오

이 유틸리티를 내 웹사이트에 추가하고 싶으신가요?

WordPress, Notion 또는 직접 운영하는 사이트에 맞게 색상과 다크 모드를 설정하세요.

자주 묻는 질문

이 고정 타임스텝 실험실은 무엇을 보여 주나요?

같은 움직이는 오브젝트를 가변 델타 시간 루프와 고정 타임스텝 누산기로 실행합니다. 반복 가능한 프레임 스파이크를 넣으면 게임 엔진 없이 시뮬레이션 시간, 위치 차이, 따라잡기 스텝을 확인할 수 있습니다.

가변 델타와 고정 타임스텝의 차이는 무엇인가요?

가변 모델은 렌더링된 각 프레임의 시간으로 한 번 업데이트합니다. 고정 모델은 같은 크기의 시뮬레이션 스텝을 사용하고 누산기에 쌓인 실제 경과 시간만큼 스텝을 처리합니다. 고정 스텝은 렌더링 속도 의존성을 줄이지만 긴 프레임에서는 추가 따라잡기 작업이 필요할 수 있습니다.

프레임 스파이크 입력은 무엇을 의미하나요?

선택한 스파이크 프레임마다 추가할 밀리초입니다. 빈도 값으로 몇 프레임마다 스파이크를 넣을지 정하므로 무작위 성능 기록 대신 반복 가능한 hitch를 만들 수 있습니다.

델타 상한은 무엇을 바꾸나요?

프레임이 선택한 상한보다 길 때 가변 모델이 사용하는 델타를 줄입니다. 큰 순간 이동은 막을 수 있지만 해당 모델의 시뮬레이션 시계는 실제 시간보다 뒤처집니다. 고정 누산기는 프레임 전체 시간을 계속 계산합니다.

프로파일러인가요, 플레이테스트를 대신하나요?

아닙니다. 지정된 숫자로 시간 처리 방식을 배우고 설계하는 결정론적 실험실입니다. 기기 성능을 측정하거나 엔진을 진단하거나 렌더링 비용을 모델링하거나 모든 게임에 맞는 루프를 증명하지는 않습니다.

# 게임 루프 안의 시계를 이해하기

렌더링된 각 프레임은 게임에 새로운 경과 시간을 전달합니다. 가변 델타 루프에서는 보통 position += velocity × frameTime처럼 움직임을 업데이트합니다. 프레임이 안정적이면 평균 속도는 의도한 값에 가깝지만, 한 번의 업데이트가 그 업데이트를 만든 프레임만큼 커질 수 있습니다. 따라서 hitch는 단순한 화면 정지가 아니라 그 업데이트가 소비하는 게임 시간을 바꾸는 사건입니다.

# 가변 적분과 고정 누산기 비교하기

고정 타임스텝 루프는 각 프레임 시간을 누산기에 더한 뒤 16.667 ms 같은 선택된 스텝을 반복해서 소비합니다. 시뮬레이션은 같은 크기의 업데이트를 받고 렌더러는 다른 리듬으로 표시할 수 있습니다. 남은 소수 시간은 다음 프레임까지 누산기에 남습니다. 긴 프레임이 오면 고정 루프는 경과 시간을 반영하기 위해 여러 작은 업데이트를 수행합니다. 스텝 크기는 안정적이지만 따라잡기 작업이 순간적으로 늘 수 있습니다.
상황 가변 델타 경로 고정 타임스텝 경로 판단할 내용
안정적인 렌더링일반 프레임 시간으로 한 번 업데이트같은 스텝으로 누적 시간을 소비두 경로가 같은 움직임을 따르는지 확인합니다.
긴 프레임큰 업데이트가 오브젝트를 너무 멀리 이동여러 고정 업데이트가 시간을 따라잡음위치 차이와 따라잡기 수를 함께 읽습니다.
다른 렌더링 속도업데이트 크기가 프레임 속도에 따라 변함시뮬레이션 스텝은 동일함고정 스텝은 렌더링 의존성을 줄입니다.
델타 상한상한을 넘는 시간을 무시누산기는 전체 프레임 시간을 받음시간 손실을 허용할 때만 제한합니다.

# 프레임 스파이크가 실제로 하는 일 보기

초당 60프레임에서는 일반 프레임이 약 16.667 ms입니다. 여기에 80 ms 스파이크가 추가되면 한 프레임은 약 96.667 ms가 됩니다. 가변 모델은 이 시간을 한 번의 업데이트로 소비합니다. 고정 모델은 대신 약 여섯 번의 16.667 ms 스텝을 소비합니다. 전체 경과 시간은 같을 수 있지만 시뮬레이션을 통과하는 경로는 달라집니다.

# 위치 차이와 따라잡기를 함께 읽기

위치 차이는 가변 경로에서 고정 경로를 뺀 값입니다. 두 적분 정책이 얼마나 벌어졌는지를 보여 주지만 어느 쪽이 자동으로 옳은지는 말해 주지 않습니다. 따라잡기 수는 한 번의 렌더링 프레임에서 필요한 고정 작업량을 보여 줍니다. 큰 차이는 보이는 움직임의 불일치를, 많은 스텝은 CPU 예산 문제 가능성을 나타냅니다. 서로 관련 있지만 같은 진단은 아닙니다.

# 델타 제한을 정책으로 다루기

상한은 일시 정지된 탭, 브레이크포인트 또는 심각한 hitch가 캐릭터를 순간 이동시키거나 물리 오브젝트를 지오메트리 너머로 보내는 일을 막을 수 있습니다. 대신 가변 시계는 실제 경과 시간보다 뒤처집니다. 게임이 시간을 보존해야 한다면 고정 누산기나 다른 복구 정책을 사용합니다. 점프를 제한하고 반응성을 유지해야 한다면 상한이 유용할 수 있지만 잃는 시간을 의도적으로 선택해야 합니다.

# 보호해야 할 작업에 맞춰 루프 선택하기

게임 루프 작업 유용한 기본값 이유
물리, 충돌 또는 결정론적 게임플레이고정 타임스텝같은 스텝이 렌더링 리듬에 대한 의존성을 줄입니다.
상태를 누적하지 않는 단순한 시각 효과가변 델타업데이트가 작고 보통 따라잡기 큐가 필요하지 않습니다.
부드러운 표시가 필요한 게임플레이 시뮬레이션보간이 있는 고정 업데이트시뮬레이션 스텝은 유지하고 표시에서 소수 진행을 숨깁니다.
심각한 정지 뒤 복구제한된 따라잡기 정책나쁜 프레임 하나가 무제한 시뮬레이션 작업을 만들지 않게 합니다.

# 반복 가능한 조정 절차 사용하기

먼저 스파이크 없이 두 경로가 일치하는지 확인합니다. 반복 가능한 hitch를 추가하고 빈도를 바꿔 보이는 오류가 누적되는지 안정되는지 확인합니다. 속도를 바꾸기 전에 고정 스텝을 조정하고 따라잡기 수를 살핍니다. 마지막으로 상한을 켜고 가변 시뮬레이션 시간과 실제 시간을 비교합니다. 이 순서로 차이의 원인과 이를 제한하는 정책을 분리할 수 있습니다.
이 실험으로 증명할 수 없는 것
이 실험실은 지정된 프레임 시간과 일정한 속도를 사용하므로 시간 동작을 설명할 뿐 기기를 측정하거나 엔진을 검증하지 않습니다. 실제 물리, 입력 샘플링, 네트워크, 보간, 프레임 예산에 따라 최선의 설계는 달라질 수 있습니다. 결과를 가설로 삼고 실제 게임에서 확인하세요.