[CG] 폴리곤 메쉬 표현 기법

2025. 7. 1. 11:43Game/Computer Graphics

삼각형 메쉬를 표현하는 단순한 방법은, 그냥 버퍼에다가 어떤 삼각형의 정점 정보를 기입하는 것이다. 이를 정점 버퍼라고 부르게 된다. 다만 이 경우, 중복되는 데이터가 다수 기입되는 문제가 있다. 폴리곤의 수가 적다면 딱히 문제가 될 것은 없어 보이나, 만약 폴리곤의 수가 상당히 많은 경우 (특히 요즘 같은 게임에서는) 데이터 저장 공간을 과다하게 차지하게 된다.

 

이럴때 사용 하는 것이 인덱스 버퍼이다. 이는 어떤 모델의 정점은 여러개의 삼각형이 참조함에서 기인한 것으로, 정점 버퍼에 정점들을 저장하고 (중복은 X) 이들을 가리키는 인덱스 버퍼의 인덱스로 삼각형의 위치 정보를 표현하는 것이다. 이를 인덱스 삼각형 리스트라고 한다.

 

다만 통상적으로, 정점의 좌표(위치)만 저장하는 것이 아니라 법선 벡터(normal vector), 텍스쳐 좌표 등의 데이터가 함게 정점 버퍼에 저장된다. 실제로 obj 파일을 까보면, 정점/법선벡터/텍스쳐 좌표 등의 정보가 기입되어 있다. 즉, 위 방식을 차용함으로서 많은 공간을 아낄 수 있게 되는 것이다.

 

참고로 GPU는 저 정점 정보를 캐시에 임시로 저장해 뒀다가, 없는 경우에만 불러오게 된다. 대충 CPU의 캐싱과 비슷한 원리라고 생각하면 될 것 같다. 더불어 이때 언급되는 수치가 Average Cache Miss Ratio(ACMR)인데, 이상적으로는 0.5에 수렴하나 실제론 그렇지 않다. 캐시의 용량은 유한적일 수 밖에 없다는 건 둘째 치고, 데이터가 지역적으로 분포하지 아니할 경우에는 데이터를 일일이 불러와야 하는 경우가 다반사이므로...

 

추가로, 삼각형 스트립이라는 방법 이 존재한다. 이는 캐쉬에 이미 있는 정점 정보는 활용하고 나머지는 불러오는 방식이다. 다만 이 경우 ACMR은 1로 수렴을 하게 되어 인덱스 삼각형 리스트보다 성능이 낮으나, 종종 사용되는 경우가 있다.

 

Ref : 게임 프로그래밍을 위한 3차원 그래픽스, 한정현(고려대) 저