Game Dev – Octree for Voxel Object

Voxel Object각각 Octree를 빌드하도록 했다. Voxel Object는 16x16x16짜리 1 bit table자료구졸르 사용한다. 그러니까 총 512바이트의 메모리가 필요하다. 이 자료구조를 그대로 Octree로 빌드한다. picking과 충돌처리용 삼각형 탐색은 이 Octree를 사용할 것이다. 코드는 빨리 짰는데 사소한 실수를 해서 밤을 샜다. 메모리 아끼려고 sub node각각의 인덱스나 포인터를 가지고 있는 대신, sub node를 8개씩 인접한 메모리블럭으로 할당하도록 했다. 순서대로 … More Game Dev – Octree for Voxel Object

쓸데없는 고민할 시간에 무조건 만들어라.

테트리스류나 갤러그 류나 뭐든 게임 비슷한거라도 하나 만들어보면 생각보다 졸라게 빡신걸 깨닫는다. 저수준의 라이브러리를 모두 구축하지 않더라도, 심지어 유니티같은 쉽고 편한 툴을 써도 쉽지 않다. 게다가 그걸 만들어서 진짜 배포까지 해보려면 더 장난 아니다. 최신의 AAA게임을 즐기면서 욕하는건 쉽지만 막상 자기 손으로 갤러그라도 만들려면 겁나 빡시다. 게임 만드는건 원래 어렵다. 어려운데 그게 아이디어 때문에 어렵다고 … More 쓸데없는 고민할 시간에 무조건 만들어라.

D3D12엔진개발 – Multi-Thread 렌더링, Wait줄이기

미리 말해둔다. D3D12 렌더러 작업을 시작하기 전, 그러니까 지금 D3D12렌더러의 원형이었던 D3D11렌더러는 Single-Thread기반이었다. 게임엔진 자체는 여기저기서 멀티스레드를 사용하고 있지만 렌더링-그래픽 API사용 계층은 싱글 스레드로만 동작했다. 이전 포스트에서도 언급했듯이 그럼에도 불구하고 GPU 점유율 90%이상의 괜찮은 성능을 보여주었다. 그런데 D3D12렌더러를 만들면서 이전의 작동방식은 GPU를 펑펑 놀게 하는 결과를 가져왔다. 그래서 별로 내키지는 않지만 렌더러를 멀티스레드 체계로 바꿨다. … More D3D12엔진개발 – Multi-Thread 렌더링, Wait줄이기

Win10 Anniversary Update에 추가될 InkCanvas맛보기

Build 2016에서 올 여름에 업데이트될 Windows 10의 새로운 빌드의 기능이 몇가지 공개되었다. Windows 10 Anniversary Update란 이름으로 배포될 예정이다. UWP쪽 변화를 보면  펜 기능이 크게 강화되었다. 자(Ruler)를 꺼내서 사용하는 데모에 많은 사람들이 놀랐다. 그 펜기능을 사용할 수 있는 컨트롤이 추가 되었는데 그 이름이 InkCanvas이다. 현재 Windows Insider Fast Ring으로 14295빌드를 받아서 InkCanvas를 사용해볼 수 있다.   … More Win10 Anniversary Update에 추가될 InkCanvas맛보기

D3D12엔진에서 GPU Dedicated 메모리를 쳐묵쳐묵하고 있는 건에 대해서.

똑같은 상황에서 메모리 사용 현황 DX11 – System: 579,608 KB ,  GPU Dedicated: 279,536 KB DX12 – System: 598,608 KB , GPU Dedicated: 553,136 KB 그리고 VS2015 Graphics Debugger에서 프레임을 캡쳐해서 현재 D3D 오브젝트들이 사용하는 메모리 사이즈를 다 합산해봄. 202665770 Bytes -> 193MB 1. 시스템 메모리 사용량은 D3D11, D3D12엔진 모두 비슷. GPU Dedicated메모리 사용량은 DX12가 … More D3D12엔진에서 GPU Dedicated 메모리를 쳐묵쳐묵하고 있는 건에 대해서.

Build 2016에서 발표된 Project Centenial 요약

프로젝트 센테니얼. 빌드 발표영상은 여기. https://channel9.msdn.com/Events/Build/2016/B829 그냥 App-V네. 일단 exe는 App-V기술을 이용한 프로세스 레벨의 격리된 공간에서 돌아가는게 맞는거 같음. GUI가능한 Windows Container로 보임. 핵심적인 기술은 이거고. 사실 나머지는 그저 껍데기일뿐. 1. 라이브타일 등 UWP앱으로서의 기능을 위해서 껍데기에 해당하는 UWP앱을 하나 만듦. 2. UWP앱에서 즉 AppContainer프로세스로부터 해당 데스크탑 어플리케이션을 실행(exe). 아마도 접근 권한 때문에 이렇게 하는거겠지. … More Build 2016에서 발표된 Project Centenial 요약

삼각형 하나라도 직접 찍어봤는지…?

10년쯤 됐나. 지금도 생각하면 겁나 빡치는데. 어떤 인간이 내 홈피에 ‘코룸 온라인을 해보니 님도 별거 아니군요’라고 써놨었다. 코룸 온라인에 사용한 엔진은 내가 만들었다. 내가 만들었다고 말할 수 있는 이유는 코드의 95%이상을 내가 만들었기 때문이다. 하여간. 2002년쯤 개발을 시작했고 그걸로 실제 게임이 나온건 2004년이다. 그 엔진에 대단한 기능이 들어간건 없다. VertexBuffer Cache라든가 타일 스플랫팅이라든가 남들 안해본거 … More 삼각형 하나라도 직접 찍어봤는지…?

D3D12엔진 개발 – 현재까지 발견한 GPU별 특징

D3D12 그래픽칩별 이런저런 현상 <intel HD520> 이전 드라이버에선 GPU메모리 사용랑이 1GB넘어가면 드라이버가 hang되어버렸음. 현재 최신 베타드라이버에선 돌아는 감. 심.각.하게 느림. GPU 에서 땡겨갈 수 있는 데디케이트 메모리가 부족해서 시스템 메모리로 스왑이 자주 일어나는게 원인일거라고 추측함. 참고로 같은 사이즈의 리소스를 사용할때 D3D12는 데디케이트 메모리를 3배쯤 쳐먹음. D3D12에선 리소스 -> 리소스 전송도 Command List를 사용하는데 이 부분도 … More D3D12엔진 개발 – 현재까지 발견한 GPU별 특징

메모리는 할당하는것보다 해제하는게 더 중요하다.

난 메모리 새는 코드를 짜는 프로그래머는 맞아야 한다고 생각하는 사람이다. 이 얘길 하면 많이들 공감한다. 근데 막상 힙 메모리와 커널 오브젝트를 정말 깔끔하게 해제하기 위해서 어떤 노력을 하고 있는지 물어보면 아무것도 안하는 경우가 많다. Windows Application 개발의 예를 들면 CRT Heap Check도 안쓰고, Application Verifier도 안쓰고 뭐 기타 다른 방법도 준비되지 않은 상태로 개발하는 케이스를 … More 메모리는 할당하는것보다 해제하는게 더 중요하다.