ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3D 모델링 기초 : 삼각형으로 일단 쪼개 보자
    Apple🍎/Metal 2025. 3. 17. 22:03

    평면인 모니터에 어떻게 3d 객체를 모델링해서 표현할 수 있을까요?

     

    위와 같은 3d 모델은 사실 하나의 덩어리가 아니라 여러 다각형들이 서로 연결되어 만들어집니다. 

    다각형은 선분으로 이루어진 평면 도형을 말하는데요. 예를 들어 삼각형, 사각형, 오각형 등 수많은 종류의 다각형이 존재합니다. 

    그중에서도 제일 간단한 형태인 삼각형을 이용하면 모델링을 하는데 필요한 연산을 단순하게 만들 수 있습니다. 

    그렇다면 어떻게 삼각형을 이용해 정보들을 구조화하여 3d 모델을 하는데 사용할 수 있을까요?

    버텍스( Vertex )로 삼각형 그리기 

    버텍스는 3D 공간에서의 한 지점을 의미합니다.

    그리고 각 버텍스 사이를 연결하는 선분을 '엣지(Edges)'라고 부르며

    세 엣지로 둘러싸인 삼각형의 표면 영역을 '페이스(face)'라 합니다. 

     

    위와 같이 버텍스를 기본 단위로 해서 그린 삼각형들을 조합해서 3d를 모델링을 합니다. 

    따라서 버텍스에는 단지 3d 공간상의 위치 정보(벡터 값) 외에도 모델링에 필요한 정보들을 포함하는데

    이 데이터 구조가 '버텍스 속성(Vertex Attributes)' 입니다. 

     

    버텍스 속성(Vertex Attributes)는 다음 값들을 담고 있습니다. 

    1. 위치(Position): (x,y,z) 좌표로, 3D 공간에서 버텍스의 위치를 정의합니다. 

    2. 색상(Color): 버텍스에 할당된 RGB(or RBGA) 색상 값 입니다.

    3. 텍스쳐 좌표(Texture Coordinates) : 버텍스가 2D 이미지(텍스쳐)의 어느 부분에 맵핑되는지 정의합니다. 

    4. 법선(Normals): 버텍스의 표면 방향을 나타내는 벡터 입니다. 

    5. 탄젠트와 바이탄젠트(Tangents & BiTangents) : 법선과 함께 표면의 로컬 좌표계를 형성하는 벡터 입니다. 

    6. 본 가중치(Bone Weights): 캐릭터 애니메이션에서, 각 버텍스가 여러 본에 얼마나 영향을 받는지 정의합니다. 

     

    버텍스 버퍼(vertex Buffer)는 위의 버텍스의 모든 속성을 저장하는 메모리를 의미합니다. 

    따라서 우리는 버텍스 버퍼를 통해 버텍스의 속성값들을 전달하여 3d 모델링을 위해 필요한 정보들을 제공할 수 있습니다. 

    인덱스 버퍼(Index Buffer)를 이용해 버텍스 중복 제거하기 

    인덱스 버퍼는 버텍스 버퍼와 함께 작동하는 보조 데이터 구조로, 베텍스 데이터의 재사용을 가능하게 해줍니다. 

    하나의 사각형을 그린다고 해보죠. 사각형은 두개의 삼각형으로 이루어지는데, 각 삼각형은 3개의 버텍스가 필요합니다.

    따라서 총 6개의 버텍스가 필요하게 됩니다. 

    위의 그림에서 볼 수 있다시피 V0,V3와 V2,V5는 같은 버텍스이지만

    각각의 삼각형을 표현하기 위해 중복되어 있으며 이는 메모리 낭비를 초래합니다. 

     

    하지만 인덱스 버퍼를 사용하면 고유한 버텍스만 버텍스 버퍼에 저장하고,

    인덱스 버퍼에는 이 버텍스들을 참조하는 인덱스 값만 저장합니다. 

    인덱스 버퍼를 통해 각 삼각형을 그리는데 필요한 버텍스를 찾을 수 있으므로 중복된 버텍스를 저장할 필요가 없어집니다. 

    이 접근 방식을 통해 버텍스 버퍼는 고유한 버텍스만 저장하고 인덱스 버퍼는 이러한 버텍스를 삼각형으로 구성하는 역할을 합니다.

    댓글

Designed by Tistory.