디버깅은 코드 작성 이상으로 중요하다.

모바일 세상은 좀 다른가보지만… 예전에 PC 온라인 게임이 대세이던 시절엔 버그 때문에 게임이 완전히 망하고 회사가 망하는 일도 흔했다. 서버가 하루에 12번씩 다운되면 아무리 재밌어도 유져들이 참아주지 않는다. 서버가 아니면 상관없나? 클라이언트는 죽어도 상관없나? 한참 레이드 뛰는데 클라이언트가 죽어봐. 그렇게 여러번 반복해봐. 차라리 휘발유 들고 개발사 쳐들어가는 유져는 애정이라도 있는거지. 대다수는 쌍욕과 함께 그 게임 … More 디버깅은 코드 작성 이상으로 중요하다.

추상화의 허상

CPU가 아무리 빨라지고 온갖 개념의 프로그래밍 언어가 등장해도 현대의 컴퓨터는 종이테이프 머신에 기초를 두고 있다. 코드를 짜고 배포를 하고 디버깅을 하다보면 객체고 뭐고 아무리 포장을 해도 결국 소프트웨어란게 코드와 데이터의 스트림-종이테이프에 불과하다는 사실을 깨닫게 된다. 이걸 뼈저리게 느낀 첫 경험은 처음 멀티스레드로 네트워크 프로그래밍을 했던 2000년도였다. 여느 초심자들처럼 멀티 스레드 프로그래밍의 쓴맛을 톡톡히 맛보았다. ‘이 … More 추상화의 허상

생산성에 대한 고찰

내 경험에 비추어 보면, 프로그래밍 측면에서 프로젝트가 지연되는 이유는 다음과 같다. 1. 대략적으로 돌아가는 프로토타입이 없어서 프로그래머들이 각각 쓸데없는 짓을 함. 조립이 불가능한 부품을 각각 만들고 있음. 이것도 배가 산으로 가는 케이스. 2. 치명적인 버그를 잡지 못함. 디버깅 능력의 결여. 디버깅을 빼고 순수하게 코드만 작성하는 시간이 오래 걸려서 프로젝트가 늦어지는 경우는 한번도 보지 못했다. 프로젝트의 … More 생산성에 대한 고찰

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오브젝트의 최적화된 삼각형 리스트 만들기.

혼자 개발하기

개인 프로젝트는 여전히 진행중이지만 어렵다. 어렵다. 사소한 문제에 부딪쳐도 해결하기 전까진 사소한 문제가 아니다. 나중에 사소한 문제로 밝혀지더라도 몇일씩 시간을 잡아먹는 일은 흔하다. 그리고 그 동안 프로젝트는 스톱된다. 단 한사람의 동료라도 있으면 다르다. 내가 진행을 못해도 프로젝트 전체로 보면 단 한픽셀 분량이라도 프로젝트는 진전된다. 게다가 막상 게임을 릴리즈하고 싶으면 이건 개발은 둘째 문제다. 배포는 어떻게 … More 혼자 개발하기

VS2017 버그 관련

사용환경 OS : Windows 10 RAM : 128GB CPU : XEON E5-2620 v3 6core 12 Threads 1. Visual Studio Online의 TFS를 사용중. 2. 100% C++ 프로젝트 3. 하나의 EXE에서 여러개의 DLL을 사용하는 프로젝트이므로 exe와 DLL각각에 대해서 VS2017을 따로 띄워서 사용하고 있음. 일반적으로 4개 이상의 VS2017을 동시에 사용. 4. 각각의 VS2017각각은 x86/x64/debug/relase로 4개의 설정에 대해 batch build를 … More VS2017 버그 관련

게임 프로그래밍이 만만해 보이냐?

2003년도 코룸온라인 클베 하기 직전이었다. 다음은 어느 코룸 유져가 코룸온라인 홈피에 남긴 글중 일부이다.. ——————————————————————– 4.세부소견-프로그래밍/네트워크 [ 코룸은 디아블로2의 엔진을 사용했다.] 그것은 디아블로2의 뛰어난 액션성을 그대로 장점으로 만들 수 있는 가능성이 있다는 것을 의미한다. 그리고 그것은 반드시 코룸이 갖춰야할 장점이기도 하다. 개인적으로 시스템엔지니어이긴 하지만 사실 게임 프로그래밍은 세부적으로 어떻게 돌아가는지 잘 모른다. 기회가 된다면 소스를 … More 게임 프로그래밍이 만만해 보이냐?

간만에 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 체크