핵심 정리
| 개념 | 의미 |
|---|---|
| Meshlet | 작은 정점/삼각형 묶음 |
| Cluster culling | 클러스터 단위로 보이지 않는 geometry 제거 |
| GPU-driven rendering | GPU가 draw 후보 생성과 culling을 주도 |
| Mesh shader | 기존 vertex/geometry 흐름을 대체할 수 있는 기하 처리 단계 |
| Clustered lighting | 화면/공간 cluster별 light list를 만드는 방식 |
구조
meshlet은 큰 mesh를 작은 기하 단위로 쪼갠 것입니다. 각 meshlet은 제한된 수의 정점과 삼각형을 가지며, bounding volume, cone culling 정보 같은 메타데이터를 함께 둘 수 있습니다.
mesh
-> meshlet 0
-> meshlet 1
-> meshlet 2이렇게 나누면 전체 mesh를 통째로 그릴지 말지 결정하는 대신, meshlet 단위로 frustum culling, backface cone culling, occlusion culling을 적용할 수 있습니다.
cluster culling은 “작은 묶음이 통째로 보이지 않는가”를 먼저 묻습니다. meshlet의 bounding volume이 frustum 밖이거나 Hi-Z에서 가려졌다면 그 안의 삼각형은 자세히 처리하지 않아도 됩니다.
GPU-driven rendering에서는 CPU가 모든 draw 후보를 직접 고르지 않습니다. GPU의 compute shader나 mesh shader가 visibility를 계산하고 indirect draw argument를 만들어, 많은 객체나 meshlet을 더 작은 CPU 개입으로 처리합니다.
Clustered rendering
clustered rendering이라는 말은 문맥에 따라 두 축으로 쓰입니다. 하나는 geometry를 meshlet 같은 cluster로 나누는 방식이고, 다른 하나는 화면이나 view volume을 cluster로 나눠 light list를 만드는 clustered lighting입니다. 둘 다 “작은 묶음 단위로 후보를 줄인다”는 공통점이 있습니다.
사용 기준
| 목표 | 관련 기법 |
|---|---|
| 많은 geometry를 GPU에서 선별 | meshlet, mesh shader |
| 작은 삼각형 병목 완화 | cluster culling |
| 많은 동적 조명 관리 | clustered lighting |
| draw call 의존 줄이기 | indirect draw, GPU-driven |
| 대규모 장면 visibility | Hi-Z + meshlet culling |
meshlet 기반 렌더링은 고급 파이프라인 설계에 가깝습니다. 단순한 장면에서는 준비 비용과 복잡도가 이득보다 클 수 있습니다.
주의할 점
meshlet 크기는 너무 작아도, 너무 커도 문제가 됩니다. 너무 작으면 관리 오버헤드가 커지고, 너무 크면 culling 효율이 떨어집니다.
또 mesh shader나 GPU-driven pipeline은 플랫폼/API 지원을 확인해야 합니다. 모든 환경에서 같은 방식으로 사용할 수 있는 기본 기능은 아닙니다.
참고 링크
1 sources