게임에서 유저들 간의 핑차이를 보정하기 위하여 진행되는 일련의 네트워크 동기화 과정을 뜻한다. 유저들이 중앙 서버에 접속해서 플레이하는 게임들에서는 중앙 서버가 넷코드의 주체가 되고, 유저들 중에서 한명이 호스팅 역할을 맡는 P2P 방식에서는 해당 방장이 넷코드의 주체가 된다.
게임을 플레이하는 유저들의 접속 지역은 제각각 다른 경우가 많고 이는 결국 넷코드 주체로부터 이벤트 세션을 갱신하는 과정에서 유저마다 제각각 다른 시차가 발생하게 된다. 이것이 게임 내에서의 승패와 유저의 게임 진행에 큰 영향을 미치게 된다.
이와 같이 넷코드에서 일어나는 모든 문제들을 넷코드 문제 (Netcode Issue)라고 한다. 넷코드 문제에다가 핵 문제까지 겹치게 되면 게임 한판이 정말 불쾌해지고 재미없어진다.
하지만 넷코드의 가장 근본적인 원인은 물리적인 거리로 인한 네트워크 지연시간이므로 랜파티처럼 물리적인 거리를 줄이지 않는 한 유저나 서버 관리자가 해결할 수 있는 것은 없다. 넷코드는 '어쩔 수 없이 생기는 온라인 렉을 어떻게 처리할까'에 대한 방법이다.
모든 client가 1개의 전용server를 중심으로 data를 주고받는다.(Client - Server구조 기반)
현재 MMORPG나 Online Game의 24시간 돌아가는 선택형 server가 대표적인 예
작동방식은 Client(User)가 field에 있는 상대방(다른 clinet, user)을 공격했다고 하면
공격했다는 data를 server에 보내게 되고 server에서 피격판정, 미스판정을 확정하여 다시 모든 client에게 보내게 된다.
즉 server가 게임 대부분의 판정을 처리한다.
장점
Client의 모든 data의 감시가 가능하다.
Online game에서 불법프로그램을 사용하여 game을 진행한다면 전용server log에 기록이 되고 추후 user들의 신고에 의해 log확인 후
불법 프로그램 사용자가 block처리 되는것처럼 모든 client의 data 감시가 가능하다.
일부 패치등을 추가시킬 경우 한번만 전용server에 upload 시키는것으로도 모든 client의 data를 update시킬 수 있다는 장점이 존재한다.
단점
전용server인 만큼 DDOS와 같은 공격을 당하여 server가 다운되면 모든 client가 전용server에서 data를 주고받을 수 없다.
핑이 높은 user는 data처리의 결과와 수신이 늦어 불리해진다.
예를들어 전용 server가 미국에 있고 한국 user(핑 200 ~ 250ms) 와 미국 user(핑 50 ~ 100ms)인 user끼리 전투를 할때
한국 user가 먼저 미국user을 공격하더라도 응답속도가 빠른 미국user가 먼저 공격에 대한 결과를 받게 되므로
한국user가 먼저치고 미국user가 먼저맞고 반격을하더라도 Ingame에서는 미국user가 먼저 때린것으로 처리된다.
즉 순간적인 응답속도가 중요한 FPS game이나 대전 격투 game에서는 알맞지 않다.
Client이면서도 Client가 Server인 개념
이런식으로 user끼리 서로에게 data를 보내주어 처리하고 처리된 data를 받는것도 동시에 한다.
그러므로 인원을 모아 game을 할때 ping이 심하다는 느낌을 받지 않는 이유가 이러한 이유이다.
격투게임은 60프레임으로 만들어지며 1프레임 = 16ms이다.
오프라인 환경
오프라인에서 대전한다면 당연히 서로가 그 어떤 온라인 렉없이 원하는 타이밍에 입력이 된다.
온라인 환경
온라인이 되면 물리적 거리 때문에 정보를 보내는데 항상 시간이 걸리게 된다.
온라인은 더이상 원격 플레이어의 입력 정보와 본인의 입력 정보가 일치하지 않게 된다.
이 때 등장하는 것이 '핑' 이다. 핑은 사용자의 정보가 다른 플레이어에게 전송되고 다시 사용자에게 돌아오는데 걸리는 시간을 말한다.
예를 들어 핑이 90ms인 연결에서 반대편에 도달하는데 평균 45ms가 걸리고 이건 서로 약 3프레임 차이가 생긴다는걸 뜻한다.(16ms = 1프레임)
※ 핑은 사용자의 정보가 다른 플레이어에게 전송되고 다시 사용자에게 돌아오는데 걸리는 시간을 말한다.
딜레이 넷코드는 서로의 입력 정보에 렉을 추가해서 처리한다.
예를 들어 90ms핑 연결의 딜레이 넷코드라고 가정하면 내 정보가 상대방에게 도달하는데 평균적으로 45ms(3프레임)만큼 걸린다.
그래서 각 플레이어가 입력을 누르면 3프레임만큼 딜레이가 걸려 게임상에는 3프레임 째에 입력이 나오게 된다.
단점
'버튼을 누르고 3프레임 뒤에 나온다고?' 라는 반응이 자연스럽게 나올 것이다.
물리적으로 거리가 조금만 멀어도 내가 버튼을 누른 한참 뒤에 반응하는 물 속에서 게임 하는듯한 매우 답답한 느낌을 받게된다.
하지만 물리적으로 거리가 가까우면 매우 작은 딜레이가 걸리기 때문에 인간의 감각으론 차이를 못느낀다. 국내 철권7에서는 매칭이 대부분 국내로 한정돼서 물리적으로 가까운 유저끼리만 게임을 했기 때문에 크게 느껴지지 않았지만, 미국이나 유럽같이 인구밀도가 낮고 물리적 거리가 큰 곳에서 본격적으로 시작된다.
이런 문제점을 해결하고자 나온게 롤백 넷코드다.
-> 먼저 행동 하고 문제는 나중에 해결하자
위와 같이 3프레임의 온라인 렉이 있는 상황을 예로 들자.
P1(본인)과 P2(상대방)는 1프레임 째에 버튼을 눌렀다
P1의 입력은 1프레임 째에 곧장 반응했다.
P2의 입력은 1프레임에 아무 것도 하지 않았다고 '예측'했다
온라인 렉 때문에 3프레임 늦게 정보가 도착했다.
정보가 도착한 4프레임 쨰가 되었을때 실제 P2의 입력 정보와 '예측'한 정보가 달라 '롤백'되어
1프레임 째의 과거를 수정하고 다시 시뮬레이션하여 현재 프레임까지 진행된다.
이 모든 것이 1프레임 내에 즉시 발생한다. 이 계산과정은 매우 빨라
일련의 장면들을 유저는 알아채기 힘들다.
예측과정에서 이 롤백 넷코드가 좋은지 안좋은지가 판가름난다.
위에서 봤듯이 롤백 넷코드는 서로의 입력에 어떤 관여도 하지 않기 때문에
누르고 잠시 뒤에 반응하는 일 없이 쾌적하게 게임할 수 있으며
딜레이 넷코드보다 훨씬 먼거리의 사람과 쾌적하게 게임이 가능해진다.
딜레이 넷코드는 민감한 사람이라면 40ms~60ms(한국-일본) 핑조차 크게 느껴지는데 반해
좋은 롤백 넷코드는 100ms~120ms(한국-미국 서부) 넘어서도 꽤 쾌적한 게임 플레이가 가능해진다.
(당연히 오프라인 같이 완벽한 게임상태는 아니다)
모퉁이 뒤에서 나타난 적이 달리는 중인데도 정확하게 사격하는 것처럼 보이는 상황
계산식: <상대의 클라이언트 프레임률> + <상대의 단방향 네트워크 지연> + <서버 프레임률> + <플레이어의 단방향 네트워크 지연> + <네트워크 보간 지연>
여기서 일부 수치는 고정되어 있습니다.
네트워크 보간 지연 = 7.8125밀리초 (화면에 출력되는 적의 위치가 부드럽게 바뀌도록 해주는 작업에서 발생하는 지연 시간입니다. 인터넷 연결이나 대역폭이 이상적이지 않으면 설정 화면에서 ‘네트워크 버퍼링’으로 조정할 수 있습니다.)
서버 프레임률 = 7.8125밀리초 (1/128초, 128틱 서버)
다른 수치는 가변적입니다.
단방향 네트워크 지연은 게임 서버의 위치, 플레이어와 상대의 지리적 위치, 라이엇 다이렉트의 라우팅 경로에 따라 달라집니다. 지연 시간이 17.5밀리초 미만인 플레이어가 전체의 70%를 차지하는 수준을 목표로 하고 있는데요. 클로즈 베타는 테스트와 개선을 위한 시간이며 현재 목표 달성에 점점 가까워지는 중입니다.
클라이언트 프레임률은 사용하시는 컴퓨터의 속도에 따라 다르며 프레임률 최적화를 위해 개발자로서 할 수 있는 노력을 다하고 있습니다.
위의 수치를 모두 더하면 각도를 확보한 플레이어가 상대에게 접근할 때 우위를 누릴 수 있는 시간이 나옵니다. 해당 시간 동안은 상대에게 보이지 않는 채로 상대를 볼 수 있습니다.