UDN
Search public documentation:

AnimationCompressionTechnicalGuideKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 애니메이션 > 애니메이션 압축 테크니컬 가이드

애니메이션 압축 테크니컬 가이드


문서 변경내역: Jeff Wilson 작성. 홍성진 번역.

개요


애니메이션 압축을 활용하는 것은 언리얼 엔진 3에서는 간단한 일입니다. 여기서는 그에 관련된 메인 클래스와 데이터 구조를 다뤄 보고, 애니메이션 압축 사용법이 어떻게 돌아가는지에 대해 개괄적으로 알아보도록 하겠습니다.

다양한 압축 알고리즘에 대한 세부사항은 애니메이션 압축 알고리즘 페이지를,

애니메이션 압축 미리보기나 변경용 에디터 콘트롤에 대한 정보는 Animation Compression KR 페이지를 참고해 주시기 바랍니다.

중요한 용어


아래는 먼저 이해해 두면 이 문서를 이해하는 데 도움이 되는 몇 가지 중요 용어입니다:

  • (Key) - 일정한 시간에 개별 본의 위치(position)와 회전(rotation)을 정의하는 데이터 점 세트입니다.
  • 트랙 (Track) - 시간에 따른 개별 본의 모션을 서술하는 키 세트입니다.
  • 애님시퀸스 (AnimSequence) - 전체 스켈레톤을 구성하는 본 전부의 모션을 정의하는 트랙 세트입니다.
  • 애님셋 (AnimSet) - 같은 스켈레톤에서 전부 재생되는 관련 애님시퀸스 세트입니다.

키 압축 포맷


이이서 내부적으로는 열거형(enum) AnimationCompressionFormat (애니메이션 압축 포맷)으로 나타나는 각 압축 포맷에 대한 설명이 있겠습니다. 요 열거형은 UAnimSequence (U 애님 시퀸스)의 TranslationCompressionFormat (옮기기 압축 포맷) 및 RotationCompressionFormat (회전 압축 포맷) 멤버에 할당되며, AnimSequence::CompressionScheme (애님 시퀸스::압축 스키마) 멤버와 함께 하여 애니메이션 시퀸스에 적용된 키 감소 및 압축 종류를 나타냅니다. 최대 정밀도에서 옮기기는 3-벡터(3 x 32비트 플로트)로 저장되는 반면, 회전은 쿼터니언(4 x 32비트 플로트)로 저장됩니다. 주의할 점은 현재 압축 알고리즘 세트는 회전 정보만 압축하며, 옮기기는 압축하지 않는다는 점입니다.

다음 중 ACF_None을 제외한 포맷은 회전 데이터에만 적용됩니다. 모든 포맷에 대해 정규화된 쿼터니언의 W 좌표는 가상의 좌표로부터 파생되며, 다음과 같이 저장됩니다:

  • ACF_None - 옮기기/회전 데이터는 최대 정밀도로 저장됩니다. (옮기기에는 3 x 32비트, 회전에는 4 x 32비트)
  • ACF_Float96NoW - 회전 키의 가상 좌표는 3 x 32비트 플로트로 저장됩니다.
  • ACF_Fixed48NoW - 회전 키의 가상 좌표는 3 x 16비트 양자화(quantized) 플로트로 저장됩니다.
  • ACF_IntervalFixed32NoW - 회전 키의 가상 좌표는 X와 Y는 11비트, Z는 10비트로 양자화하여 저장됩니다만, 그 양자화 범위는 해당 트랙에 대한 좌표값 범위의 간격에 리매핑된 것입니다.
  • ACF_Fixed32NoW - 회전 키의 가상 좌표는 X와 Y는 11비트, Z는 10비트로 양자화하여 저장됩니다.
  • ACF_Float32NoW - 회전 키의 가상 좌표는 감소된 정밀도의 플로트로 저장됩니다; X와 Y는 7e3, Z는 6e3 입니다.

기어즈 오브 워에서 엔진에 애니메이션을 30Hz 로 가져온 다음, Remove Every Second Key (하나 걸러 한키 지워) 기법을 사용하여 키를 15Hz 로 감소시켰습니다. 기어즈에서는 범용 솔루션으로써 ACF_Fixed48NoW (가상 쿼터니언 성분이 16비트 고정점 값으로 저장되는) 압축을 사용했습니다. 다수의 모션에는 ACF_IntervalFixed32NoW (가상 쿼터니언 성분이 11-11-10비트 고정점으로 저장되는) 포맷을 사용했습니다. 또한 시네마틱 클로즈업에서의 선택 모션 약간에는 손실을 느낄 수 없는 ACF_Float96NoW (가상 쿼터니언 성분이 32비트 부동 소수점 값으로 저장되는) 포맷을 사용했습니다.

요약하자면:

  • ACF_Float96NoW - 손실을 느낄 수 없는, 낮은 압축
  • ACF_Fixed48NoW - 중고화질의, 보통 압축
  • ACF_IntervalFixed32NoW - 중간품질의, 높은 압축

키 감소 스키마


키 감소 스키마란 언리얼 엔진 3 에서 키프레임 탈락에 사용되는 알고리즘입니다. 키 감소 스키마는 RawAnimData 멤버에 저장된 날 애니메이션 데이터를 분리된 TranslationData 및 RotationData 스트림 속으로 변형해 넣습니다. 이러한 새 스트림은 날 데이터에 있던 것과는 판이하게 다른 키를 담을 수 있습니다. 전형적인 스키마로는 불필요한 키를 제거하고, 기존 키를 리샘플링하고, 등등일 겁니다. 그리고서 이러한 키는 압축 포맷 부분에 설명된 요청 옮기기 및 회전 포맷으로 압축됩니다.

현재 언리얼 엔진 3 에 내장된 키 감소 스키마는 다음과 같습니다:

  • Bitwise Compress Only (비트 압축만) - 키 감소는 수행되지 않습니다. 다른 말로, 지정된 비트관련 압축 포맷으로만 압축된다는 뜻입니다.
  • Remove Trivial Keys (사소한 키 제거) - 트랙에서 값이 같은 키는 전부 하나의 키로 줄입니다.
  • Remove Every Second Key (하나 걸러 한키 제거) - 짝수번째 키를 탈락시킵니다.
  • Revert To Raw (날 데이터로 되돌리기) - 비트관련 압축으로는 옮기기/회전 키를 출력하지 않은 채의 날 애니메이션 데이터를 복원시킵니다.