최근3년간 만든것들. 생각나는대로 정리해봄.

최근3년간 만든것들. 생각나는대로 정리해봄. 내가 하는 짓이 얼마나 마이너한 짓인지 확인하고 싶어서 적어봄. CUDA 응용 (Processing collision in Game, Baking Light-map, etc…) – nvidia CUDA SDK + C++ https://doc.co/xKcRcB OneDrivePlayerW81 (OneDrive의 음악파일들의 재생목록 생성/저장/플레이, 백그라운드로 재생목록의 곡들을 다운로드해서 곡 넘어갈때 끊김없이 플레이해줌.) – for Windows 8.1 WinRT: WinRT API + CPP RESET SDK + C++/CX … More 최근3년간 만든것들. 생각나는대로 정리해봄.

나오기만 하면 살건데 이 게임 왜 안나와?

게임, 특히 온라인 게임, HTTP 리퀘스트 날려서 점수 세이브 하는 게임 말고, 소켓 통신하는 고전적인 의미의 온라인 게임, 그중에서도 수백 수천명 이상이 한 게임 공간에 접속하는 온라인 게임-mmorpg의 개발은 어렵다. 어렵다 내가 다녔던 모 회사의 경우 1년 반만에 게임을 찍어낸 경우도 있었지만 이미 만들어진 네트워크 라이브러리,게임엔진,서버와 클라이언트의 통신체계,맵툴,DB구조 다 있었고 그저 스킨과 숫자를 바꿨을 뿐이었다. … More 나오기만 하면 살건데 이 게임 왜 안나와?

Debugging – App의 명시적 종료의 필요성

적어도 디버그 빌드에 한해서라도 어플리케이션은 반드시 명시적 종료가 있어야한다. 명시적 종료 상황에서 힙을 비롯한 모든 리소스가 완전하게 해제되었는지 체크할 수 있어야 한다. 무엇보다 heap이 손상되었는지를 체크할 수 있어야한다. 명시적 종료할때 이걸 체크하지 않으면 눈에 띄지 않는 버그가 계속 쌓임. 시한폭탄임. 실제로 내가 만들던 게임 서버에서 그런 사건이 있었다. 사내 테스트 하루 전날 팀 내 플레이 … More Debugging – App의 명시적 종료의 필요성

SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling

요 근래에 Voxel 오브젝트 컬링을 위해 SW Occlusion Culling을 사용한다고 포스팅 했었다. SW Occlusion Culling이라봐야 별거 없다. 잠깐 그 내용을 상기해보면… CPU측에서 사용할 수 있는 Z-Buffer(그냥 32bits float타입의 메모리 버퍼)를 잡는다. Voxel오브젝트의 Min박스의 z값을 그린다. z값이 기존 값보다 작거나 같을 경우만 덮어쓴다. 이후에 테스트할 다른 Voxel오브젝트의 Max 박스의 z값을 z-buffer의 값과 비교한다. 기존값보다 z값이 작으면 … More SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling

Clipping Triangle for SW Occlusion Culling

어제 x:-1 – +1, y:-1 – +1, z:0 – +1 볼륨에 대해 삼각형 클리핑 코드를 완성했고 잘 작동함을 확인했다. 그런데 카메라 돌리다보면 삼각형이 사라지거나 원래 삼각형의 빗면과 같은 기울기로 엉뚱한 곳에 삼각형이 나타나는 현상이 발생함. 원인 찾느라 엄청 해맸다. [원인] 커다란 삼각형의 점 일부가 카메라 뒷쪽으로 가는 경우, 프로젝션하고 보면 w값이 음수가 나옴. 이 경우 … More Clipping Triangle for SW Occlusion Culling

SW Occlusion Culling

아직 완전하지는 않지만 엔진에 SW Occlusion Culling기능을 넣었다. 물론 HW Occlusion Culling이 가능하다. Compute Shader를 이용한 HW Occlusion Culling과 D3DQuery를 이용한 HW Occlusion Culling기능도 이미 오래 전에 만들어놨다. 그런데 왜 SW Occlusion Culling기능을 따로 만들었는가..하면 렌더링을 위해 KD-Tree를 탐색하며 뷰프러스텀에 들어가는 복셀 오브젝트들을 탐색한다. 뷰프러스텀에 들어가는 오브젝트만 골라내도 사실 그 수가 적지 않다. 트리 순회 … More SW Occlusion Culling

Object Culling #1

네트워크 플레이의 기본 구조는 제대로 구현했다. 이제 플레이 가능한 속도를 보장할수 있도록 오브젝트 컬링을 위한 작업에 들어갔다. 우선 월드를 KD-Tree로 분할해서 복셀 오브젝트들을 집어넣었다. 뷰프러스텀에 들어가는 오브젝트를 찾을때 상위노드부터 제거하므로 탐색 효율은 확실히 좋아졌다. 하지만 이것만으론 많이 부족하다. 역시 가려진 오브젝트를 그리지 않도록 하는것이 가장 중요하다. 예전에 사용했던 Room/Portal/BSP방식도 이번엔 사용할 수 없다. 지형이 실시간으로 … More Object Culling #1

Game Dev – XBOX ONE(UWP버전)과 PC의 네트워크 플레이

이전에도 계속 포스팅했다시피 난 이 게임(데모)를 Windows Store를 통해 공개할 생각이다. 따라서 엔진을 개발할때부터 UWP버전을 같이 작업해왔다. 그리고 가능하면 XBOX ONE과 Windows 10 Phone에서도 동일한 게임을 플레이하게 하려고 나름 노력하고 있다. 몇 개월전 MS는 하나의 Store를 강조하며 XBOX ONE에서 UWP App을 돌릴 수 있게 하겠다고 발표했다. 얼마 지나지 않아서 프리뷰지만 XBOX ONE에서 UWP App을 돌릴 … More Game Dev – XBOX ONE(UWP버전)과 PC의 네트워크 플레이

Game Dev – 온라인으로 Voxel 편집 가능

서버에 복셀 편집 기능과 복셀 오브젝트 관리 기능을 넣었다. [클라이언트 A] -> (복셀편집 요청) -> [서버] -> 서버에서 처리 -> 복셀 변경사항 broadcast -> [클라이언트 A,클라이언트 B…] 이런식이다. 로그인 후 맵 전체의 복셀데이터를 한번에 받아올 수는 없다. 너무 양이 많다. 지금 테스트 데이터로는 얼마 안되지만. 그래서 네트워크 브로드캐스팅 단위인 Sector-Grid를 이용한다. 맵 전체는 2차원 그리드로 … More Game Dev – 온라인으로 Voxel 편집 가능