CUDA Raytracing을 이용한 복셀 오브젝트 culling 기능 작업중.
앞서 이 기법에 대한 기본적인 내용을 포스팅을 했었다.
https://megayuchi.com/2021/09/06/s-w-raytracing%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%b3%b5%ec%85%80-%ec%98%a4%eb%b8%8c%ec%a0%9d%ed%8a%b8-culling/
실제 culling을 해야하는데 우선 복셀 오브젝트 ID를 곧바로 버퍼에 써넣고 이것을 보이는 오브젝트 목록으로 가져가는 방식으로 구현했다.
아주 칼같이 보이는 오브젝트만 골라주기는 하는데 문제가 있다.
512×512정도의 해상도로는 화면 해상도보다 많이 낮다보니 오차가 발생한다. 그렇다고 화면 사이즈만큼 CUDA측 프레임버퍼 크기를 늘리면 속도가 너무 느려진다.
그래서 복셀 오브젝트의 ID대신 복셀 오브젝트가 포함된 leaf(KD-Tree)의 index를 버퍼에 써넣도록 했다.
이렇게 하면 프레임 버퍼의 내용을 읽어서 보이는 오브젝트를 수집할때 기본적으로 leaf안의 포함된 오브젝트들이 모두 렌더링 후보가 된다. 당연히 실제로 화면에 보이지 않는 불필요한 오브젝트들이 꽤 추가된다.
이것들은 이후 HW Occlusion Culling에서 한번 더 걸러준다.
이 방식으로 화면깨짐은 현저하게 줄었다.
속도도 잘 나온다. 어지간하면 200프레임 밑으론 안내려간다.