글 수 83
우선 말씀드릴 것은...
저는 3D엔진과 클라이언트,서버의 네트웍 모듈만 만들었습니다.
엔진은 물론이요 네트웍 모듈 역시 코룸 프로젝트만이 아닌 다른 게임들에서도 범용적으로 쓸 수 있게 만든 DLL모듈입니다.따라서 게임내용과 관련된 처리는 완전히 빠져있습니다.
해서 제가 코룸에 관련된 기술적인 내용에 대해서는 정확히 알고있지 못합니다.쏘렌토의 엔진을 납품한다고 해서 쏘렌토에 대해서 잘 알지는 못하는것처럼요.그리고 제가 안다고 해도 진행중인 게임 프로젝트의 기술적인 부분은 발설해서는 안될걸로 생각합니다.회사 재산이며 다른 문제를 유발할 수 도 있으니까요.
그래서 코룸과는 전혀 상관없이....제가 예전에 서버프로그래밍 할때 썼고 아마도 지금 다른 게임들도 상당히 많이 쓰고 있을 방식을 말씀드리겠습니다.
어떤식으로든 맵 위에서 돌아다니는 온라인 게임은 공간을 분할합니다.3D든 2D든 말이죠.분할하지 않는다면 지구 땅덩어리 끝의 A군이 한마디 하면 반대쪽 끝에 있는 B군이 A군이 하는 소리를 들을것입니다.필요에 따라선 그럴수도 있겠지만 이는 불필요한 부하를 유발하죠.
분할은 트리를 이용할수도 있고 그리드를 이용할수도 있습니다.일단 분할된 공간에 속하는 게임 개체들(이를테면 다른 플레이어)끼리는 정보를 공유할 필요가 있습니다. 같은 공간에 속한다는 것은 그 개체를 보고 있거나 관련하여 게임을 진행하고 있다는 얘기니까요.고로 같은 공간에 속하는 모든 개체들에게는 각각의 데이타를 패킷으로 날려줄 필요가 있습니다.
뭐 이 정도는 충분히 생각하고 계셨겠죠?
마을을 예로 드셨는데 제 생각엔 마을에 들어갔다고 해서 마을에 있는 다른 캐릭터들의 정보를 몽땅 보내오진 않을겁니다. 그 기준은 마을이 아니라 '플레이어의 시야영역' 혹은 유사한 다른 단위겠죠.리니지2는 접속자수가 많고 시야영역이 길기 때문에 한번에 같은 공간(추상적인 의미의)에 속하는 플레이어들이 많을것입니다. 마을에 들어가는 순간 수백명의 캐릭터를 보았다면 그들은 이미 나(플레이어)와 한 공간에 속한것이므로 그들의 데이타를 모두 받을 필요가 있는거죠.
그러나 일반적으로 다른 캐릭터들이 시시각각 상태가 계속해서 변하는 경우는, 그것도 한꺼번에 모든 상태 수치가 변하는 경우는 거의 없습니다.몇가지 항목이 시간차를 두고 변할 뿐이죠. 따라서 변화에 따른 부분적인 데이타만 갱신해주면 패킷사이즈를 크게 줄일수 있습니다.실제로 대부분의 게임은 변동분에 대해서만 패킷을 전송합니다.
요약하면 한 영역에 속했을때, 그들의 데이타를 전혀 가지고 있지 않은 상태에선 많은 패킷을 받아야 하지만, 한번 받고 나면 그들이 다른 공간으로 이동해서 사라져버릴때까지는 변동되는 데이타만 작은 패킷으로 받으면 되는 것입니다.
별것도 아닌 내용을 장황하게 설명했네요.도움이 되셨는지?
저는 3D엔진과 클라이언트,서버의 네트웍 모듈만 만들었습니다.
엔진은 물론이요 네트웍 모듈 역시 코룸 프로젝트만이 아닌 다른 게임들에서도 범용적으로 쓸 수 있게 만든 DLL모듈입니다.따라서 게임내용과 관련된 처리는 완전히 빠져있습니다.
해서 제가 코룸에 관련된 기술적인 내용에 대해서는 정확히 알고있지 못합니다.쏘렌토의 엔진을 납품한다고 해서 쏘렌토에 대해서 잘 알지는 못하는것처럼요.그리고 제가 안다고 해도 진행중인 게임 프로젝트의 기술적인 부분은 발설해서는 안될걸로 생각합니다.회사 재산이며 다른 문제를 유발할 수 도 있으니까요.
그래서 코룸과는 전혀 상관없이....제가 예전에 서버프로그래밍 할때 썼고 아마도 지금 다른 게임들도 상당히 많이 쓰고 있을 방식을 말씀드리겠습니다.
어떤식으로든 맵 위에서 돌아다니는 온라인 게임은 공간을 분할합니다.3D든 2D든 말이죠.분할하지 않는다면 지구 땅덩어리 끝의 A군이 한마디 하면 반대쪽 끝에 있는 B군이 A군이 하는 소리를 들을것입니다.필요에 따라선 그럴수도 있겠지만 이는 불필요한 부하를 유발하죠.
분할은 트리를 이용할수도 있고 그리드를 이용할수도 있습니다.일단 분할된 공간에 속하는 게임 개체들(이를테면 다른 플레이어)끼리는 정보를 공유할 필요가 있습니다. 같은 공간에 속한다는 것은 그 개체를 보고 있거나 관련하여 게임을 진행하고 있다는 얘기니까요.고로 같은 공간에 속하는 모든 개체들에게는 각각의 데이타를 패킷으로 날려줄 필요가 있습니다.
뭐 이 정도는 충분히 생각하고 계셨겠죠?
마을을 예로 드셨는데 제 생각엔 마을에 들어갔다고 해서 마을에 있는 다른 캐릭터들의 정보를 몽땅 보내오진 않을겁니다. 그 기준은 마을이 아니라 '플레이어의 시야영역' 혹은 유사한 다른 단위겠죠.리니지2는 접속자수가 많고 시야영역이 길기 때문에 한번에 같은 공간(추상적인 의미의)에 속하는 플레이어들이 많을것입니다. 마을에 들어가는 순간 수백명의 캐릭터를 보았다면 그들은 이미 나(플레이어)와 한 공간에 속한것이므로 그들의 데이타를 모두 받을 필요가 있는거죠.
그러나 일반적으로 다른 캐릭터들이 시시각각 상태가 계속해서 변하는 경우는, 그것도 한꺼번에 모든 상태 수치가 변하는 경우는 거의 없습니다.몇가지 항목이 시간차를 두고 변할 뿐이죠. 따라서 변화에 따른 부분적인 데이타만 갱신해주면 패킷사이즈를 크게 줄일수 있습니다.실제로 대부분의 게임은 변동분에 대해서만 패킷을 전송합니다.
요약하면 한 영역에 속했을때, 그들의 데이타를 전혀 가지고 있지 않은 상태에선 많은 패킷을 받아야 하지만, 한번 받고 나면 그들이 다른 공간으로 이동해서 사라져버릴때까지는 변동되는 데이타만 작은 패킷으로 받으면 되는 것입니다.
별것도 아닌 내용을 장황하게 설명했네요.도움이 되셨는지?