빠른 비교
| volume | 장점 | 주의점 |
|---|---|---|
| Bounding sphere | 회전에 영향 적고 계산 단순 | 빈 공간을 많이 포함할 수 있음 |
| AABB | 테스트가 빠르고 관리 쉬움 | 회전하면 커질 수 있음 |
| OBB | 물체 방향에 잘 맞음 | plane test와 갱신 비용 증가 |
| Hierarchy | 큰 묶음부터 빠르게 제외 | 경계가 나쁘면 popping 또는 과다 렌더 |
object bounds
-> test against six frustum planes
-> outside any plane?
-> skip draw candidate구조
frustum culling은 카메라가 볼 수 있는 절두체 밖에 있는 객체를 렌더링 후보에서 제외합니다. 보통 카메라의 near, far, left, right, top, bottom plane 여섯 개와 객체의 bounding volume을 비교합니다.
for each plane:
if bounds is completely outside:
culled이 검사는 실제 mesh 삼각형 전체가 아니라 근사 경계로 수행합니다. 경계가 실제 물체보다 넓으면 보이지 않는 물체도 그릴 수 있지만, 보이는 물체를 잘못 제거하지 않는 보수적 판단이 됩니다.
Bounding volume
bounding sphere는 중심과 반지름만 있으면 되므로 테스트가 단순합니다. AABB는 world 축에 정렬된 박스라 빠르게 검사할 수 있지만, 회전한 물체를 감싸면 실제보다 커질 수 있습니다. OBB는 물체 방향을 따르는 박스라 더 촘촘하지만 계산이 복잡합니다.
sphere: center + radius
AABB: min + max
OBB: center + axes + half extents대규모 장면에서는 객체를 계층 구조로 묶어 상위 bounds부터 검사합니다. 상위 노드가 frustum 밖이면 하위 객체를 검사하지 않아도 됩니다.
선택 기준
| 상황 | 접근 |
|---|---|
| 작은 동적 객체가 많음 | sphere 또는 AABB |
| 회전이 큰 긴 물체 | OBB 또는 더 나은 proxy bounds |
| 큰 정적 월드 | BVH, octree, grid 같은 hierarchy |
| GPU-driven 렌더링 | compute culling과 indirect draw |
| 시야 안이지만 벽 뒤 | occlusion culling 별도 필요 |
frustum culling은 “시야 밖”만 제거합니다. 시야 안에서 다른 물체에 가려진 객체는 occlusion culling, portal, Hi-Z 같은 다른 visibility 단계가 필요합니다.
주의할 점
bounding volume이 실제 mesh보다 작으면 보이는 물체가 갑자기 사라지는 popping이 생깁니다. animation, particle, shader vertex displacement처럼 mesh가 움직이는 경우 bounds를 충분히 넓혀야 합니다.
반대로 bounds가 너무 크면 culling 효율이 떨어집니다. 보수성과 효율 사이에서 장면 규모와 객체 형태에 맞는 경계를 선택해야 합니다.