삼각형 베이스 맵에서의 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한다.
스샷에서는 HW Occlusion Culling은 끄고 SW Occlusion culling만 On / Off로 테스트하고 있다.

대략 성능 체크를 해보면,

보이는 leaf를 탐색하고 Raster/Z-Test하는데 걸린 시간이 3.74ms
SW Occlusion Culling의 결과로 제외된 leaf가 191개.
leaf가 제외되면서 렌더링 파이프라인에서 제외된 오브젝트가 634개.

생각보다 효율이 더 좋다. 사용하지 않을 이유가 없다.

다만 느린 CPU에선 Raster/Z-Test 시간을 꽤 소모할 수 있기 때문에 이 부분은 선택적으로 제한을 둘 필요가 있다.

1. 카메라에 가까운 삼각형일수록 다른 오브젝트를 가릴 확률이 높다.
2. 카메라에서 먼 오브젝트일수록 다른 삼각형에 가려질 확률이 높다.
따라서 카메라로부터 얼마만큼의 거리까지 Raster할지, 카메라 범위의 끝에서부터 얼마까지 Z-Test할지를 옵션으로 빼면 SW Occlusion Culling을 때문에 되려 느려지는 경우에 대해 통제할 수 있다.

sw_occ_perf_2020_0529

[SW Occlusion Culling On]
sw_occ_on_2020_0529

[SW Occlusion Culling Off]
sw_occ_off_2020_0529


댓글 남기기