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(); 이게 뭔 ㅈ ㄹ 이고?

자체엔진 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 – 게임 클라이언트 테스트

GPU를 이용한 PVS #3.

현재까지 구현한 방법에는 약간의 문제가 있다. 그냥 딱 잘라 말하면 정밀도 문제다. 결과적으로 특정 공간에서 보여야할 오브젝트가 보이지 않는 현상이 일어난다. 정밀도를 높이면 높일수록 빌드시간이 길어진다. 정말 제대로 하려면 어마어마한 시간이 필요하다. 그래서 결국 지난 2주를 날렸구나..라고 생각했으나, 밑져야 본전이라는 생각으로 약간의 꼼수를 써봤다. 기존 방식대로 PVS를 계산하고(마을맵 하나에 15분), 이후 문제가 되는 공간들에 대해서만 … More GPU를 이용한 PVS #3.