넷코드

 



1. 개요
2. 해결책
3. 사례
3.1. 스포츠 게임
3.2. FPS 게임
3.3. 대전 액션 게임


1. 개요


'''넷코드''' (Netcode)는 게임에서 유저들 간의 핑차이를 보정하기 위하여 진행되는 일련의 '''네트워크 동기화''' 과정을 뜻한다. 유저들이 중앙 서버에 접속해서 플레이하는 게임들에서는 중앙 서버가 넷코드의 주체가 되고, 유저들 중에서 한명이 호스팅 역할을 맡는 P2P 방식에서는 해당 방장이 넷코드의 주체가 된다.
게임을 플레이하는 유저들의 접속 지역은 제각각 다른 경우가 많고 이는 결국 넷코드 주체로부터 이벤트 세션을 갱신하는 과정에서 유저마다 제각각 다른 시차가 발생하게 된다. 이것이 게임 내에서의 승패와 유저의 게임 진행에 큰 영향을 미치게 된다.
이와 같이 '''넷코드에서 일어나는 모든 문제'''들을 '''넷코드 문제''' (Netcode Issue)라고 한다. '''넷코드 문제'''에다가 '''핵 문제'''까지 겹치게 되면 게임 한판이 정말 제대로 개판된다. 절대 간과해서는 안되는 문제인게 해당 문제는 유저경험과 게임의 인상과 직결되는 만큼 자칫하면 게임 흥행에 발목잡는 문제점으로 작용할 수도 있다.

2. 해결책


넷코드 문제는 물리적인 문제이므로 유저나 서버 관리자가 해결할 수 있는 것은 없다. 또한 개발자 입장에서도 높은 핑의 유저와 낮은 핑의 유저 모두를 충족시킬 수 있는 해결책은 없기에 딜레마가 생기게 된다. 때문에 중앙 서버에서 플레이 하는 방식의 게임들은 넷코드 문제를 줄이기 위하여 서버 관리자가 핑 제한을 거는 경우가 흔하다.
그나마 호스트 쪽에서 게임 세션을 갱신하는 속도인 '''틱 레이트''' (Tick Rate)를 올리는 것이 그나마 이러한 문제를 해소시킬 수 있다.
틱레이트(Tickrate)에 대한 정확한 설명
참고로 틱 레이트 자체는 자기 PC에서 싱글플레이를 할 때도 적용된다. 쉽게 말해서 CPU에서 '게임 내부 세계에 이런이런 일이 일어났으니 뭐뭐가 변했다.'를 계산하는 주기가 틱레이트이다. 틱레이트가 30Hz면 프레임이 200프레임 넘게 나오더라도 그래픽만 200프레임이고 게임 내 세계는 1초에 30번만 갱신되는 것.
  • 이는 온라인 게임에도 해당된다. 다만 온라인 게임에서 클라이언트의 틱레이트가 문제될 정도로 개판으로 만드는 경우는 거의 없기 때문에(일반적으로 네트워크의 핑#s-1.1과 서버의 틱레이트에 모두 영향을 받는 넷코드가 클라이언트의 틱레이트로 인한 보다 훨씬 느릴 수밖에 없다), 넷코드의 주체인 서버/호스트의 틱레이트만 따지는 것이다.
  • 싱글플레이 게임의 경우 틱레이트 자체가 프레임 레이트에 동기화되어 돌아가는 경우도 있어서 구별이 무의미한 경우도 많다. 그리고, 최적화를 위해 물리 엔진이나 GI등 특정 고부하 연산만 낮은 고정 틱레이트를 주는 경우도 있다.
아주 옛날 게임들이 CPU클럭을 올리면 스피드핵을 쓴 것처럼 게임 내부 시간이 빨라진다거나 # (터보 버튼 부분 참고), 폴아웃 4 (VR버전이 아닌 PC판)에서 60프레임을 넘으면 생기는 각종 버그 등이 모두 게임 디자인 상에서 의도한 통제범위를 넘어서 틱레이트가 변해서 생기는 문제이다. 현재 레드 데드 리뎀션2 pc판은 프레임이 높을수록 문제가 생긴다.(댓글들에도 여러 사례들이 언급되고 있다.) 퀘이크 3에서 특정 프레임 레이트까진 프레임이 오를 수록 가속 점프 거리가 길어지는 것도 비슷한 문제인데, 이건 알고도 당대 PC 성능상 최적화 한계로 방치했다는 점이 다르다. 이를 방지하기 위해 프레임 레이트 자체를 제한하는 경우도 있고, 이벤트 컷씬만 고정 프레임 레이트를 사용하는 경우도 있다.[1]
서버까지 라우팅 경로가 빙 둘러가는 식으로 잡혀서 쓸데없이 핑#s-1.1이 높게 나오는 문제의 경우, 미꾸라지 VPN을 통해 해결할 수 있다.

3. 사례


게임의 장르를 불문하고 다른 유저의 게임 캐릭터가 멈춰있다가 갑자기 순간이동을 하는 것, 프레임레이트가 충분히 높게 나오는데에도 불구하고 게임 캐릭터들의 움직임이 버벅이는 것 등이 대표적인 사례이다.

3.1. 스포츠 게임


  • 피파 온라인 시리즈: 피파 온라인 3 시절에 넷코드 문제로 인해 선수들의 움직임이 버벅이거나 순간이동하는 현상이 발생하였으며 중앙서버로 호스팅이 연결될 때까지 조작감이 상당히 불편하다는 비판을 받았다. 체팅 렉도 넷코드 문제로 인해 발생했던 것이다.
  • 니드 포 스피드: 엣지: 게임 중에 특정 유저의 네트워크 상태나 PC 상태가 좋지 못할 경우에 종종 차량들이 순간이동하는 현상이 발생한다.

3.2. FPS 게임


FPS 게임의 경우 넷코드에서 200ms 내외의 차이가 나는 유저들 간의 핑 편차를 중앙 서버에서 보정하지 못할 경우에는 엄페물에 막 숨었는데도 피격 판정이 뜸으로써 억울하게 자신의 캐릭터가 죽기도 하고, 자신의 캐릭터가 적군에게 먼저 사격을 했음에도 넷코드로 인해 보정된 탄착군이 자신에게 불리하게 판정되어 되려 자신의 캐릭터가 죽기도 한다. 이러한 사례로 악명높았던 게임이 배틀필드 3배틀필드 4였다.
  • 오버워치: 넷코드 문제가 두드러지는 게임 중 하나이다. 하이퍼 FPS 특유의 빠른 이동속도, 빠른 방향전환이 합쳐져서 잠깐의 핑 지연이 버그로 생각되는 상황들을 심심치 않게 연출한다. 대표적인 예로 방벽을 들어서 해킹이 실패한 줄 알았는데 성공했다던지, 분명히 머리에 맞춘 것으로 보이는데 실제론 맞지 않았다던지 하는 상황들이 있다.
  • PLAYERUNKNOWN'S BATTLEGROUNDS: 스팀 버전에서는 국내 서버가 많지 않고 대체적으로 해외 서버로 접속하게 되므로 유저들 간의 핑차이가 상당히 심해져서 배틀필드 시리즈 만큼이나 넷코드 문제가 자주 생기는 편이다. 카카오 게임즈 버전에서는 무조건 국내 서버로 접속하게 되므로 넷코드 문제를 걱정할 필요가 없다.
  • 카운터 스트라이크 시리즈: 해당 게임에서 서버의 기본 틱레이트가 66Hz로 나쁘지는 않은 편이지만, 해외 서버에서 플레이할 때에는 종종 순간이동 현상이 나타나기도 한다.

3.3. 대전 액션 게임


넷코드에 가장 민감한 게임이라면 당연히 밀리초를 다투는 대전격투게임이다 보니, 제작사나 이식팀에서 심혈을 기울여서 넷코드를 짜야 한다.
[1] PC 싱글플레이 게임의 경우 콘솔이 리드플랫폼인 게임의 PC판일 경우 많이 쓰는 방식이다. PC판 싱글 플레이의 게임 플레이 자체는 프레임 레이트 제한이 없지만, 이벤트 씬은 고정 프레임 레이트이고 이를 풀 수 있으나 버그가 발생하는 대표적인 예로 드래곤 에이지: 인퀴지션이 있다.