Skip to main content
부분적으로 사용 중단됨. 이 문서에 설명된 프레임 상관 기법은 XGameStreamingGetAssociatedFrameXGameStreamingGetLastFrameDisplayed에 의존하며, 2604 GDK 릴리스 기준으로 사용 중단되었고 향후 릴리스에서 제거될 예정입니다. 일반 지연 시간 측정 API인 XGameStreamingGetStreamAddedLatency는 계속 사용할 수 있습니다. 프레임 상관에 의존하지 않는 지연 시간 인식 기술에 대해서는 게임 스트리밍 지연 시간 측정을 참조하세요.
이 항목을 사용하여 XBOX Game Streaming을 통해 재생될 때 타이틀의 지연 시간 보정을 결정합니다. 비디오 게임은 빠른 액션에 대해 시간에 민감한 입력 처리가 필요할 수 있습니다. 그림 1과 같이 사용자의 캐릭터가 벼랑으로 이어지는 움직이는 컨베이어 벨트 위에 있는 플랫포머를 상상해 보세요. 사용자는 적절한 시점에 점프해야 합니다. 너무 이르면 다음 플랫폼을 놓치게 되고, 너무 늦으면 점프 전에 떨어지게 됩니다. 게임 스트리밍의 네트워크 지연으로 인해, 사용자가 자신의 캐릭터가 점프해야 하는 위치에 있는 것을 볼 때쯤이면, XBOX 서비스 관점에서는 이미 끝에서 떨어졌을 수 있습니다. 게임이 결국 네트워크를 통해 버튼 입력을 받으면, 사용자의 관점에서 올바른 비디오 프레임에서 버튼을 눌렀더라도 낙하로 기록될 수 있습니다. 그림 1. 컨베이어 벨트 위에 캐릭터가 있는 플랫포머의 예를 보여줍니다.

지연 시간 보정

그림 1에 표시된 예시와 같은 지연 시간을 보정하기 위해 게임은 이전 상태에 대한 기록을 가지고 있습니다. 사용자가 점프 버튼을 누르면 게임은 사용자가 자신의 관점에서 적절한 시점에 버튼을 눌렀는지 확인하기 위해 게임에서 해당 지점을 검색합니다. 올바른 지연 시간 보정의 핵심은 과거의 얼마나 먼 시점을 검색해야 하는지 파악하는 것입니다. XBOX Game Streaming API는 이를 위한 여러 옵션을 제공합니다.

평균 지연 시간

일부 시나리오에서 가장 간단하지만 가장 정확도가 떨어지는 접근법은 평균 지연 시간을 사용하는 것입니다. XGameStreamingGetStreamAddedLatency API는 스트리밍에 의해 추가된 지연 시간의 최근 평균을 반환합니다. 이 평균은 입력 지연 시간과 출력 지연 시간으로 분할됩니다. 입력 지연 시간은 사용자 입력이 서버에서 수신되는 데 걸리는 시간이고, 출력 지연 시간은 게임에서 렌더링된 비디오 프레임이 클라이언트 디바이스에서 수신되어 처리되는 데 걸리는 시간입니다. 시간 기반 액션의 경우, 게임은 이 평균을 액션이 언제 발생했는지 추정하는 데 사용할 수 있습니다. 하지만 네트워크 지연은 프레임마다도 변할 수 있으므로 이 접근법은 부정확합니다. 또한 스트림 추가 지연 시간 측정에는 게임이 시뮬레이션 및 렌더링을 실행하는 데 걸리는 시간과 같은 비스트리밍 지연 시간 부분이 포함되지 않습니다.

입력이 있는 프레임 토큰

XGameStreamingGetAssociatedFrame API는 사용자가 버튼을 누르거나 다른 입력을 변경했을 때 본 게임 상태에 대한 정확한 정보를 제공하여 이 문제를 해결하는 데 도움이 됩니다. 프레임이 시작되면 Microsoft Game Development Kit(GDK)을 사용하는 게임은 ID3D12Device::WaitFrameEventX를 호출하고 D3D12XBOX_FRAME_PIPELINE_TOKEN을 받습니다. D3D12XBOX_FRAME_PIPELINE_TOKEN을 해시 맵과 같이 원하는 데이터 구조에서 나중에 현재 상태를 저장하는 키로 사용할 수 있습니다. 프레임이 완료되면 게임은 토큰과 함께 PresentX를 호출합니다. PresentX는 토큰이 일치하는 비디오 프레임과 함께 자동으로 게임 스트리밍 클라이언트로 전송되도록 보장합니다. 서버로 전송되는 입력에는 현재 클라이언트에 표시된 프레임의 토큰이 함께 제공됩니다. 게임이 IGameInputReading을 받으면 XGameStreamingGetAssociatedFrame API에 전달하여 토큰을 다시 얻을 수 있습니다. 이를 사용하여 이전 상태를 조회하고 저장된 상태를 기반으로 입력을 처리할 수 있습니다.
사용자가 컨트롤러를 만지지 않거나 그저 버튼을 누르고 있어서 입력이 변경되지 않은 경우, 새 토큰은 생성되지 않습니다.

입력이 없는 프레임 토큰

경우에 따라 입력이 변경되지 않았더라도 사용자가 가장 최근에 본 것이 무엇인지 알아야 할 수 있습니다. 그림 1의 예로 돌아가면, 캐릭터가 컨베이어 벨트 끝에 도달할 때 떨어집니다. 게임의 도전 과제와 공정성의 일부는 이러한 시간 창 내에서 반응하는 것입니다. 이상적으로 스트리밍 사용자는 비스트리밍 사용자와 정확히 같은 시간 동안 반응할 수 있어야 합니다. 지연 시간 때문에 창의 종료 시간을 이동시켜 창 끝에서 수신된 입력이 수락되도록 해야 합니다. 이를 위해 게임은 버튼을 누르지 않은 지연 시간 토큰을 사용할 수 있습니다. 액션 없이 입력 판독값이 창 끝에서의 상태와 일치하면, 사용자는 반응에 실패한 것이므로 게임은 이에 대해 공정하게 페널티를 부여할 수 있습니다. XGameStreamingGetLastFrameDisplayed API는 스트리밍 클라이언트가 가장 최근에 표시한 프레임에 대한 D3D12XBOX_FRAME_PIPELINE_TOKEN을 반환합니다. 지속적으로 업데이트되므로 언제든지 호출하여 사용자가 애니메이션의 끝을 봤는지 확인할 수 있습니다.
XGameStreamingGetLastFrameDisplayedXGameStreamingGetAssociatedFrame과 동일한 방식으로 사용할 수 있습니다. 입력을 처리할 때는 해당 입력이 발생했을 때 화면에 있던 토큰을 반환하므로 XGameStreamingGetAssociatedFrame을 사용하는 것이 좋습니다. 시간이 더 경과했다면 XGameStreamingGetLastFrameDisplayed가 더 최근 프레임의 토큰을 반환할 수 있습니다.

더 많은 시나리오

이전 섹션의 세 가지 API를 사용하여 다양한 시나리오에서 지연 시간을 보정할 수 있습니다. 다음 섹션에서는 일반적인 다중 사용자 지연 시간 보정 기법을 기반으로 하는 더 많은 예를 제공합니다.

이동

캐릭터, 카메라 이동 또는 조준은 두 가지 범주로 나눌 수 있습니다.

개별 결과가 있는 이동

사용자가 충돌 지점으로 이동하거나 조준하고 발사할 때, 게임은 이동이 어떤 결과를 초래했는지에 대해 사용자에게 관찰 가능한 결정을 내려야 합니다. 이러한 경우, 이진 결정은 일반적으로 게임이 결정이 필요한 프레임과 상관된 입력을 받을 때까지 지연됩니다. 충돌이나 벼랑에서 떨어지는 것과 같은 경우, 게임은 기다리는 동안 무언가를 애니메이션화해야 할 수 있습니다. 예를 들어, 게임이 실제 입력을 받는 데 걸리는 시간 동안 사용자는 물체에 파고들거나, 벼랑 위로 떠오르거나 뛰어넘을 수 있습니다.

일반 이동

일반 이동은 모든 탐색 또는 조준이지만, 주어진 프레임에서 무슨 일이 일어나는지보다 누적된 이동이 더 중요한 운전과 같은 경우에 중요할 수 있습니다.
입력 예측
게임은 입력 기록을 사용하여 사용자가 입력을 제공한 프레임을 본 이후 경과한 시간을 기반으로 앞으로 예측할 수 있습니다. 예를 들어 썸스틱 좌표가 0.5이고 지연 시간 토큰이 3프레임 이전인 동안 평균 프레임당 0.1씩 진행되었다면, 게임은 이를 0.8인 것처럼 처리할 수 있습니다. 물론 사용자가 속도와 방향을 변경하면 오예측으로 이어질 수 있습니다. 사용자의 실제 입력을 통합하기 위해 게임은 이전에 예측한 상태의 버퍼를 유지할 수 있습니다. 해당 상태에 대한 실제 입력이 나타나면, 게임은 실제 입력으로 해당 상태에서 시뮬레이션을 다시 실행하여 보이는 상태를 수정할 수 있습니다. 위에서 언급한 대로, 게임은 실제 입력이 알려질 때까지 결과를 트리거하는 것을 대기해야 합니다. 지연 시간이 높은 연결에서는 이로 인해 눈에 띄는 “팝핑”이 발생할 수 있으며, 게임은 오예측을 위한 스무딩이나 다른 커버를 제공하고자 할 수 있습니다. 이 전략을 사용하면 렌더링된 프레임이 클라이언트에 도달하는 데 더 많은 시간이 걸립니다. 게임은 서버의 시뮬레이션과 사용자의 뷰를 동기화하기 위해 평균 출력 지연 시간만큼 더 예측하고자 할 수 있습니다. 이는 서버 시뮬레이션의 속도가 외부 다중 사용자 서버에 의해 제어될 수 있는 다중 사용자 게임에서 더 중요할 가능성이 높습니다.
게임별 예측
입력 기록을 예측하는 대신 게임은 사용자가 무엇을 할지 더 잘 추측할 수 있습니다. 이는 2D 플랫포머 캐릭터가 오른쪽으로 이동하는 것과 같은 간단한 휴리스틱부터 사용자 기록을 기반으로 하는 머신 러닝까지 다양할 수 있습니다. 입력 예측과 마찬가지로, 게임은 예측 버퍼를 유지하고 실제 입력이 들어올 때 시뮬레이션을 다시 실행할 수 있습니다.

터치 트레이싱

네이티브 터치를 사용하는 게임은 사용자의 손가락 아래에 커서 또는 조준점을 배치할 수 있습니다. 지연 시간이 높으면 사용자는 커서가 움직이는 손가락 뒤를 따라가는 것을 알아차립니다. 이 항목의 일반 이동 섹션에서 언급한 대로, 게임은 움직이는 터치 입력의 방향과 속도를 예측하여 커서를 일반적으로 움직이는 손가락 아래에 유지할 수 있습니다.

다중 사용자

XBOX Game Streaming에서 실행되는 다중 사용자 게임의 장점은 사용자의 XBOX 서버가 동일한 Azure 데이터센터에 있을 가능성이 높다는 것입니다. 게임의 다중 사용자 서버도 해당 Azure 지역에 있는 경우, XBOX 콘솔과 다중 사용자 서버 간의 지연 시간은 1밀리초 미만입니다. 그러나 사용자의 클라이언트 디바이스는 더 멀리 떨어져 있습니다. 다중 사용자 게임은 일반적으로 게임 대 다중 사용자 서버 지연 시간을 처리하는 전략이 있습니다. 이는 종종 다중 사용자 서버의 타임스탬프 또는 프레임 카운터를 포함합니다. 이러한 타임스탬프와 카운터를 프레임 토큰과 연결함으로써, 다중 사용자 게임은 지연 시간 계산에 스트림을 포함할 수 있습니다. 이는 다중 사용자 게임이 스트리밍 사용자에게 올바르게 느껴지도록 하는 동시에 스트리밍 사용자와 비스트리밍 사용자 간의 형평을 맞추는 데 도움이 됩니다.

참조 API 문서

참고 항목

게임 스트리밍 지연 시간 보정 개요 게임 스트리밍 지연 시간 측정 게임 테스트 중 지연 시간 시뮬레이션 XGameStreaming (API 내용)
마지막 수정일 2026년 8월 24일