본문으로 건너뛰기
CHOI HONGSU
1 min read

애니메이션 압축

 

Stream 커브를 Constant로 변환하는 RDP 압축 + 미싱 바인딩 제거로 AnimationClip 에셋 용량을 자동 감소시키는 Unity 에디터 툴

Problem

캐릭터 AnimationClip 에셋 용량이 과도하게 크다.

  • 실제로 값이 변하지 않는 커브도 Stream(키프레임 기반)으로 저장되어 낭비

  • 캐릭터 리그가 변경되면서 사라진 본/컴포넌트 경로의 바인딩이 클립에 잔류

  • 수백 개 클립을 수작업으로 최적화하는 것은 현실적으로 불가능

     

제약

  • 압축 시 애니메이션 품질이 달라지면 안 됨 — tolerance 초과 시 원본 자동 유지
  • 기존에 Linear Tangent로 변환하다 애니메이션이 뚝뚝 끊기는 문제가 있었

Implementation

  1. 01

    1. RDP 키프레임 압축

    변화량이 없거나 허용 오차(tolerance) 이내인 커브를 Stream → Constant로 전환.
    압축 후 실제 커브 오차를 검증해 tolerance 초과 시 원본을 자동으로 유지.

    • clip.SetCurve() 대신 SetEditorCurve 통일 → YAML 포맷 중복 방지 (기존 방식에서 오히려 용량이 증가하는 버그 수정)
    • Tangent: LinearClampedAuto로 변경 — 이전에 끊기던 문제 해결, 오차 허용 범위도 더 넉넉하게 설정 가능
    • Weighted 모드 제거 범위를 전체 비-Rotation 커브로 확대
  2. 02

    2. 미싱 바인딩 제거

    프리팹에 더 이상 존재하지 않는 본/컴포넌트 경로 바인딩을 자동 감지 후 제거.

    • Animation/Prefab/ 폴더 매핑으로 프리팹 자동 탐색
    • Rotation 포함 전체 커브 + ObjectReference 커브(Sprite swap 등) 처리
    • 다른 캐릭터 폴더 혼합 선택 시 안전장치 포함 — 쿠키 단위(캐릭터 폴더 단위)로 실행해야 정상 동작
  3. 03

    3. 안전 설계

    • Scale 제거, 미싱 바인딩 제거 등 위험 옵션은 기본 OFF
    • "테스트 실행" 버튼 — 실제 적용 전 결과 미리 확인
    • 설정값 EditorPrefs 자동 저장 (창 닫아도 유지)

Conclusion

결과

단일 클립 (CH_MelonSoda_A001_Emotion_Happy_01)

압축 전압축 후감소
파일 크기468.3 KB290.9 KB−37.9%
Stream 커브 수257206−51
Constant 커브 수263314+51

배치 처리 (CH_MelonSoda 50개 클립)

수치
처리 클립 수50개
키프레임565,028 → 231,918 (−333,110)
바인딩 수26,891
제거된 바인딩7,839

Before / After

압축 전/후

 

기본값(0.0005) 압축 전/후

BEFORE
Before
AFTER
After

Tradeoffs & Future Work

Tradeoffs

  • 미싱 바인딩 제거는 반드시 캐릭터 폴더 단위로 실행해야 함 — 여러 캐릭터 혼합 선택 시 오탐 가능
  • Tolerance 기본값(0.0005)은 대부분의 캐릭터에 적합하나 특수 모션은 별도 확인 필요

Future Work

  • 전체 캐릭터 공용 에디터 툴 — 애니팀이 직접 사용하는 셀프서비스 구조
애니메이션 압축 · Cookie Run: Oven Smash · Choi Hongsu · Hongsu