이 페이지에는 메시에 포함된 사항과 Unity가 메시 클래스에 해당 데이터를 저장하는 방법에 대한 정보가 있습니다.
메시는 다음의 프로퍼티로 정의됩니다.
이 외에도 변형이 가능한 메시에는 다음 사항이 포함됩니다.
버텍스 데이터의 요소는 버텍스 속성이라고 합니다.
모든 버텍스는 다음과 같은 속성을 가질 수 있습니다.
내부적으로 모든 버텍스 데이터는 동일한 크기로 되어 있는 별도의 배열로 저장됩니다. 메시에 10개의 버텍스 포지션이 있는 배열이 포함되어 있는 경우 메시가 사용하는 서로 다른 버텍스 속성에 대한 10개의 요소를 가진 배열도 있습니다.
C#에서 Unity는 VertexAttribute 열거형으로 사용 가능한 버텍스 속성을 설명합니다. Mesh
클래스의 인스턴스에 Mesh.HasVertexAttribute 함수를 사용하여 특정 버텍스 속성이 있는지 확인할 수 있습니다.
버텍스 포지션은 오브젝트 공간의 버텍스 포지션을 나타냅니다.
Unity는 이 값을 사용하여 메시 표면을 결정합니다.
이 버텍스 속성은 모든 메시에 필수적입니다.
Mesh
클래스에서 이 데이터에 액세스하는 가장 간단한 방법은 Mesh.GetVertices와 Mesh.SetVertices를 사용하는 것입니다. Unity는 또한 이 데이터를 Mesh.vertices에 저장하지만 이 구형 프로퍼티는 덜 효율적이고 사용자 친화적입니다.
버텍스 노멀은 버텍스 포지션의 표면에서 바로 “밖으로” 가리키는 방향을 나타냅니다.
Unity는 이 값을 사용하여 광원이 메시 표면을 반사하는 방법을 계산합니다.
이 버텍스 속성은 선택 사항입니다.
Mesh
클래스에서 이 데이터에 액세스하는 가장 간단한 방법은 Mesh.GetNormals와 Mesh.SetNormals를 사용하는 것입니다. Unity는 또한 이 데이터를 Mesh.normals에 저장하지만 이 구형 프로퍼티는 덜 효율적이고 사용자 친화적입니다.
버텍스 탄젠트는 버텍스 포지션에서 표면의 “u”(수평 텍스처) 축을 따라 가리키는 방향을 나타냅니다.
Unity는 4 컴포넌트 벡터에 추가 데이터와 버텍스 탄젠트를 저장합니다. 벡터의 x, y, z 컴포넌트는 탄젠트를 설명하며 벡터의 w 컴포넌트는 해당 방향을 설명합니다. Unity는 w 값을 사용하여 바이노멀을 계산하며 이는 탄젠트와 노멀의 외적입니다.
Unity는 노멀 매핑에 탄젠트와 바이노멀 값을 사용합니다.
이 버텍스 속성은 선택 사항입니다.
Mesh
클래스에서 이 데이터에 액세스하는 가장 간단한 방법은 Mesh.GetTangents와 Mesh.SetTangents를 사용하는 것입니다. Unity는 또한 이 데이터를 Mesh.tangents에 저장하지만 이 구형 프로퍼티는 덜 효율적이고 사용자 친화적입니다.
메시는 텍스처 좌표 세트를 8개까지 포함할 수 있습니다. 텍스처 좌표를 보통 UV라고 하며 그 세트를 채널이라고 합니다.
Unity는 메시 주위의 텍스처를 “래핑”할 때 텍스처 좌표를 사용합니다. UV는 텍스처의 어느 부분이 버텍스 포지션에 있는 메시 표면에 맞게 정렬되는지 가리킵니다.
UV 채널은 보통 첫 번째 채널의 경우 “UV0”이라고 하고 두 번째 채널은 “UV1”이라고 하며 이런 식으로 “UV7”까지 있습니다. 채널은 TEXCOORD0
, TEXCOORD1
이렇게 최대 TEXCOORD7
까지 셰이더 시맨틱에 각각 매핑됩니다.
By default, Unity uses the first channel (UV0) to store UVs for regular textures such as diffuse maps and specular maps. Unity can use the second channel (UV1) to store baked lightmap UVs, and the third channel (UV2) to store input data for real-time lightmap UVs. For more information on lightmap UVs and how Unity uses these channels, see Lightmap UVs.
8개 텍스처 좌표 속성 모두 선택 사항입니다.
Mesh
클래스에서 이 데이터에 액세스하는 가장 간단한 방법은 Mesh.GetUVs와 Mesh.SetUVs를 사용하는 것입니다. Unity는 또한 Mesh.uv, Mesh.uv2, Mesh.uv3에서 최대 Mesh.uv8에 이르는 프로퍼티에 이 데이터를 저장합니다. 이러한 구형 프로퍼티는 덜 효율적이고 사용자 친화적입니다.
버텍스 컬러는 버텍스 기본 컬러(있는 경우)를 나타냅니다.
이 컬러는 메시가 사용할 수도 있는 모든 텍스처에 대해 독립적으로 존재합니다.
이 버텍스 속성은 선택 사항입니다.
In the Mesh
class, the simplest way to access this data is with Mesh.GetColors and Mesh.SetColors. Unity also stores this data in Mesh.colors, but this older property is less efficient and user-friendly.
스킨드 메시에서 블렌드 인덱스는 어느 뼈대가 버텍스에 영향을 미치는지 가리키고 뼈대 가중치는 그러한 뼈대가 버텍스에 영향을 미치는 정도를 설명합니다.
Unity에서 이러한 버텍스 속성은 함께 저장됩니다.
Unity는 블렌드 인덱스와 뼈대 가중치를 사용하여 해당 골격의 움직임을 토대로 스킨드 메시를 변형합니다. 자세한 내용은 스킨드 메시 렌더러를 참조하십시오.
이러한 버텍스 속성은 스킨드 메시에 필수입니다.
In the past, Unity only allowed up to 4 bones to influence a vertex. It stored this data in a BoneWeight struct, in the Mesh.boneWeights array. Now, Unity allows up to 256 bones to influence a vertex. It stores this data in a BoneWeight1 struct, and you can access it with Mesh.GetAllBoneWeights and Mesh.SetBoneWeights. For more information, read the linked API documentation.
토폴로지는 메시에 있는 면의 타입을 설명합니다.
메시의 토폴로지는 인덱스 버퍼의 구조체를 정의하며 이는 버텍스 포지션이 면으로 결합되는 방법을 설명합니다. 토폴로지의 각 타입은 인덱스 배열에서 서로 다른 수의 요소를 사용하여 단일 면을 정의합니다.
Unity가 지원하는 메시 토폴로지는 다음과 같습니다.
참고: 점 토폴로지는 면을 생성하지 않습니다. 대신 Unity는 각 포지션에서 단일 점을 렌더링합니다. 다른 모든 메시 토폴로지는 하나 이상의 인덱스를 사용하여 면이나 가장자리를 생성합니다.
Mesh
클래스에서 Mesh.GetTopology를 사용하여 토폴로지를 가져와 Mesh.SetIndices의 파라미터로 설정합니다.
지원하는 메시 토폴로지에 대한 자세한 내용은 MeshTopology 열거형에 대한 문서를 참조하십시오.
참고: Unity에서 사용하기 전에 다른 모델링 기술(예: NURBS 또는 NURMS/Subdivision Surfaces 모델링)을 사용하는 메시를 모델링 소프트웨어에서 지원하는 포맷으로 전환해야 합니다.
인덱스 배열은 버텍스 포지션 배열의 요소를 참조하는 정수를 포함합니다. 이러한 정수를 인덱스라고 부릅니다.
Unity는 인덱스를 사용하여 버텍스 포지션을 면으로 연결합니다. 각 면을 구성하는 인덱스의 수는 메시의 토폴로지에 따라 다릅니다.
In the Mesh
class, you can get this data with Mesh.GetIndices, and set it with Mesh.SetIndices. Unity also stores this data in Mesh.triangles, but this older property is less efficient and user-friendly.
참고: 점 토폴로지는 면을 생성하지 않습니다. 대신 Unity는 각 포지션에서 단일 점을 렌더링합니다. 다른 모든 메시 토폴로지는 하나 이상의 인덱스를 사용하여 면이나 가장자리를 생성합니다.
예를 들자면 다음의 값을 포함하는 인덱스 배열을 가진 메시의 경우입니다.
0,1,2,3,4,5
메시에 삼각형 토폴로지가 있으면 첫 번째 3가지 요소인 (0, 1, 2)는 하나의 삼각형을 식별하고 다음 3가지 요소인 (3, 4, 5)는 다른 삼각형을 식별합니다. 버텍스가 기여할 수 있는 면의 개수에는 제한이 없습니다. 즉 동일한 버텍스가 인덱스 배열에 여러 번 나타날 수 있습니다. 예를 들어 인덱스 배열에는 다음과 같은 값이 포함될 수 있습니다.
0,1,2,1,2,3
메시에 삼각형 토폴로지가 있으면 첫 번째 3가지 요소인 (0, 1, 2)는 하나의 삼각형을 식별하고 다음 3가지 요소인 (1, 2, 3)은 첫 번째 삼각형과 버텍스를 공유하는 다른 삼각형을 식별합니다.
인덱스 배열에서 각 그룹의 버텍스 순서를 와인딩 순서라고 부릅니다. Unity는 와인딩 순서를 사용하여 면이 전면 방향인지 또는 후면 방향인지 결정하고 면을 렌더링해야 하는지 또는 컬링해야 하는지(렌더링에서 제외)를 결정합니다. 기본적으로 Unity는 전면 방향 폴리곤을 렌더링하고 후면 방향 폴리곤을 컬링합니다. Unity는 시계 방향으로 와인딩 순서를 사용합니다. 즉 Unity가 시계 방향으로 인덱스를 연결하는 모든 면이 전면 방향이라고 간주합니다.
위의 다이어그램은 Unity가 와인딩 순서를 사용하는 방법을 나타냅니다. 각 면의 버텍스 순서는 해당 면의 노멀 방향을 결정하며 Unity는 이를 현재 카메라 관점의 전방 방향과 비교합니다. 노멀이 현재 카메라의 전방 방향에서 먼 쪽을 가리키면 이는 후면 방향입니다. 더 가까운 삼각형은 현재 원근에 있어서 시계 방향으로 (1, 2, 3) 순서이므로 삼각형이 전면 방향입니다. 더 멀리있는 삼각형은 (4, 5, 6) 순서이며 이 원점에서 반시계 방향이므로 삼각형은 후면 방향입니다.
블렌드 셰이프는 다른 모양으로 변형된 메시 버전을 설명합니다. Unity는 이러한 모양을 보간합니다. Morph 타겟 애니메이션에 블렌드 셰이프를 사용하며 이는 얼굴 애니메이션에 대한 일반적인 기술입니다.
For more information on blend shapes, see Working with blend shapes.
이 데이터는 선택 사항입니다.
스킨드 메시에서 뼈대의 바인드 포즈는 골격이 기본 포지션에 있을 때 해당 포지션을 설명합니다(또한 바인드 포즈 또는 휴식 포즈라고도 함).
In the Mesh
class, you can get and set this data with Mesh.bindposes. Each element contains data for the bone with the same index.
이 데이터는 스킨드 메시에 필수입니다.