Version: 2020.1
언어: 한국어
절차적 메시 지오메트리
메시 클래스 사용

메시의 구조

메시는 3D 공간에 배열된 삼각형들로 구성되며, 솔리드 오브젝트인 것 같은 인상을 만들어 줍니다. 하나의 삼각형은 세 개의 점, 즉 정점에 의해 정의됩니다. Mesh 클래스에서 모든 정점은 하나의 배열에 저장되고, 각각의 삼각형은 정점 배열의 인덱스에 해당하는 세 개의 정수에 의해 정의됩니다. 또한 삼각형들 역시 하나의 정수형 배열에 모두 저장됩니다. 배열의 시작부터 정수 세 개씩 묶어 그룹을 이루는데, 예를 들어 배열의 0, 1, 2번째 요소는 첫 번째 삼각형, 3, 4, 5번째 요소는 두 번째 삼각형을 정의하는 방식입니다. 모든 정점은 여러 삼각형을 정의하기 위해 얼마든지 재사용할 수 있지만, 그러지 않는 편이 좋을 수도 있다는 점을 아래에서 설명합니다.

조명 및 노멀

삼각형만으로도 오브젝트의 기본 형태를 충분히 정의할 수 있지만, 대부분의 경우 메시를 디스플레이하기 위한 추가 정보가 필요합니다. 조명에 맞추어 오브젝트가 제대로 셰이딩되기 위해서는 각 꼭지점에 대한 노멀(법선) 벡터가 제공되어야 합니다. 노멀은 바깥쪽을 향하는 벡터이며, 해당 정점 포지션에서 시작하여 메시 표면에 대해 수직을 이룹니다. 셰이딩 계산 시 각 정점의 노멀을 입사하는 광원의 방향과 비교하게 되는데, 입사광의 방향 역시 하나의 벡터입니다. 만약 두 벡터가 완전히 평행인 경우, 표면의 해당 위치는 광원을 정면으로 받게 되며 따라서 광원의 최대 밝기가 셰이딩에 전부 사용됩니다. 노멀 벡터에 대해 수직, 즉 표면에 평행한 방향에서 광원이 들어오면 표면의 해당 포지션에는 광원이 전혀 비추어지지 않습니다. 일반적으로 광원은 노멀에 대해 비스듬한 방향으로 들어오게 되며, 따라서 이 각도에 따라 최대 밝기와 완전한 어두움의 사이에서 셰이딩이 이루어집니다.

메시는 삼각형으로 이루어지기 때문에, 모서리에 위치한 노멀은 단순히 해당 삼각형의 표면에 수직이라고 볼 수도 있습니다. 그러나 노멀은 실제로는 해당 삼각형 전체에 걸쳐 보간된 모서리 사이의 중간 위치 표면에 방향을 지정해 줍니다. 만약 세 개의 노멀 모두가 같은 방향을 가리킨다면 이 삼각형 전체에 조명이 균등하게 주어집니다. 각각의 삼각형이 균등하게 셰이딩될 경우 그 윤곽이 또렷하게 두드러지는 효과가 나타나며, 큐브 또는 각진 모서리가 있는 솔리드 모델에는 이런 효과가 필요합니다. 그러나 휘어진 표면과 흡사해지도록 부드러운 셰이딩을 만들기 위해서는 노멀을 보간하는 방법을 사용할 수 있습니다.

각진 모서리를 표현하기 위해서는 맞닿은 두 삼각형에 대해 각각의 노멀이 필요하므로, 각 모서리의 정점 수가 두 배가 되어야 합니다. 곡면에서는 보통 모서리를 따라 정점들이 공유됩니다. 그러나 공유된 노멀이 어느 방향을 향하는 것이 최적인지 결정하기 위해서는 직감을 다소 활용해야 할 때도 있습니다. 단순히 해당 지점을 둘러싼 주변 삼각형 표면의 노멀을 평균 내어 공유된 노멀을 계산할 수도 있습니다. 그러나 구체와 같은 오브젝트의 경우 노멀은 그저 구의 중심에서 바로 바깥방향으로 뻗어나가면 됩니다.

Mesh.RecalculateNormals를 호출하여 메시 지오메트리의 “의미”를 가정하는 방법을 통해 Unity가 노멀의 방향을 산출해 내도록 할 수 있습니다. 즉, 삼각형들이 정점을 공유할 경우 부드럽게 연결된 표면을 나타내고, 정점이 두 배로 존재하는 경우 각진 모서리를 나타낸다고 가정합니다. 이렇게 추정하면 대부분의 경우 문제가 없지만, 표면이 부드럽게 연결되더라도 정점 수를 두 배로 해야 할 필요가 있는 일부 텍스처링 상황에서는 RecalculateNormals 값이 잘못될 수 있습니다.

텍스처링

모델은 조명 외에도 일반적으로 텍스처를 활용하여 표면에 세밀한 디테일을 표현할 수 있습니다. 텍스처는 신축성 있는 고무 시트에 프린트한 이미지와 유사합니다. 메시의 각 삼각형에 대해 텍스처 이미지에 삼각형 영역이 정의되며, 이 텍스처 삼각형을 해당 메시 삼각형에 맞게 늘려 “고정”합니다. 이를 위해 각 정점은 고정될 이미지 위치의 좌표를 저장해야 합니다. 이 좌표는 2차원 좌표이며 값의 범위는 0–1입니다(0은 이미지의 좌측 하단, 1은 우측 상단을 의미). 이 좌표를 3D 공간의 데카르트 좌표와 혼동하지 않기 위해, 일반적으로 사용하는 (X, Y) 대신 (U, V)로 지칭하고, 따라서 보통 UV 좌표라고 부릅니다.

노멀과 마찬가지로 각 정점마다 고유한 텍스처 좌표가 존재합니다. 따라서 모서리를 중심으로 양쪽 면에 대해 각각 다른 UV 좌표를 얻기 위해 정점을 이중화해야 하는 경우가 있습니다. 쉬운 예로, 인접한 두 삼각형이 텍스처 이미지의 불연속적인 일부분(얼굴 텍스처 위에 그려진 눈 등)을 사용하는 경우가 있습니다. 또한 대부분의 오브젝트는 완전히 닫힌 볼륨으로, 텍스처가 감싸면서 서로 연결되는 “경계 부분”이 필요합니다. 경계 부분을 기준으로 어느 한 쪽 면의 UV 좌표값은 다른쪽 면의 좌표값과 달라집니다.

관련 항목

절차적 메시 지오메트리
메시 클래스 사용