Search
🧑‍🤝‍🧑

Crowd Animation (VAT)

태그
Animation
Optimization
1 more property

제작 의도

대규모 군중 씬을 최대한의 품질로 구현하기 위해 연구 및 개발을 진행하고 정리했습니다.

영상

구성 / 설명

언리얼 엔진 군중 애니메이션

언리얼 엔진은 스켈레탈 메쉬의 인스턴싱을 제공하지 않습니다.
언리얼 엔진에서 군중 애니메이션을 하기 위해서는 스켈레탈 메쉬를 인스턴스 스태틱 메쉬로 변환하여 버텍스 애니메이션 텍스쳐를 사용해야 최적화가 가능합니다.
다른 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 형태로 변경)

참고

이미지
사이트
영상