yuchi's Development Home


멀티플 클라이언트 제작

조회 수 4298 추천 수 144 2008.04.01 16:57:02


mmorpg프로젝트다보니 이래저래 작업을 하다보면 클라이언트를 몇개씩 띄워야할 때가 많다.

메모리를 100메가가 넘게 쳐먹는 클라이언트를 여러 개 띄우려면 꽤나 짜증이 난다.

일단 옆에 둔 노트북이 큰 도움이 되긴 하지만서도.

로딩시간도 그렇고 화면이 계속 갱신되는데다, 마우스랑 키보드 컨트롤 게임이다보니 디버깅 하려고 콘솔을 조작하면 게임 상태도 계속 영향을 받는다.

해서 한 프로세스로 여러 개의 클라이언트를 시뮬레이션 해주는 놈을 만들기로 결정.

멀티플 클라이언트라 이름지었다.

대충 레이아웃은 잡았고 기본접속 테스트 및 이동처리, 화면에 디스플레이 기능까지 구현하고 스샷으로 찍었보았다.

아직 UI가 완벽하진 않지만 스페이스바를 누를때마다 가상클라이언트를 새로 만들어서 서버에 접속시킨다.

우측 창에는 현재 띄워져있는 가상클라이언트 리스트가 출력된다. 캐릭터별로 존재하는데 셀렉트 해주면 해당 가상 클라이언트가 active된다.

이에 따라 좌측의 맵 뷰에도 active된 클라이언트의 상태가 디스플레이 된다.

터미널 클라이언트나 vmware로도 사용할 생각이므로 3D 그래픽은 사용하지 않았다. 즉 엔진의 렌더러는 NULL디바이스를 사용했다.

그렇지만 이동처리와 충돌처리,타격판정등은 게임 그대로 시뮬레이션 해야하므로 내부적으로는 서버와 같이 3D엔진의 4DyuchiGXGeometry30.dll을 그대로 사용한다. 출력만 2D다.

보기엔 허접해보이지만 내 프로그래밍 기술은 다 들어갔다.

1. DDraw와 0번압축 스프라이트 처리
2. IOCP 네트웍 모듈
3. 3D엔진
4. MFC

있던 기술 써먹은 것과는 별도로 엔진에 추가한 중요한 기능이 있는데 [씬그래프 자료구조 공유] 기능이다.

게임플레이에 필요한 3D데이타를 얼마나 공유시키느냐 하는 것은 서버에서 인던 구현시 메모리 사용량과 밀접한 관련이 있다.

마찬가지로 멀티플 클라이언트에서도 몇 개의 클라이언트를 시뮬레이션 할 수 있을지는 메모리 사용량에 달려있다.

충돌검출이나 타격판정에 필요한 3D데이타는 렌더러 유무에 상관없이 씬그래프에서 관리된다. 씬 그래프의 자료구조를 공유할 수 있다면 상당히 많은 수의 씬그래프를 복제해서 만들어도 메모리 사용량은 크게 증가하지 않는다.

이 기능이 멀쩡하게 동작한다면 서버에서의 인스턴스 던젼과 멀티플 클라이언트 모두 구현 가능한 것이다.

따라서 씬그래프의 대부분을 공유할 수 있음을 멀티플 클라이언트로 증명해야했다.

새로운 씬 그래프가 기존의 씬 그래프를 복제할때 BSP트리와 ROOM/PORTAL 구조는 COPY하도록 했고, 가장 메모리를 많이 먹는 충돌처리 구조는 모듈 그대로를 공유시켰다(AddRef(),Release()사용)

몇일동안 삽질했지만 현재는 잘 작동한다.

맵 하나 더 생성(씬그래프 공유를 이용해서)할때마다 평균 3MB이내로 소모하므로 원래 목적도 충실히 달성한 편이다.

다시 멀티플 클라이언트로 돌아와서, 이제 한 50% 만든거 같은데 코딩량이 엄청나게 많고 테스트도 많이 해야해서 꽤 애먹고 있다.

기술적인 난이도가 높은 것보다도 시간에 비해 구현해야할 기능의 양이 너무 많다.

MFC와 현재 CS구조에 능통한 사람이 있다면 맡겨버리고 싶은 심정이다.

목요일마다 개밥먹는게(전체 테스트)가 상당한 장애요인으로 작용하고 있다.

목요일 테스트를 하려면 수요일엔 전체 빌드를 위해서 데이타를 취합하고 자잘한 버그 잡고 테스트를 해야한다.

코딩에 집중할 수 있는 날은 월,화,금 뿐이다. 이것도 다른 문제가 없을때 얘기지.

휴..하여간 짜증나서 돌아버릴거 같은 상황을 어떻게든 극복하며 멀티플 클라이언트를 완성해가고 있다.

이게 제대로 돌아가면 이놈을 이용해서 인스턴스 던젼 구현으로 들어간다.



댓글 '2'

^____^

2008.05.15 10:18:26
*.29.249.44

우와...멋져요~~~

클라이언트 여러개 띄우고 디버깅 하려면...뉴_뉴


완전 매력있는 작업을 하고 계시네요...


핵심은 씬그래프 자료구조 공유인가봐요...




오늘도 화이팅입니다~~~!!!!!!!!!!!!!!!!

여치

2008.05.15 12:09:19
*.230.160.222

네. 씬그래프 자료구조 공유가 핵심입니다.
찾아주셔서 감사합니다.
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet