VOXEL HORIZON – 복셀 오브젝트 회전 기능 구현중

복셀 회전시키는게 뭔 대수인가..하겠지만.
이게 생각보다 빡신 이유는 다음과 같다.

  1. 복셀 오브젝트는 변환매트릭스를 항시 들고 있어 손쉽게 변환되는 동적 오브젝트가 아니다. 완전히 정적이다.
  2. 따라서 변환이라고 하지만 구조물을 깨고 다시 만드는 작업이다.
  3. 부수고 다시 만드는 작업이기에 OK를 누르면 되돌리기 어렵다. 따라서 유저에게 반드시 프리뷰를 제공해야한다. 여기서 작업량이 대폭 증가한다.
  4. 서버 및 다른 클라이언트와 동기화 되어야 하므로 부수고 다시 만드는 작업의 성능이 중요하다. 어쨌든 서버에서 작업이 완료되고 나서 클라이언트에 적용되어야 한다.
  5. 2가지 선택이 있다.
    • 클라에서 회전하고 복셀 오브젝트를 제거하고 새로 생성하는 패킷을 만들어서(이하 복셀 업로드 기능이라 부름) 서버로 보낼것인가. 이 경우 기존에 작성한 복셀 업로드 기능고 완전히 같다. 서버는 패킷을 받아서 서버측 메모리를 갱신하고 그 내용 그대로 다른 클라이언트에 브로드캐스팅 한다.
    • 프리뷰로 확인 후 파라미터(회전축,회전각,피봇점)만 서버에 보내면 서버에서 회전을 처리하고 복셀 업로드 기능을 이용해서 클라이언트에 브로드캐스팅한다.
  6. 클라이언트에서 회전을 시키고 이를 복셀 업로드 패킷으로 만들어서 서버에 보내면 회전작업 자체의 부하는 문제가 되지 않는다. 반면 클라측에서 패킷을 조작할 해킹 취약점으로 작용한다. 압축을 풀고 서버에 복셀 오브젝트를 생성/삭제할때 서버 메모리를 손상시킬 수 있다. 사실 이는 기존 복셀 업로드 기능도 마찬가지인데 이 부분의 검증을 미뤄두고 있었다.
  7. 따라서 복셀 업로드 패킷에 대해 데이터가 무결한지 검사하는 코드를 추가해야 한다. 검증하는 비용은 서버에서 직접 회전처리를 하는 비용보다 저렴한가?(더 빠른가?)
  8. 서버에서 직접 회전을 처리할 경우 처리 시간에 오래 걸리면 게임 전체의 응답성(이동/전투처리)이 떨어진다. 복셀 오브젝트 회전에 얼마만큼의 시간이 소요되는가? 서버에서 처리하기에 충분히 빠른가? 이를 검증해야한다.
  9. 결국 해야할 일이 다음과 같다.

a. 복셀 오브젝트 회전 기능에 대한 프리뷰 기능 제공.

b. 복셀 회전 코드를 클라/서버 양쪽에서 모두 사용할 수 있는 형태로 가공.

c. 복셀 오브젝트 회전에 대한 프리뷰 상태를 복셀 업로드 패킷으로 만드는 기능.

d. 복셀 업로드 패킷에 대한 검증 코드 구현.

e. 복셀 오브젝트 회전/업로드 패킷에 대한 검증 에 걸리는 비용 측정.

f. 비용이 생각보다 클 경우 최적화 가능한지 여부 확인. 가능하다면 최적화.

e. 최종적으로 서버에서 회전처리를 직접할지, 클라에서 변환하고 서버에 복셀업로드 패킷으로 보낼지 결정.

이거 다 하느라 오래 걸렸다. 현재 마지막 e단계.
현재 복셀 오브젝트 변환에 걸리는 시간은 release빌드 기준 0.08ms수준.
서버에서 회전처리르 직접 하는 방향으로 60%쯤 기울었다.


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중