제작 의도
대규모 군중 씬을 최대한의 품질로 구현하기 위해 연구 및 개발을 진행하고 정리했습니다.
영상
구성 / 설명
언리얼 엔진 군중 애니메이션
•
언리얼 엔진은 스켈레탈 메쉬의 인스턴싱을 제공하지 않습니다.
•
언리얼 엔진에서 군중 애니메이션을 하기 위해서는 스켈레탈 메쉬를 인스턴스 스태틱 메쉬로 변환하여 버텍스 애니메이션 텍스쳐를 사용해야 최적화가 가능합니다.
•
다른 DCC 툴의 도움 없이 언리얼 엔진이 제공하는 플러그인으로 제작 가능합니다.
•
인스턴스 스태틱 메시 형태로 배치 시 스태틱 메시 별로 묶어서 렌더링 하기 때문에 드로우 콜 최적화가 가능합니다.
Animation Texture 2가지 방식과 AnimToTexture 플러그인
•
애니메이션을 텍스쳐로 만드는 2가지 방식
1.
Vertex 애니메이션 텍스쳐
•
Vertex 정보와 애니메이션을 함께 저장하기 때문에 Vertex 수가 많아진다면 텍스쳐의 크기가 커짐
•
다양한 캐릭터를 사용할 경우 텍스쳐를 각각 만들어야함
•
Vertex가 적고 공유가 필요 없는 간단한 애니메이션의 경우 유용
•
Bone 방식에 비해 가벼움
2.
Bone 애니메이션 텍스쳐
•
Vertex 정보와 애니메이션이 서로 분리되어 있음
•
Vertex 정보의 텍스쳐는 작은 사이즈로도 Pack 가능
•
애니메이션은 서로 공유가 가능함
•
Vertex 방식에 비해 무거움
•
AnimToTexture 플러그인
◦
특징
▪
Vertex / Bone 방식 2가지 모두 지원합니다.
▪
텍스쳐 해상도는 Bone 개수(가로) x 애니메이션 프레임(세로)으로 구성됩니다.
▪
동일 스켈레톤 구조일 때 애니메이션 텍스쳐 공유가 가능합니다.
▪
1개의 애니메이션 텍스쳐에 다수의 애니메이션을 병합할 수 있습니다.
▪
LOD 메시들도 같은 텍스쳐로 사용 가능합니다. (UV 정보가 깨지지 않을 경우)
◦
주의사항
▪
스켈레탈 메시를 스태틱 메시로 변환 후 Ues Full Precision UVs를 활성화 해야합니다.
▪
Bone Weight 텍스쳐는 캐릭터마다 1개씩 필요합니다.
▪
LOD 추가 시 렌더링 부하를 낮출 수 있습니다.
▪
스태틱 메시를 버텍스 애니메이션 텍스쳐 사용하여 World Position Offset으로 애니메이션 시킬 경우 고스트 현상이 발생할 수 있습니다.
→ 프로젝트 세팅의 Anti-Aliasing Method를 None으로 설정(품질 저하)
→ 또는 Velocity Pass를 Write during base pass로 설정(퍼포먼스 차이 주의)
▪
Virtual Shadow Map 캐쉬 기능으로 그림자 잔상이 남는 현상이 발생할 수 있습니다.
→ 프로젝트 세팅의 Shadow Map Method를 Shadow Maps으로 변경(기존 쉐도우 맵)
→ 또는 r.Shadow.Virtual.Clipmap.FirstLevel 6 이상으로 사용
◦
LOD 생성
▪
스태틱 메시 에디터에서 LOD를 생성 시 버텍스 정보가 깨지므로 아래 방법으로 진행해야 합니다.
1.
스태틱 메시를 복사 후 모델링 모드에서 Simplify를 이용
(Simplifier Type은 Existing Positions로 기존 버텍스 정보를 유지)
2.
LOD 에셋을 익스포트 후 기존 스태틱 메시에 LOD로 임포트
3.
LOD 빌드 세팅을 Ues Full Precision UVs 제외하고 모두 비활성화
◦
AnimToTexture 데이터 에셋
▪
Enforce Power of Two 활성화 / Precision 16Bits 변경하게 되면 애니메이션 품질 향상됩니다.
(데이터 크기가 4배 정도 커지므로 유의해서 사용 / 텍스쳐 Float RGB 형태로 변경)
참고
이미지
사이트
영상

