요약
엔비디아의 16억 개 삼각형 장면을 meshoptimizer로 다시 처리해 용량과 메모리를 크게 줄였습니다.
메시 처리 라이브러리 meshoptimizer를 만든 아르세니 카풀킨의 글입니다. 엔비디아가 9월 vk_lod_clusters 예제를 갱신하며 경로 추적(빛의 경로를 따라가는 사실적 렌더링)까지 되는 조라(Zorah) 장면을 공개하자, 작년 글에 이어 이 장면의 처리 과정을 다시 손봤습니다.
왜 중요한가
- 16억 개 삼각형 장면을 VRAM 12GB인 RTX 5070에서 메모리 7GB 남짓으로 스트리밍할 수 있음을 보였습니다.
- 압축, 단순화, 메시렛 코덱 같은 개선은 클러스터 LOD가 아닌 다른 렌더링 방식에서도 따로 쓸 수 있습니다.
핵심 내용
- 클러스터 LOD(삼각형 묶음 단위로 거리에 따라 세밀도를 바꾸는 방식) 처리 전체가 16코어 CPU에서 약 3분 45초 걸렸습니다.
- 속성 오차를 삼각형 면적으로 제한하는 Unreal Engine 방식을 들여와 기하 메모리 요구량을 996MB에서 678MB로 줄였습니다.
- 잎이 삼각형 하나까지 줄어든 뒤 통째로 사라지는 문제는 남은 삼각형에 면적을 나눠 주는 방식으로 풀었습니다.
- 새 메시렛 코덱(삼각형 묶음의 연결 정보 압축)으로 인덱스를 9.8GB에서 약 2.6GB, 삼각형당 6.5비트로 줄였습니다.
- 그래도 삼각형은 여러 면에서 최적이 아니며, 에픽이 잎 표현에 복셀 방식을 연구하는 것도 이해된다고 했습니다.
HN 반응
- 댓글은 기사보다 삼각형 배치 자체에 쏠려, 나무를 삼각형으로 심었던 경험담에 최소 간격 조건에서는 삼각 격자가 가장 촘촘하다는 보충이 붙었습니다.
저는 90년대에 식목 일꾼이었는데, 그것도 최고 수준이었습니다. 부모님이 겨울 스키 비용을 대주지 않으셨거든요. 나무 한 그루당 얼마씩 받는 성과급 방식이었습니다. 저는 줄을 따라 기본 격자 방식으로 심는 대신 삼각형으로 심었습니다. 당시에는 간격과 미소 입지(microsite) 선정 기준이 엄격해서 이게 상당한 이점이 되었고, 익히는 데 세 시즌쯤 걸렸으며 결국 누구에게 가르치거나 설명하기도 매우 어려웠습니다. 그래픽 쪽 배경지식은 전혀 없는데, 여기서도 '땅'을 효율적으로 덮으려고 삼각형을 쓴다는 걸 알게 되니 흥미로웠습니다.
격자에 비해 삼각형 식재가 정말 그렇게 대단했나요? 크기가 제각각인 삼각형을 다룬 게 아니라면요(그건 관리하기 골치 아프겠지만요).
딱히 그렇진 않았습니다. 다만 일직선으로만 심을 때보다 머리를 더 쓰게 됐으니, 그만큼 더 재미있게 일했다고 할 수 있겠죠. 계약 조건에 최소 간격과 밀도 규정이 엄격해서, 감점(대금 삭감)을 피하려면 항상 그 규정을 맞춰야 했습니다.
최소 거리 제약이 있을 때는 삼각형/육각형 격자가 가장 촘촘하게 채우는 배치입니다.