명시적 종료의 필요성 #2

네이티브 코드 체계에선 메모리(일반적인 메모리 , COM객체,Windows HANDLE 등등) 누수 탐지 기능이 반드시 필요하다. 컴파일 타임에서 논리적으로 아무리 완벽한 체계를 제공한다고 해도 말이다. 최근 MS는 COM을 사용하는 예제에서 CComPtr 사용을 적극 권장하고 있다. C++/CX에선 명시적으로 CComPtr을 사용할 필요없이 ^객체가 스마트포인터를 내장하고 있고 UWP프로젝트가 아닌 경우, 예를 들어 DX12샘플같은 경우 CComPtr을 사용하고 있다. CComPtr뿐 아니라 컴파일러 … More 명시적 종료의 필요성 #2

Game Dev – Voxel Horizon 개발 근황

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

Game Dev – SW Occlusion Culling 성능

내가 작성한 SW Occlusion Culling코드는 256×256 float 버퍼에서 1730개 정도의 삼각형을 Z-Raster / Z-Test 하는데 15만클럭 정도가 소요된다. SSE 명령어셋을 사용하는데 FPU만 사용하는것보다 2배 정도는 빠르다. AVX로 8샘플씩 처리하는 코드도 만들어놨지만 SSE만 쓰는것보다 느리다. 처음엔 싱글스레드 코드였지만 현재는 멀티스레드 4스레드를 사용한다. 내 PC의 물리코어가 4개이고 이 머신에선 4스레드보다 많은 스레드를 투입해도 성능향상이 미비하다. 그래서 현재 … More Game Dev – SW Occlusion Culling 성능

최적화 무용론에 대한 반박

많은 프로그래머들이 2:8 이론을 들어 최적화된 코드를 작성할 필요가 없다고 주장하곤 한다. 극히 일부의 코드가 전체 성능하락의 주요 원인이라는 얘기다. 틀린 얘긴 아니다. 그러나 바꿔 얘기하면 80%의 코드가 최적화되어 있다면 20%의 성능하락 요인을 수정하지 않아도 된다는 뜻도 된다. 게다가 전체적인 코드의 최적화여부는 날 잡아서 하는 최적화에 달려있지 않다. 습관과 기초지식에 달려있다. 기초지식을 잘 습득하고 습관만 … More 최적화 무용론에 대한 반박

메모리 사용과 성능에 대한 잡설.

픽셀단위나 벅텍스 단위 억세스에선 명령어 한클럭 줄이는것도 상당히 중요하다. 이건 성능에 있어 결코 무시할 수 없는 요소이다. 이런것들을 제외하고 보면 전체적으로 성능을 떨어뜨리는 가장 큰 요인은 메모리 동적할당이다. 그러니까 힙으로부터 메모리를 할당받는 malloc,free,new,delete가 되겠다. 당연히 단편화를 줄이기 위해 힙사용을 줄이면 할당/해제 속도가 빨라진다. 미리 메모리를 pool로 잡아두고 쓰는쪽이 메모리 낭비가 심할것 같지만 경험적으로 보면 메모리 … More 메모리 사용과 성능에 대한 잡설.

GameDev – Creating Voxels from Triangle Mesh.

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

Surface Ergonomic vs Natural Ergonomic 4000

Surface Ergonomic 키보드 쓰면서 backspace 눌렀는데 insert 눌리고, F9 눌렀는데 F10눌리면 역시 프로그래밍할때는 MS Natural Ergonomic 4000이 짱이란 생각이 든다. 일반키 타이핑은 괜찮은데 insert, delete, home,end, pgup,pgdn구역이 일반 키 구간과 너무 가까움. 그래서 \누르려다 delete누르고 backspace누르려다 insert누르는 일이 비일비재. 펑션키 배열이 한칸씩 기존 키보드에 비해 왼쪽으로 이동해 있음. 그래서 습관대로 F5키를 누르면 F6이 눌림. 브레이크 … More Surface Ergonomic vs Natural Ergonomic 4000