Quick Reference
| 개념 | 의미 |
|---|---|
| Meshlet | 작은 정점/삼각형 묶음 |
| Cluster culling | 클러스터 단위로 보이지 않는 geometry 제거 |
| GPU-driven rendering | GPU가 draw 후보 생성과 culling을 주도 |
| Mesh shader | 기존 vertex/geometry 흐름을 대체할 수 있는 기하 처리 단계 |
| Clustered lighting | 화면/공간 cluster별 light list를 만드는 방식 |
geometry meshlet: vertex/triangle subset + bounds + normal cone
lighting cluster: screen or view-volume cell + candidate 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 개입으로 처리합니다.
meshlet metadata에는 보통 bounding sphere 또는 AABB, normal cone, vertex/triangle offset이 들어갑니다. frustum·cone·Hi-Z test를 모두 통과한 meshlet만 이후 geometry work로 넘깁니다. cone culling은 양면 material, 변형된 normal, alpha-tested foliage에는 그대로 적용할 수 없으므로 material flag와 fallback을 둡니다.
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 기반 렌더링은 고급 파이프라인 설계에 가깝습니다. 단순한 장면에서는 준비 비용과 복잡도가 이득보다 클 수 있습니다.
mesh shader 지원은 API 이름만으로 보장되지 않습니다. target GPU, driver, console profile, WebGPU/legacy path를 확인하고, 지원하지 않는 환경에서는 indexed draw와 compute/CPU culling으로 같은 asset을 그릴 fallback을 준비합니다.
주의할 점
meshlet 크기는 너무 작아도, 너무 커도 문제가 됩니다. 너무 작으면 관리 오버헤드가 커지고, 너무 크면 culling 효율이 떨어집니다.
또 mesh shader나 GPU-driven pipeline은 플랫폼/API 지원을 확인해야 합니다. 모든 환경에서 같은 방식으로 사용할 수 있는 기본 기능은 아닙니다.
meshlet 크기는 content와 hardware에 따라 측정합니다. 작은 meshlet은 culling은 잘 되지만 dispatch·metadata·primitive amplification overhead가 늘고, 큰 meshlet은 vertex reuse는 좋아도 숨은 triangle을 많이 남깁니다. 한 숫자를 모든 mesh에 고정하기보다 capture의 visible meshlet 수와 triangle amplification을 비교합니다.
참고 링크
1 sources