본문 바로가기

Unreal Engine

Unreal Engine의 Skeletal Mesh 와 Vertex Attributes

메시의 각 Vertex 마다 들어가는 데이터를 Vertex Attribute라고 한다. Mesh의 유형애 따라 필요한 데이터가 달라진다.

SkinnedMesh의 Attribute 내용은 다음과 같다.

 

GPUSkinVertexFactory.ush

Attribute 0에는 버텍스의 위치가, 

Attribute 1과 2에는 tangent x와 z가 저장된다. (Y는 이후 이 둘에 의해 계산된다)

 

Attribute 3과 4에는 각각 bone의 index와 각 bone의 weight가 저장된다.

버텍스당 영향을 미칠 수 있는 bone의 갯수가 4개 (또는 8개)를 넘어갈 경우, Attribute 14와 15를 각각 추가적으로 사용하게 된다.

 

Attribute 5에는 UV 좌표가 저장된다. 만약 머터리얼에서 추가적인 UV 좌표를 사용하고 있다면, Attribute 6, 7, 8에 추가된다. uv 채널은 Skinned Mesh 유형에서는 최대 4개까지 사용할 수 있다.

머터리얼에서 UV 채널을 0번만 사용하고 있다면, 그 이외의 채널은 메시에 저장되어 있더라도, 셰이더에 전달되지 않는다.

 

Attribute 13에는 Vertex Color가 저장된다.
(머터리얼에서 버텍스 컬러를 사용하지 않고 있다면, 셰이더로 전달되지 않는다.)

 

Attributes 최적화

필요 없는 데이터들을 줄여서 버텍스 당 들어가는 데이터들을 최적화 해볼 수 있다.

버텍스당 영향을 미치는 Bone의 갯수를 2개로 제한하면, Attribute 14, 15를 생략할 수 있다.

이는 프로젝트 셋팅에서 변경할 수 있다. 런타임에는 변경할 수 없고, 모든 셰이더 컴파일을 다시 해야한다.

적용해 보면, 아주 복잡하게 스키닝 된 경우가 아니라면, 퀄리티 하락 없이 Attribute만 제거된 것을 볼 수 있다.

Bone 인덱스와 Weight정보를 전달하는 데 Attribute 3, 4번만을 사용하고 있다.