테스트 하다가 생각나서 메모리 사용량을 확인 해봤다.
테스트한 맵은 폴리곤맵으로부터 변환했기 때문에 모양이 상당히 복잡하고 복셀 개수도 많다.
복셀 개수 : 복셀 하나당 50cm x 50cm x 50cm 로 환산 -> 9364002개
D3D11

committed: 2820580KB (2.82GB)
Working Set : 1817052KB (1.81GB)
Heap committed : 1695968KB ( 1.69GB)
GPU Dedicated : 692888KB (692MB)
D3D12

committed: 2705464KB (2.7GB)
Working Set : 1787316KB (1.78GB)
Heap committed : 1438620KB ( 1.43GB)
GPU Dedicated : 633308KB (633MB)
D3D12-DXR

committed: 4652400KB (4.65GB)
Working Set : 3201000KB (3.2GB)
Heap Committed : 1238880KB (1.23GB)
GPU Dedicated : 2606392KB (2.6GB)
- 3가지 버전은 Rendererxxx.DLL하나만 다르고 그 외 사용하는 DLL들은 바이너리 레벨에서 완전히 같은걸 사용한다.따라서 메모리 사용량의 차이는 거의 전적으로 Rendererxxx.DLL의 차이에 기인한다.
- D3D11/12는 API가 다르지만 동일한 렌더링 기술을 사용하므로 GPU메모리 사용량에 큰 차이는 없다.
큰 차이가 없다고 했지만 초기 D3D12렌더러는 50%이상 메모리를 더 소모했었다.
D3D12렌더러의 메모리를 줄이기 위해 상당히 많은 노력이 들어갔다.
D3D12 Resource의 64KB Align문제를 프로그래머가 직접 해결해주지 않는다면 D3D11버전에 비해 GPU/시스템 메모리를 50% – 100% 더 소모할 수 있다. - raytracing모드일땐 rasterization에서 필요한 자료구조의 상당 부분을 생략 가능하므로 Heap 사용량은 줄어든다. 그래서 DXR버전이 heap사용량이 가장 적다.
- DXR버전에서 committed 사이즈가 어마무시하다.
일단 Acceleration Structure 구축/유지에 막대한 GPU 메모리가 필요하다.
업데이트를 위해서 시스템 메모리도 대응해서 커지기 때문에 GPU메모리 사용량의 증가분만큼 시스템 메모리 사용량도 왕창 늘었다.
내 게임 완전 저사양 게임이었는데 맵좀 복잡한거 넣고 DXR들어가니 겁나 무거워졌네.