README.md

Keyframe Reducer In Unity

Solution

Read the animation curve into several tracks, each track compressed independently.

First, all components of the same variable are combined and stored in the IKeyframeBase implementation.

Then, for each curve, determine whether each keyframe can be interpolated by the two keyframes before and after it, and if so, this frame can be deleted.

Usage

The only interface is

KeyframeReducer reducer = new KeyframeReducer();
reducer.ReduceKeyframes(clip, rotationError, positionError, scaleError, checkData);

You can use the scripts under inside the Editor:

  1. As Context Menu of file (RMB -> Citrine -> Fast Keyframe Reduction):

  1. As Menu Item for selected file (Assets -> Citrine -> Fast Keyframe Reduction):

  1. As Window (Tools -> Citrine -> Keyframe Reducer)

Advanced

You can easily derive curve classes of other data types and compress them by implement IKeyframeBase<T> and AnimationCurveBase<T>, and then add an error function to KeyframeReducer.

Result

Single Curve:

Origin

Reduced

Model Animation:

Model source: https://github.com/fish-ken/unity-animation-compressor

before after
Attack 176.3 168.1
Dash 97.7 87.9
Skill 446.3 415.0
Walk 78.1 74.8

Error Rate: 0.5%

Reference

  • https://www.bzetu.com/344/.html
  • https://en.wikipedia.org/wiki/Cubic_Hermite_spline
  • https://zhuanlan.zhihu.com/p/328712220
  • https://blog.csdn.net/seizeF/article/details/96368503
  • https://github.com/needle-mirror/com.unity.live-capture
  • https://github.com/fish-ken/unity-animation-compressor
Описание

Доработанный и исправленный форк проекта для сжатия анимационных клипов

Конвейеры
0 успешных
0 с ошибкой