온라인 게임에서 상대 캐릭터가 순간이동하듯 튀거나, 분명히 맞혔는데 빗나갔다고 나오는 경험은 대부분 네트워크 동기화 문제에서 생깁니다. 동기화는 여러 플레이어의 화면이 같은 게임 상황을 보도록 맞추는 작업입니다. 이 글에서는 동기화가 왜 어려운지, 게임들이 어떤 방법으로 이를 숨기는지 설명합니다.
동기화가 어려운 이유: 지연, 손실, 순서
데이터가 내 컴퓨터에서 서버까지 갔다가 돌아오는 데는 시간이 걸립니다. 이를 지연(레이턴시)이라 하고, 왕복 시간을 핑이라고 부릅니다. 또 데이터가 중간에 사라지는 패킷 손실, 보낸 순서와 다르게 도착하는 순서 뒤바뀜도 일어납니다.
결국 내가 보는 상대방은 항상 '조금 전의 상대방'입니다. 동기화 기술은 이 시간 차이를 없애는 것이 아니라, 플레이어가 덜 느끼도록 감추고 공정하게 판정하는 방법들입니다.
무엇을 보낼 것인가: 상태 동기화와 입력 동기화
| 방식 | 보내는 것 | 특징 | 어울리는 장르 |
|---|---|---|---|
| 상태 동기화 | 위치, 체력 같은 결과 값 | 구현이 직관적, 데이터 양이 많아질 수 있음 | 액션 RPG, 슈팅 |
| 입력 동기화(락스텝) | 키 입력과 명령만 | 데이터가 적음, 모든 기기가 같은 계산 결과를 내야 함 | RTS, 격투 게임 |
입력 동기화는 모든 플레이어가 같은 입력으로 같은 계산을 하므로 결과가 똑같아야 합니다. 부동소수점 계산 차이나 난수 차이로 결과가 조금만 어긋나도 화면이 서로 달라지는 '디싱크'가 생깁니다. 그래서 결정론적(같은 입력이면 항상 같은 결과) 설계가 필수입니다.
클라이언트 예측과 서버 보정
내 캐릭터를 움직일 때 서버의 응답을 기다렸다가 움직이면 조작이 늦게 느껴집니다. 그래서 클라이언트는 입력을 서버에 보내는 동시에 자기 화면에서 바로 움직입니다. 이를 클라이언트 예측이라고 합니다.
나중에 서버의 판정 결과가 도착하면 내 예측과 비교합니다. 차이가 있으면 서버 값으로 위치를 고치고, 그 뒤에 보낸 입력을 다시 적용해 현재 위치를 계산합니다. 이 과정을 재조정(Reconciliation)이라고 합니다. 차이가 클 때 캐릭터가 뒤로 끌려가는 '러버밴딩'이 바로 이 보정이 눈에 보이는 경우입니다.
다른 플레이어를 부드럽게 보여 주는 보간
다른 플레이어의 위치 정보는 일정 간격으로 띄엄띄엄 도착합니다. 받은 위치로 바로 옮기면 캐릭터가 뚝뚝 끊겨 보입니다. 보간은 받은 두 위치 사이를 부드럽게 이어 그리는 방법으로, 일부러 약간 과거의 모습을 보여 주는 대신 움직임을 매끄럽게 만듭니다.
- 보간(Interpolation): 이미 받은 두 값 사이를 채움, 정확하지만 약간 늦음
- 외삽(Extrapolation): 마지막 속도로 앞으로의 위치를 추측, 빠르지만 방향이 바뀌면 틀림
지연 보상: 맞혔는데 빗나간 문제
슈팅 게임에서 내 화면의 상대는 과거 위치에 있으므로, 서버가 현재 위치로 판정하면 정확히 조준해도 빗나갈 수 있습니다. 지연 보상은 서버가 사격자의 지연 시간만큼 과거로 돌아가 그때 위치로 명중을 판정하는 방법입니다.
대신 맞는 쪽 입장에서는 '벽 뒤로 숨었는데 맞았다'는 일이 생깁니다. 어느 쪽 경험을 우선할지는 장르와 기획 의도에 따라 정합니다. 동기화는 기술 문제이면서 동시에 게임 디자인 문제이기도 합니다.
데이터 줄이기와 실습 방법
- 변한 값만 보내기(델타 압축)
- 멀리 있는 플레이어는 덜 자주 보내기(관심 영역 관리)
- 소수점 위치를 정해진 정밀도의 정수로 바꿔 크기 줄이기
- 중요하지 않은 정보는 UDP로, 꼭 도착해야 하는 정보는 신뢰성 있는 채널로 구분
엔진의 네트워크 기능으로 두 명이 움직이는 간단한 게임을 만든 뒤, 지연을 일부러 넣어 보는 도구로 핑을 높여 보세요. 예측과 보간을 켜고 끌 때 화면이 어떻게 달라지는지 직접 보면 개념이 빠르게 잡힙니다.
SBS아카데미게임학원 게임프로그래밍 과정은 2D/3D 게임부터 온라인 멀티플레이까지 포괄적인 제작을 경험하도록 구성되어 있습니다.
자주 묻는 질문
핑이 높으면 무조건 불리한가요?
대체로 불리하지만 게임마다 지연 보상과 예측 방식이 달라 체감 정도가 다릅니다. 판정 방식을 어떻게 설계하느냐에 따라 유불리가 바뀝니다.
격투 게임의 롤백 넷코드는 무엇인가요?
입력 동기화를 기본으로 하되, 상대 입력을 예측해 먼저 진행하고 실제 입력이 다르면 과거로 되돌려 다시 계산하는 방식입니다. 조작 지연을 줄이는 데 효과적인 방법으로 알려져 있습니다.
