HW Occlusion Culling을 써야할 상황이라면…명백하게 D3DQuery보다 Hi-Z Occlusion Culling이 빠르다.
다만 Hi-Z Occlusion Culling보다는 D3DQuery쪽이 더 정밀하게 culling할 수 있다.
일반적으로 카메라가 변경되거나 오브젝트의 배치가 변경될때만 Occlusion Culling을 한다. 당연히 카메라가 고정된 상태에선 Hi-Z는 D3DQuery든 쓸 수 있는 culling은 다 쓰는게 프레임 레이트가 잘 나온다.
문제는 주인공 캐릭터가 움직이거나 해서 카메라가 변경될때인데 이 경우 Hi-Z Occlusion Culling + D3DQuery 둘다 사용하면 프레임 레이트가 팍팍 떨어진다.
따라서 이 경우는 D3DQuery나 Hi-Z Culling중 하나만 사용하는 편이 낫다.
pixel shader부하가 크지 않은 경우 D3DQuery Culling하는 비용이나 프레임 버퍼에 렌더링하는 비용이나 별 차이가 없다.
내 게임처럼 pixel shader부하가 크지 않은 경우는 Hi-Z Occlusion Culling을 사용해야 한다. 이쪽이 훨씬 짧은 시간을 소모하면서도 그럭저럭 많은 오브젝트를 culling해준다.
물론 pixel shader부하가 상당히 크다면 Hi-Z Occlusion Culling 후에 D3DQuery Culling을 한번 더 해주거나 D3DQuery Culling만을 사용하는 것이 나을수도 있다.
빌어먹을 UWP on XBOX는 DX Feature Level 10까지만 지원해서 Compute Shader를 못쓰고 그래서 D3DQuery만 사용해야되는데(Pixel Shader가지고 Hi-Z Occlusion Culling을 만들수도 있지만 코드 두벌짜기 귀찮아서) 카메라 변경될때마다 프레임 레이트가 근 두배 차이나고 있다.
쯧.