[서버] 데드 레커닝(Dead Reckoning)

2015. 5. 23. 03:11프로그래밍/서버

728x90
728x90

서론

  • 실시간 달리기 게임을 만들기 위해 서버에서 패킷을 보내는데
  • 1초에 60번을 랜더링하는 화면에 패킷을 1초에 60개를 뿌릴 수 없다.
  • 그래서 이것 저것 찾아서 알게 된 개념이다.

데드 레커닝

정의

  • 분산 네트워크 기반 실시간 시뮬레이션 환경에서 트래픽 데이터(traffic data)를 감소시키기 위해 사용하는 기법.
  • 데드(dead)라는 말은 신호를 받지 못하고 있는 상태를 말하며 레커닝(reckoning)은 추산한다는 의미로 신호가 없는 동안에는 추측하여 상태 정보를 갱신하는 것을 말한다.
  • 영어로 찾아보니 추측 항법이라는 용어를 찾을 수 있었다.
  • 배의 방향, 여행 경로를 추측하는데 쓰이는 방법이라고 한다.
  • 게임에 적용하면 캐릭터의 이동경로를 예측하는 방법이라고 할 수 있겠다.
현재 위치 = 이전위치 + (속도\*시간) + (1/2\*가속도\*시간^2)
  • 이렇게 구현하면 된다고 하는데... 자세히 보니......... 이건 그냥 가속도 공식인데.........

아무튼 구현

  • 달리기 게임 동기화를 해보았다.
  • 몇 시간을 고민하고 지우고 코딩하고 지우고 코딩하고 !!!!!!!!!!
  • 한 두살만 어렸어도 머리가 더 빨리 돌아갔을 터인데 아쉽다.

  • 이동 패킷을 1초 간격이라고 했을 때, 이전 패킷의 위치와 현재 패킷의 위치를 빼면 간격이 1초이므로 속도이자 예상 초당 이동 거리가 된다.
  • 거기에 예상랜더링 거리는 오차 + 위에서 계산한 거리만큼 랜더링을 하며 다음 패킷이 올때까지 열심히 그린다.
  • 여기에 더 꼼꼼하게 하려면 위의 1초당 예상 이동거리는 속도나 마찬가지므로 이전 속도를 저장해둔다.
  • 현재 속도 - 이전 속도를 하면 가속도가 나오므로 해당 값의 1/2을 해서 거리 계산에 더해주면 더 세밀하게 계산된다.
728x90
반응형

'프로그래밍 > 서버' 카테고리의 다른 글

동기화  (0) 2015.07.23
Thread  (0) 2015.07.23
Blocking vs Non-Blocking  (0) 2015.07.12
Overlapped I/O 모델  (0) 2015.05.17
IOCP 정리  (0) 2015.05.14
TCP/IP 프로토콜 개요  (1) 2015.04.27
메모리 풀(Memory Pool)  (0) 2015.03.18