GameDev – Creating Voxels from Triangle Mesh.

기본적으로 플레이어가 구조물을 만드는 게임(?)이지만 역시 맵상에 아무것도 없으면 막연하겠지. 그리고 개발중에 테스트하려면 대량의 복셀이 배치된 맵이 필요하다. 하지만 그래픽 디자이너가 없으므로 맵 데이터 제작은 불가능. 그래서 기존의 삼각형 데이터로 이루어진 맵데이터로부터 복셀데이터를 생성하기로 했다. 1. 일단 기존 삼각형 매쉬 맵데이터로부터 복셀 데이터 생성하는 코드는 금방 만들었다. 2. 월드 전체를 50cm x 50cm x 50cm짜리 복셀 … More GameDev – Creating Voxels from Triangle Mesh.

Game Dev – Geometry Shader포기

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

Voxel오브젝트의 최적화된 삼각형 리스트 만들기.

복셀 오브젝트에 딱 맞는 최적화된 삼각형 리스트를 만들었다. 복셀 오브젝트를 그냥 삼각형으로 변환하면 복셀 한칸한칸마다 삼각형12개가 생긴다. 인접한 복셀이 있을 경우 면을 제거해도 최소 2개씩은 생긴다. 이걸 최적화해줘야 하는데 boolean연산으로 줄여야한다고 생각하고 있었다. 예전에 room/portal 에디터 만들때 N각형 boolean연산의 지랄같음을 맛보았기 때문에 다신 하고 싶지 않았다. 그런데 가만 생각해보니 이미 사용하는 방법을 조금 응용하면 boolean연산 … More Voxel오브젝트의 최적화된 삼각형 리스트 만들기.

간만에 DX11 vs DX12 관련 잡설

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

Hololens개발 메모 #11 – Resource leak 체크

1. UWP on Hololens에서의 resource leak 체크 UWP App은 명시적인 종료가 없으므로 리소스에 대한 leak체크가 쉽지 않다. 그래서 suspend이벤트나 아니면 임의의 버튼같은걸 만들어서 가상의 종료처리를 하고 이 시점에 leak체크를 하도록 하고 있다. Hololens버전은 UWP앱이지만 일반적인 DirectX on UWP앱과는 차이가 있다. swapchain을 사용하지 않는다. 즉 일반적인 UWP앱은 swapChainPanel이라는 XAML 객체를 가지고 있고 이 녀석과 D3D가 연결된다. … More Hololens개발 메모 #11 – Resource leak 체크

HoloLens 개발메모 #4

오늘 적을 내용은 많지 않다. 하지만 디버깅(코드작성이 아닌)에는 정말 많은 시간이 들어갔다. 영상도 찍은 김에 짤막한 내용이라도 적는다. 1. Holographic API는 기본적으로 왼쪽/오른쪽 눈에 대한 view-projection matrix를 넘겨준다. 내 엔진은 왼손 좌표 기준인데, 이 매트릭스들은 빌어먹을 오른손 좌표계 기준이다. 일단 화면을 보는게 급했기 때문에 view matrix로부터 eye position, eye direction, up벡터를 추출해서 왼손좌표계 기준으로 view … More HoloLens 개발메모 #4

2013년의 어느날 디버깅 메모(windbg)

2013년 12월 27일 , Project D Online 출시 준비할때였다. 첫번째 보스(벽에서 미사일 쏘는 보스-혼두라 모티브)랑 싸우고 나오면 나와서 맵체인지 할때 게임이 멈추는 증상이 있었다. 멈춘다고 하는것은 플레이어 입장이고 정확하게 얘기하자면 데드락 아니면 무한루프인데 이 경우는 데드락이었다. 데드락은 데드락인데 그게 어플리케이션이 사실상 크래시한거고 크래시에 의한 데드락이었다. 버그 재현도 잘 되지 않아서 엄청나게 절망했었다. 최초 같은 사무실에 … More 2013년의 어느날 디버깅 메모(windbg)

HoloLens 개발메모 #3

1. HoloLens는 Render Target Array를 사용한다. 그래서 Deferred 쉐이딩을 비롯 모든 종류의 오브젝트를 렌더링할때 Render Target Array를 사용하도록 엄청나게 뜯어고쳤다. 싸그리 다 고치고 예전에 만들었던 게임까지 무사히 작동하는지 확인했다. 시간 꽤 걸렸다. 그리고 양쪽 눈에 해당하는 view-proj matrix L-R에 대해서 matrix를 던져줄 수 있도록 함수를 하나 열어놨다. 2. Ok. 이제 HoloLens에서 view-proj 매트릭스만 받아오면 된다. … More HoloLens 개발메모 #3

HoloLens 개발 메모 #2

Holographic API는 RenderTexture Array를 이용해서 해서 양쪽 눈 각각에 대해 렌더링을 수행한다. 이게 분명히 성능상 이득이 있다. 문제는 이렇게 만들려니 기존 코드를 와장창 갈아엎어야한다. 일단 Holograhic 디바이스에서 사용하는지 아닌지 여부에 따라 shader코드와 렌더링 코드가 달라져야 한다. 기본적으로 HoloLens디바이스는 DX11.3을 준수하므로 Shader의 모든 스테이지에서 SV_RenderTargetArrayIndex를 지정할 수 있다. 하지만 에뮬레이터의 경우 에뮬레이터를 실행하는 PC의 GPU가 스펙을 … More HoloLens 개발 메모 #2