void UAnimCompress_BitwiseCompressOnly::DoReduction(UAnimSequence* AnimSeq, const TArray<FBoneData>& BoneData) { #if WITH_EDITORONLY_DATA // split the raw data into tracks TArray<FTranslationTrack> TranslationData; TArray<FRotationTrack> RotationData; TArray<FScaleTrack> ScaleData; SeparateRawDataIntoTracks( AnimSeq->RawAnimationData, AnimSeq->SequenceLength, TranslationData, RotationData, ScaleData ); // Remove Translation Keys from tracks marked bAnimRotationOnly FilterAnimRotationOnlyKeys(TranslationData, AnimSeq); // remove obviously redundant keys from the source data FilterTrivialKeys(TranslationData, RotationData, ScaleData, TRANSLATION_ZEROING_THRESHOLD, QUATERNION_ZEROING_THRESHOLD, SCALE_ZEROING_THRESHOLD); // bitwise compress the tracks into the anim sequence buffers BitwiseCompressAnimationTracks( AnimSeq, static_cast<AnimationCompressionFormat>(TranslationCompressionFormat), static_cast<AnimationCompressionFormat>(RotationCompressionFormat), static_cast<AnimationCompressionFormat>(ScaleCompressionFormat), TranslationData, RotationData, ScaleData); // record the proper runtime decompressor to use AnimSeq->KeyEncodingFormat = AKF_ConstantKeyLerp; AnimationFormat_SetInterfaceLinks(*AnimSeq); AnimSeq->CompressionScheme = static_cast<UAnimCompress*>( StaticDuplicateObject( this, AnimSeq, TEXT("None")) ); #endif // WITH_EDITORONLY_DATA }
void UAnimCompress_RemoveLinearKeys::FilterBeforeMainKeyRemoval( UAnimSequence* AnimSeq, const TArray<FBoneData>& BoneData, TArray<FTranslationTrack>& TranslationData, TArray<FRotationTrack>& RotationData, TArray<FScaleTrack>& ScaleData) { // remove obviously redundant keys from the source data FilterTrivialKeys(TranslationData, RotationData, ScaleData, TRANSLATION_ZEROING_THRESHOLD, QUATERNION_ZEROING_THRESHOLD, SCALE_ZEROING_THRESHOLD); }