GameDev – Voxel Horizon – 백그라운드 컬러 테이블 RLE압축 in Server

VoxelHorizon_2017_0616_color_table_compress서버에서 복셀 오브젝트의 정보를 패킷으로 날릴때마다 컬러테이블을 RLE압축하는건 아무래도 낭비. 최초 접속시 캐릭터 위치 기준으로 오브젝트를 1700개나 받아가는데 아무리 간단한 코드라도 1700번이나-그것도 싱글스레드로- 돌게 할 순 없다.

따라서 다음과 같이 처리한다.

1.복셀의 기하구조가 바뀌거나 컬러테이블 정보가 바뀌었을 경우, 복셀 오브젝트를 ‘컬러테이블->RLE압축’을 위한 업데이트 링크에 넣는다.

2. 매니저에서 일정 시간마다 업데이트 링크에 들어있는 오브젝트들에 대해서 컬러테이블을 RLE압축해둔다. 여러개 오브젝트들에 대해서 멀티스레드로 한꺼번에 왕창 수행한다.

3. 복셀 오브젝트의 정보를 패킷으로 날리거나 파일에 세이브하거나 할때 RLE컬러 테이블이 최신으로 갱신되어있는지 확인한다.
갱신되어있다면 저장해둔 RLE스트림을 전송할 버퍼에 그대로 카피한다.
갱신되어있지 않다면(복셀 오브젝트 매니저의 순회 시간 사이에 걸린 경우) 그 자리에서 RLE 컬러 테이블을 갱신하고 버퍼에 카피한다.

4. 이후에 복셀 오브젝트의 기하구조나 컬러테이블이 변경되지 않으면 이전에 만들어둔 RLE컬러테이블을 그대로 사용한다.

코드짜고 클라이언트측에서 테스트한 후 서버에 적용했다. 잘 작동한다. 서버와 클라이언트가 같은 엔진을 사용하는 경우 이게 좋다. 클라이언트에서 수정한건 서버에도 반영,서버에서 수정해도 클라이언트에도 자동 반영.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중