Frustum Culling은 카메라의 시야 범위(Frustum) 밖에 있는 객체들을 렌더링하지 않아 성능을 최적화하는 기술이다. 시야에 보이지 않는 객체들을 제외함으로써 불필요한 GPU 연산을 줄여 성능을 크게 향상시킬 수 있다.
Bounding Volume을 구 형태로 구성하여 BVH(Bounding Volume Hierarchy)를 구축했다. 모든 오브젝트는 BVH의 노드로 관리되며, Culling은 다음 세 가지 경우로 처리된다:
렌더링할 카메라 기준으로 Frustum 영역을 생성한다. 렌더링 직전에 카메라의 위치와 방향을 기반으로 Frustum을 계산하고, Culling을 수행한 후에 렌더링을 진행한다.
Scene 단위로 BVH를 생성해 해당 Scene의 오브젝트들을 관리힌다. Scene별 BVH는 오브젝트가 움직이는 경우 갱신되며, 이를 통해 동적 오브젝트도 처리가 가능하다.
RenderDoc으로 FPS를 측정하면서 렌더링 한 결과 Frustum culling 구현 전엔 화면에 오브젝트가 몇 개 등장하든 1100 ~ 1200의 FPS가 유지되었다.
Frustum culling 구현 후 오브젝트가 화면에 나오면 FPS가 1200, 오브젝트가 화면에 나오지 않으면 FPS가 2000까지 올라가는 것을 볼 수 있다.
이번 글에서는 간단히 Frustum culling의 최적화 효과에 대해 살펴보았다.
다음 글에서는 물리 엔진의 position, rotation freeze 구현에 대해 알아볼 것이다.
ALEngine: SIMD를 이용한 최적화 - (3) (0) | 2025.03.26 |
---|---|
ALEngine: Freeze 구현 - (2) (0) | 2025.03.21 |
ALEngine: 게임 엔진 제작 합류 - (0) (0) | 2025.02.17 |
FT_Newton: sleep 상태 추가 및 solve constraint 반복 수정 - (13) (0) | 2025.02.12 |
FT_Newton: 메모리 풀 구현 - (12) (0) | 2025.02.07 |