D = A()->B()->C(); 이게 뭔 ㅈ ㄹ 이고?

변수명이야 종교와 문화라고 생각하면 넘어갈 수 있다. 아래처럼 함수의 리턴값을 막바로 caller로 사용하는건 이해할 수 없다. A) width = pObjManager->GetInstance()->CalcRect()->GetWidth();   난 무조건 다음과 같이 짜는데 이유가 디버깅 때문이다. B) pInstance = pObjManager->GetInstance(); pRect = pInstnace->CalcRect(); width = pRect->GetWidth();   A) 처럼 짜면 짤때야 편하겠지. 타이핑을 몇 자라도 줄일테니까. 근데 디버깅할때, 특히 코드 분석하려고 디버거로 … More D = A()->B()->C(); 이게 뭔 ㅈ ㄹ 이고?

Windows on ARM벤치마크 자료의 해석에 대해

작년 12월에  프로그래머 관점에서의 Surface Pro X 벤치마크 라는 글을 작성했었다. 영문/한국어로 작성했고 영문버전은 해외에선 꽤 이슈가 됐었다. 한국에선 전혀 관심을 못끌었는데 요새 ARM for Mac발표 이후 여기저기서 막 퍼가고 있다. 퍼간거까진 좋은데 보고싶은대로, 생각하고싶은대로 해석하는것 같다. 오해를 막기 위해 그 벤치자료에 추가적인 설명을 붙여본다. 벤치자료 내용의 대부분은 ‘명령어 또는 작업당 소모 클럭 카운트’를 측정하여 … More Windows on ARM벤치마크 자료의 해석에 대해

자체엔진 vs 상용엔진

자체엔진을 쓰느냐 상용엔진을 쓰느냐…하는 문제에 대해서 몇 자 적어봄. 1. 엔진 기술이 아예 없는 개발팀(or 회사)은 상용 엔진을 사용하지 않으면 게임이 아예 안나온다. 선택의 여지가 없다. 이 경우 엔진부터 만들겠다고 하면 자살행위다. 2. 엔진 기술을 가지고 있고 이미 해당 엔진으로 게임 출시 경험이 있다면 굳이 상용엔진을 사용해야할 이유가 없다. 로열티 지불 안해도 되니 돈 굳어서 … More 자체엔진 vs 상용엔진

복셀 베이스 맵에서의 비동기 SW Occlusion Culling.

복셀 베이스 맵에서의 비동기 SW Occlusion Culling. 삼각형 베이스 맵에 적용했던 비동기 S/W Occlusion Culling을 복셀 베이스 맵에도 적용했다. S/W Occlusion Culling은 대단히 부하가 많이 걸리는 작업이기 때문에, 이를 매 프레임마다 수행하면 GPU성능이 충분한 경우 오히려 전체적인 응답성을 떨어뜨릴 수 있다. 이번 구현의 목표는 ‘S/W Occlusion Culling으로 이득을 보되, 최악의 경우에도 S/W Occlusion Culling때문에 느려지는 … More 복셀 베이스 맵에서의 비동기 SW Occlusion Culling.

삼각형 베이스 맵에서의 SW Occlusion Culling #3

앞서 Rasterize코드의 버그를 수정했고 거의 완벽하게 CPU로 Raster/Test작업을 수행한다. 시간이 걸린다는 문제만 빼면 culling결과는 매우 훌륭하다. 다만 시간이 걸린다는 문제는 결코 무시할 수 없다. CPU로 삼각형을 픽셀 단위로 찍는 작업은 간단한 작업이 아니다. 아무래도 매 프레임마다 SW Occlusion Culling을 수행하면 Raster/Test비용이 렌더링 비용보다 더 커진다. 그래서 카메라 위치와 방향의 변화가 일정 수치 미만인 경우 앞 … More 삼각형 베이스 맵에서의 SW Occlusion Culling #3

삼각형 베이스 맵에서의 SW Occlusion Culling #2

일반적인 삼각형 베이스 맵에서의 SW Occlusion Culling을 적용하고 있다. 현재는 Occluder로 사용할 삼각형을 따로 골라내지 않고 삼각형 그대로 SW Z-Buffer에 Rasterize한다. 오브젝트 단위로 culling하지 않고 다수의 오브젝트가 묶여있는 leaf의 AABB를 Z-Test하고 있다. 처음엔 Occluder로 사용할 삼각형을 미리 골라둘 생각이었으나 굳이 그럴 필요는 없을것 같다. SW Occlusion Culling단계에서는 leaf단위로 culling한다. HW Occlusion Culling단계에서 오브젝트 단위로 culling한다. … More 삼각형 베이스 맵에서의 SW Occlusion Culling #2

삼각형 베이스 맵에서의 SW Occlusion Culling

삼각형 베이스 맵에서의 SW Occlusion Culling 작업중. 복셀 지형을 렌더링할때 성능향상을 위해 사용했던 SW Occlusion Culling을 삼각형 베이스 맵에도 적용한다. KD-Tree를 순회할때 카메라 위치에 가까운 leaf부터 방문하게 되므로 방문하는 leaf의 삼각형들을 차곡차곡 Rasterize/z-test 해가면 z-buffer상에서 가려지는 leaf는 조기에 제외시킬 수 있다. SW Rasterizer/Tester는 작년까지 죽어라 다듬어놨기 때문에 더 손볼게 없다. 512×512버퍼에 KD-Tree를 순회하면서 프러스텀에 걸치는 … More 삼각형 베이스 맵에서의 SW Occlusion Culling

GPU를 이용한 PVS #4 – 게임 클라이언트 테스트

맵에디터가 아닌 게임 클라이언트에서의 테스트다. 오프라인 PVS빌드에 GPU 점유율 86%정도로 약 13분이 걸렸다. Voxelization에선 그나마 DX12버전이 약간 더 빨랐는데, 이 경우는 그냥 DX11이 더 빠르다. 더 정확히 얘기하면 DX11의 싱글스레드로 CPU점유율 20%, GPU점유율 86% – 13분(대략) 였고, DX12의 멀티스레드(6스레드)로 CPU점유율 90%, GPU점유율 100% – 13분 30초(대략) 이었다. DX12는 정말 답이 없다. 아마 AMD GPU였으면 그래도 … More GPU를 이용한 PVS #4 – 게임 클라이언트 테스트