메쉬(Mesh)의 구조

메쉬(mesh)는 고체의 효과를 만들어 내기위해 3D 공간에 놓여있는 삼각형들로 이루저져 있습니다. 하나의 삼각형은 그 삼각형의 세 모서리의 점들 또는 꼭지점으로 정의 되어 집니다. 메쉬 클래스에서 그 꼭지점들은 모두 하나의 배열(array)에 저장되어 있으며 각 삼각형은 꼭지점 배열의 인덱스에 해당하는 세개의 정수를 이용하여 지정되어 집니다. 삼각형들은 하나의 정수 배열에 함께 저장되며 그 정수들은 배열을 시작으로 부터 세개씩 그룹지어지게 됩니다. 그래서 요소 0,1,2는 첫번째 삼각형을, 요소 3,4,5는 두번째 삼각형을 정의하는 식이 됩니다. 어떤 주어진 꼭지점도 여러 삼각형에서 재사용 될 수 있으나 아래에 왜 이것이 좋지 않으지를 설명해줍니다.

빛(Lighting) 과 법선(Normals)

삼각형들은 물체의 기본 모형을 정의하는데 충분하지만 대부분의 경우 메쉬를 보여주기 위해서는 추가 정보가 필요로 합니다. 물체가 빛에 정확히 그림져지기 위해서는 각 벡터에 법선 벡터(normal vector)가 주어져야 합니다. 법선(normal)은 연관된 꼭지점의 위치에서 메쉬의 표면에서 직각이고 바깥쪽을 향하는 벡터를 말합니다. 그림자 계산 중에 각 꼭지점에서의 법선 벡터는 또 다른 벡터인 들어오는 빛의 방향과 비교되어 집니다. 이 두 벡터가 완벽하게 평행이면 그 표면은 빛을 정면(head-on)으로 받게되어 빛의 최대 밝기가 그림자를 형성하는 것에 사용되어집니다. 그 법선 벡터에 평행(side-on)으로 들어오는 빛은 그 표면에 아무런 조명을 주지 못하게 됩니다. 보통 빛은 그 법선 벡터에 하나의 각도로 도착하게 되며 그림자 형성은 각도에 따라 최대 밝기나 완전한 어둠사이에서 이루어게 됩니다.

메쉬는 삼각형들로 이루어져 있기때문에 모서리의 법선들이 단순히 삼각형의 평면에 수직이라 보여질 수 있습니다. 하지만 사실 모서리 사이의 중간 지점들의 표면에 방향을 주기위해 법선들은 삼각형 전반에 걸쳐 삽입되어 있습니다. 만약 세개의 모든 법선들이 같은 방향을 가리키고 있다면 그 삼각형은 균일하게 빛이 조명되어 질 것입니다. 균일하게 그림자가 형성된 다른 삼각형들이 가지는 효과는 변(edge)에서 매우 뚜렷하고 분명하게 될 것이라는 것입니다. 이것이 정확하게 정육면체 모델이나 아주 날카로운 변을 가진 물체들에게 필요한 것이지만 법선의 삽입은 곡선의 표면을 나타내주기 위해 부드러운 그림자 형성을 위해 사용되어 질 수 있습니다.

근접한 두 삼각형은 모두 그들의 각자의 법선을 필요로 할 것이기 때문에 뚜렷한 변을 나타내기 위해서는 각 변의 꼭지점을 구부릴 필요가 있습니다. 곡선 표면에서는 꼭지점이 변을 따라서 공유될 것이지만 공유된 법선의 최적의 방향을 정하기 위해서는 약간의 직관이 필요로 합니다. 하나의 법선은 단순히 둘러쌓고 있는 삼각형 평면 법선들의 평균일 수 있습니다. 하지만 구와 같은 물체에선 법선들은 단순히 구의 중심에서 바깥쪽을 향하게 됩니다.

Mesh.RecalculateNormals을 불러줌으로써 사용자가 메쉬 기하학의 의미에 대한 가정들을 만들므로써 Unity가 법선의 방향을 계산하게 할 수 있습니다. 그 가정들은 삼각형들 사이에서 공유되는 꼭지점들은 부드러운 표면을 가리키는 반면 구부러진 꼭지점들은 뚜렷한 변을 나타냅니다.

대부분의 경우 이것은 나쁜 추정법은 아닌 반면RecalculateNormals은 표면이 부드러워도 꼭지점들이 접혀야하는 텍스쳐링(texturing)인 상황에 의해 오류를 범할수도 있습니다

텍스처링(Texturing)

모델은더불어 물체의 상세한 표면을 만들기위해 빛뿐 아니라 텍스처링을 사용할 것입니다. 텍스처(texture)는 늘어나는 고무판에 그려져 있는 이미지라고 할 수 있습니다. 각 메쉬 삼각형에는 텍스쳐 이미지의 삼각형 영역이 정의 되어있고 그 텍스쳐 삼각형은 그 메쉬 삼각형에 맞춰지기 위해 늘려져 고정(“pinned”)되어 있습니다. 이렇게 하기 위해서는 각 꼭지점은 그 메쉬 삼각형에 고정될 그 이미지의 위치 좌표를 저장해야 합니다. 이 좌표는 2D이며 0부터 1까지의 범위를 가집니다.(0은 이미지의 왼쪽아래 부분을, 1은 오른쪽 윗부분을 나타냅니다.) 3D에서의 직교 좌표(Cartesian coordinates)와의 혼동을 피하기위해 이 좌표를 익숙한 X와Y보단 U와V로 나타내며 이것을 흔히 UV좌표라 부릅니다.

텍스쳐 좌표는 법선처럼 각 꼭지점에서 고유하기 때문에 하나의 변에서 다른 UV값을 가지기위해 꼭지점을 구부릴 경우도 있습니다. 두개의 인접한 삼각형에서 텍스쳐 이미지(말하자면 얼굴 텍스쳐에서 눈)의 연속되지 않은 부분을 사용하는 것이 하나의 명확한 예제입니다. 또한 대부분의 부피를 포함하는 물체들은 텍스쳐들이 둘러싸고 서로 연계되어있는 seam을 필요로 합니다. Seam의 한 측면의 UV 값은 다른 측면의 값과 다를 것입니다.

역링크