최적화 무용론에 대한 반박

많은 프로그래머들이 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

서버 프로그래머 = 서버에 컨텐츠를 얹는 프로그래머???

상용 네트워크 엔진이 보급되면서 네트워크 모르는 네트워크 프로그래머, 서버에서 필요한 기술 모르는 서버 프로그래머가 생겨났다. 그런데 이게 꼭 네트워크 엔진의 보급 때문은 아니다. 상용 네트워크 엔진의 보급이 늘기 전에도 사실 서버 프로그래머라는 직군에 좀 웃기는 현상이 일어나긴 했다. 전에도 언급했지만 한국 온라인 게임(MO,MMO)들의 네트워크/서버 소스코드 상당 수가 거의 몇 안되는 사람들 손에서 나왔다. 이게 처음 … More 서버 프로그래머 = 서버에 컨텐츠를 얹는 프로그래머???

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

모바일 세상은 좀 다른가보지만… 예전에 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오브젝트의 최적화된 삼각형 리스트 만들기.