1/60초 단위로 동기화를 해줘야 하는데
핑 시간도 고려를 해줘야 하잖아 (....)
핑이 17ms라도 받은 데이터를 타이밍 칼같이 맞춰서 업뎃하는 게 쉽지 않을텐데
ㄹㅇ 진짜 어케 한거냐
팩토리오 개발자들은 무시무시한 내공을 쌓았을꺼야... 덜덜덜
1/60초 단위로 동기화를 해줘야 하는데
핑 시간도 고려를 해줘야 하잖아 (....)
핑이 17ms라도 받은 데이터를 타이밍 칼같이 맞춰서 업뎃하는 게 쉽지 않을텐데
ㄹㅇ 진짜 어케 한거냐
팩토리오 개발자들은 무시무시한 내공을 쌓았을꺼야... 덜덜덜
그거 변화만큼을 보내서 데이터 크기를 줄인것도 있고 각자 시뮬레이션을 하는데 시뮬레이션에 들어가는 각종 변수나 수치들을 전부 동기화 시켜놔서 해결함 그래서 멀티 접속할때 맵 다운로드하고 들어가는중 하면서 재동기화 하는거임
ㅇㅇ 재동기화는 이해가 가는데 플레이 중에 핑 17ms 넘어가면 또 재동기화 해야하잖아 무시무시한 동기화 ㄷㄷㄷ
진짜 지구반대편이랑 동기화는 어떻게 해먹는건지 신기해
그 거리는 못해... 렉 개쩐다에요...
무친 공돌이놈들.....
동기이이이이잇 하는듯
ㄹㅇㅋㅋㅋ
그정도로 어려운건 아니야. 방장 기준으로 다른사람이 보는 화면은 17ms정도 과거의 화면임. 글고 총겜마냥 빠릿하게 하는겜도 아니라서 가능함
하긴 총껨도 하는데 어떻게든 되게 만들었겠지
빛의 속도는 넘을 수 없어서 지구 반대편에 접속하면 2~300ms 정도 레이턴시가 생길 수밖에 없음. 완전 동기화는 불가능하고 15틱씩 오차가 나온다는 말. 팩토 개발자들이 한 거는 실제 동기화가 아니라 동기화 된 것처럼 보이게 만드는 눈속임임. 즉 실제 엔티티의 위치랑 그 엔티티의 그래픽이 있는 위치가 다름. 그래픽은 클라쪽에서 바꿀 수 있는데 엔티티의 위치 자체는 서버 쪽에서밖에 못 바꿈. 그래서 그 300ms 사이에 뭐가 바뀌면 고무줄처럼 원래 위치로 돌아오는거.
오오오오오오오오 상세한 설명 감사합니다
온라인 게임이 다 그렇지 뭐 보통 서버에선 정상적으로 돌아가고 클라에선 정상적으로 보이려고 노력하는데 클라-서버 간에 뭔가의 오류가 있다면 클라를 어거지로 맞추는 느낌
그 수밖에 없겠구먼...
락스텝(lockstep)이라는 동기화 기법임 찾아보면 재밌어할듯 - dc App
ㅇㅇ 저번에 찾아봤는데 결국 핑 17ms 넘어가면 1틱 안으로는 무슨 수를 써도 동기화가 불가능하잖아 이걸 처리하는 방법이 있어야 할텐데 윗게이는 '눈속임'이라고 하네 뭐 동기화 어긋났을 때 사람이 짬-뿌 하게 만들고 메인 서버의 데이터를 기준으로 강제 동기화 걸어버리면 어떻게든 되긴 할듯
@안전조아 1틱 이내로 동기화를 못하는건 플레이어의 상호작용 뿐임. 나머지는 그냥 규칙대로 돌아가는 것일 뿐이라 가능.
@ㅇㅇ(218.52) ㅇㅇ 그럴 거 같긴 하더라. 상대방이 쫌 날라다니거나 빌딩 까는데 충돌나면 한쪽 말은 안 들어주는 식으로 구현할 수밖에 없읃릇
팩토리오처럼 동기화 하는 게임 엄청 많은디? 비슷하게는 스타크래프트도 그렇게 하고 있고 찾아보면 많음
저번에도 같은 글 올렸어서 갤럼들이 얘기 많이 해줬던거 같은데
ㅇㅇ 아니 근데 결과적으로 17ms 넘어가면 문제는 생길 수밖에 없어서... 가령 핑이 200정도 되고 같은 위치에다가 서로 다른 건물을 설치하면 결국 경합이 일어나고 한쪽의 명령은 취소가 되어야 한단 말이잖아. 이걸 결정하는 알고리즘이 필요하긴 하지 생각해보니까 fps도 하는 마당에 팩토리오 동기화 못할 거 같진 않긴 하다 ㅋㅋㅋ
@안전조아 넘어가는 경우에는 보통 서로의 지연시간이 얼마나 되는지를 파악하고 플레이어의 입력이 실제 게임으로 반영되기까지 그만큼의 지연시간을 둠.
@안전조아 예를 들어 내가 서버와 핑이 100ms인데 벨트를 깔면 이 사실이 서버로 전달되기까지의 시간, 그리고 서버에서 다시 각 플레이어들에게 정보를 전달하는 시간까지 다 해서 200ms 정도 늦게 반영해주면 모든 플레이어들에게 동시에 반영이 되겠지. 이게 전형적으로 스타크래프트에서 해결하는 방법임. 이보다 더 빠르게 하고 싶다면 일단 컴퓨터에서 선적용해두고 그 뒤에 일어나는 작업을 서버에서 적당히 무마해서 해결함. 이런 경우엔 서버에서 처리를 거부하는 경우에 플레이어의 행동이 뒤로 되돌아가는 경우가 있음. 마크나 일반적인 온라인겜들이 이렇게 함.
@안전조아 만일 그것보다도 훨씬 더 빠르게 하고 싶으면 각 컴퓨터의 시간 정보를 1ms 단위로 아주 정밀하게 동기화를 해두고 그 타임 정보를 토대로 실제 사건이 일어난 순서를 서버에서 추론해서 처리하기도 해. 이런 경우는 핵에 좀 취약해진다는 단점이 있음.
@ㅇㅇ(218.52) ㅋㅋ 상세한 설명 감사합니다. 찾아보니까 그렇게 선딜레이 두는 경우도 있고 각종 다양한 방법들이 있더라고 하기야 뭐 게임 동기화 해결한다고 겁나 똑똑한 사람들이 머리 싸매고 온갖 방법 다 만들었겠지 ㅋㅋㅋ
@안전조아 이런 것도 나름 업계 테크닉이라 실무하다보면 진짜 별의별 문제를 다 겪고 해결법을 찾게 됨 ㅋㅋ
핑 500대급 나오는 외국서버 가보면 어떻게 작동하는지 꽤 직관적으로 보이는데, 벨트를 까면 벨트가 바로 깔리긴 하는데 연결도 작동도 안되다가 한참 있다가 제대로 깔림 ㅋㅋ - dc App
벨트 드르륵 깔면 드래그한데까지 모양은 깔리는데 인벤토리에서 아이템이 늦게나가서 깔린 행동이 취소되는 경우도 종종 있음 - dc App
ㅋㅋㅋㅋㅋㅋㅋㅋ 그렇지 그렇게 처리해야 말이 되지. 설명해줘서 고마웡!
https://www.factorio.com/blog/post/fff-302
이거
봤는지 모르겠네
오. 감사감사. 이런 거 너무조아. 이게 야쓰지