diff --git a/LSLib/Granny/ColladaAnimation.cs b/LSLib/Granny/ColladaAnimation.cs index 20e34ac4..09fd98dd 100644 --- a/LSLib/Granny/ColladaAnimation.cs +++ b/LSLib/Granny/ColladaAnimation.cs @@ -154,13 +154,17 @@ public bool ImportFromCollada(animation colladaAnim, Skeleton skeleton) return true; } - public TransformTrack MakeTrack() + public TransformTrack MakeTrack(bool removeTrivialKeys) { var keyframes = KeyframeTrack.FromMatrices(Times, Transforms); - keyframes.RemoveTrivialTranslations(); - keyframes.RemoveTrivialRotations(); - keyframes.RemoveTrivialScales(); - keyframes.RemoveTrivialFrames(); + + if (removeTrivialKeys) + { + keyframes.RemoveTrivialTranslations(); + keyframes.RemoveTrivialRotations(); + keyframes.RemoveTrivialScales(); + keyframes.RemoveTrivialFrames(); + } var track = TransformTrack.FromKeyframes(keyframes); track.Flags = 0; diff --git a/LSLib/Granny/Model/ColladaImporter.cs b/LSLib/Granny/Model/ColladaImporter.cs index 3d987db7..83017b17 100644 --- a/LSLib/Granny/Model/ColladaImporter.cs +++ b/LSLib/Granny/Model/ColladaImporter.cs @@ -688,7 +688,7 @@ public void ImportAnimation(animation colladaAnim, Animation animation, TrackGro if (importAnim.ImportFromCollada(colladaAnim, skeleton)) { duration = Math.Max(duration, importAnim.Duration); - var track = importAnim.MakeTrack(); + var track = importAnim.MakeTrack(Options.RemoveTrivialAnimationKeys); trackGroup.TransformTracks.Add(track); } } diff --git a/LSLib/Granny/Model/Exporter.cs b/LSLib/Granny/Model/Exporter.cs index a94ebe94..891a0a89 100644 --- a/LSLib/Granny/Model/Exporter.cs +++ b/LSLib/Granny/Model/Exporter.cs @@ -103,6 +103,9 @@ public class ExporterOptions // Apply Y-up transforms on skeletons? public bool TransformSkeletons = true; public bool IgnoreUVNaN = false; + // Remove animation keys that are a linear interpolation of the preceding and following keys + // Disabled by default, as D:OS doesn't support sparse knot values in anim curves. + public bool RemoveTrivialAnimationKeys = false; public List DisabledAnimations = new List(); public List DisabledModels = new List();