Voxel Horizon 개발 근황

이전에는 GPU에서 라이트 계산과 그림자처리를 했었는데 CPU에서 하는걸로 바꿨다. 복셀 오브젝트가 2만개가 넘어가니 컬링을 해도 복셀 데이터를 Shadow Map에 그리는 시간을 무시할 수 없다. 쉐도우맵 스타일의 그림자가 크게 어울리는것도 아니고 해서 CPU기반으로 바꿨다. KD-Tree traversal로 복셀 최소단위 50x50cm 한 면씩 라이트/그림자 처리를 수행한다. 멀티스레드로 처리하고 한방에 맵 전체를 처리하거나 중간중간 복셀 데이터의 변동분에 대해서 최대 … More Voxel Horizon 개발 근황

Game Dev – Geometry Shader포기

처음 만들때 복셀 오브젝트의 디테일을 1x1x1부터 8x8x8까지 선택해가며 배치할 수 있게 했었다. 플레이어가 비교적 정밀한 구조물을 제작할 수 있게 하면서도 복셀의 구성 상태가 실제로 정밀하지 않다면 자동으로 1x1x1짜리 오브젝트로 변환하려고 이렇게 만들었다. 메모리를 아끼기 위해, 복셀의 구성상태는 bit-table을 사용한다. 8x8x8짜리 복셀오브젝트라면 복셀 한칸당 1비트를 할당해서 8x8x8 / 8 bytes의 bit-table을 만든다. 복셀의 컬러값은 따로 저장해두는데 … More Game Dev – Geometry Shader포기

간만에 DX11 vs DX12 관련 잡설

DX12엔진 작업하느라 DX11엔진은 한동안 방치상태였는데 요 근래 Hololens 작업하면서 DX11엔진을 집중적으로 뜯어고쳤다. 그 와중에 약간의 최적화도 이루어졌고 기능도 추가됐다. DX11엔진의 변경분을 DX12엔진에 반영하면서 HLSL Shader코드를 똑같이 맞췄다. DX12에서 특별한 기능 추가된게 거의 없기 때문에 일반적으로 쉐이더코드는 그냥 공유한다. MS샘플도 그렇게 되어있다. 나도 최대한 공유하고 싶었다. 하지만 DX12엔진 작업할때 Constant Buffer 메모리 관리가 워낙 빡세서 이걸 좀 … More 간만에 DX11 vs DX12 관련 잡설

최근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년간 만든것들. 생각나는대로 정리해봄.

Engine Dev – Deferred Shading적용

D3D12엔진을 Forward Shading에서 Deferred Shading체계로 바꿨다. 아니 정확히는 Lighting은 Forward로 두고, 그림자 처리는 Deferred로 바꿨다. 부분적이지만 Deferred Shading으로 바꾼 이유는 대량의 Voxel을 출력할때 self-shadow를 적용하면 forward에선 와장창 느려지기 때문이다. 사실상 상당히 많은 voxel들이 가려져서 보이지 않음에도 불구하고 보이지 않는 voxel들까지도 depth-test를 하고 있는게 꽤 심각한 성능저하를 가져왔다. 이 부분은 Deferred Shading으로 바꾸고 확실한 속도향상을 기대하고 있다. … More Engine Dev – Deferred Shading적용

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 편집 가능

Game Dev – Voxel 편집 기능 추가

최근까진 자잘한 UI기능을 추가하느라 시간을 보냈다.서버 연결을 위한 UI가 필요했는데 콘솔만으로는 내가 너무 불편해서 버틸수가 없었다. 그래서 그쪽 작업을 하느라 편집기능 추가가 계속 늦어졌다. 이 프로젝트에선 개별 복셀들을 바로 트리구조에 넣는 대신, 최대 16x16x16개의 복셀을 가지는 오브젝트들로 구성한다. 오브젝트 안에서는 복셀들을 Octree구조로 가지고 있다.그리고 이 오브젝트들은 월드상에서 KD-Tree로 관리된다. 이렇게 한 이유는…마인크래프트 같은걸 만들려던게 아니고 … More Game Dev – Voxel 편집 기능 추가