Game Dev – Voxel Horizon 개발 진척 상황

한동안 블로그 포스팅이 뜸했는데 그간 작업한 내용을 정리해서 올려본다. 1) 유도 미사일이 목표를 정확하게 추적할 수 있도록 코드를 수정했다. 생각보다 빡셨다. 2) 로켓탄 외에 머신건과 라이플로 복셀을 파괴할 수 있도록 했다. 3)복수의 NPC들 처리. 복수의 NPC들을 집어넣자 문제가 생겼다. 우선 접속후 절차를 살펴보면… 플레이어가 접속하면 서버로부터 플레이어 주변의 복셀 지형을 bit table로 전송받는다. 이 bit … More Game Dev – Voxel Horizon 개발 진척 상황

서버에서 클라이언트의 충돌처리와 타격 판정을 그대로 시뮬레이션 한다는 것의 의미

서버에서 클라이언트의 충돌처리와 타격 판정을 그대로 시뮬레이션 한다는 것은 단지 판정의 공정성을 높이기만 하는 것이 아니다. 클라이언트와 서버가 같은 코드를 공유하고 입력값만으로 같은 결과를 낸다는 의미이다. 즉 완전한 데드레커닝 기술을 구현했다는 뜻이다. 예를 들어 서로 다른 클라이언트 A와 B가 있을때 A가 컨트롤 하는 플레이어가 좌우로 마우스를 흔들면서 전진(sin곡선을 그리며)하는 경우, 완전한 데드레커닝 기술이 구현되지 않았을 … More 서버에서 클라이언트의 충돌처리와 타격 판정을 그대로 시뮬레이션 한다는 것의 의미

Destkop Bridge앱에서 AppData/Local 폴더 위치 얻기

게임을 실행하면 자동생성되는 부수적인 파일들이 있다. 게임의 옵션을 저장한 설정파일, shader 캐시 파일, 크래시 덤프 파일등… Windows 7시절 까지도 많은 게임들이 게임의 exe가 있는 폴더에 그대로 저장했다. 물론 이는 MS의 권고사항이 아니다. MS의 권고사항은 이렇게 폴더를 만들고 My Application폴더에 저장하는 것이다. C:\Users\{user id}\AppData\Local\{My Application} Windows 8부터는 이 권고사항이 사실상 강제되었다. 사용자가 Administrator 권한의 계정이라 해도(사실은 … More Destkop Bridge앱에서 AppData/Local 폴더 위치 얻기

CUDA사용시 MiniDumpWriteDump()실패

게임 클라이언트에서 크래시 발생시 덤프파일을 생성하도록 해놨다. 데스크탑버전은 적용이 되어있는데 UWP는 적용이 안되어있어서 UWP에도 적용하려고 데스크탑버전의 덤프생성 코드를 테스트했다. 그런데 문제 발생. 어라? 근데 덤프 생성에 문제가 있다. 덤프파일은 만들어졌지만 정상적으로 디버거에서 읽히지 않는다. MiniDumpWriteDump()함수가 실패하네? 해당 에러값으로 이틀동안 구글링을 해봐도 도움되는 답이 없다. 테스트를 하다보니 64비트에서만, MiniDumpWithFullMemory플래그를 줄 경우만 발생하는걸 알게 됐다. ’64비트는 뭐가 … More CUDA사용시 MiniDumpWriteDump()실패

Game Dev – Voxel Horizon에 CUDA적용 마무리.

오늘 메모리 사용량 최적화를 끝으로 CUDA적용은 마무리 지었다. 추가적으로 CUDA 사용이 필요할 경우 CUDA기능을 모아둔 dll라이브리에 기능을 추가하면 된다. Voxel Horizon은 라이트맵(Light map)을 사용한다. 지형지물간의 그림자도 라이트맵을 구울때 ray와 삼각형들간 교차테스트를 수행해서 계산한다. Voxel Horizon은 실시간으로 지형지물이 변화한다. 따라서 라이트맵을 다시 굽는 일이 수시로 발생한다. 네트워크로 복셀 오브젝트를 스트리밍했을때, 복셀들을 추가/삭제/편집 해서 복셀들간 지형지물이 변경될때 … More Game Dev – Voxel Horizon에 CUDA적용 마무리.

Game Dev – 패킷 전송을 위한 복셀 데이터 압축

패킷으로 전송하기 위한 복셀 오브젝트의 복셀 데이터 압축. 2월말에서 3월 초까지 작업내용이다. 나중에 블로그에 포스팅 하려고 페이스북 타임라인에 대충 메모를 해놨었다. 잊고 있었는데 오늘에서야 정리해서 포스팅한다. Voxel Horizon에서 플레이어가 게임에 접속하면 현재 위치 기준으로 주변의 복셀 오브젝트들을 긁어다가 네트워크를 통해 플레이어의 디바이스에 전달한다. 복셀 데이터는 일단 컬러값(인덱스)를 빼고 순수 지오메트리 데이터는 복셀 한칸당 1bit다. 8x8x8짜리 … More Game Dev – 패킷 전송을 위한 복셀 데이터 압축

CUDA측 Tree자료구조 메모리 줄이기.

맨날 테스트하는 복셀 1500만개짜리 맵에서 tree구조의 메모리를 71MB 소모했었다. 정확히는 node의 메모리는 얼마 안되고 말단 node(leaf)에서 들고있는 삼각형 데이터의 메모리가 대부분이다. 교차 테스트를 위해서 leaf마다 삼각형배열을 가지고 있는데 이게 메모리를 제법 차지한다. 외장 그래픽 카드를 장착한 데스크탑이나 게이밍 노트북에선 이 정도 메모리 소모는 별 문제가 아니다. 하지만 내 테스트머신중 하나인 Surface book 1은 GPU메모리가 1GB밖에 … More CUDA측 Tree자료구조 메모리 줄이기.