Some of our animators run into a strange issue.Some bones(biped) have children objects on it(the children objects do not have animation keys on themselves,they are individually purely linked to the parent),in some key frames these bones has big movements(like a fast wielding action).When exported to Unity,in the in-between time between key frames,the children object sometimes shift from the position of their parent,and becomes normal again when reaching the next key frame point.
Why does this happen?Would baking animation keys for every bone on every frame help with this issue?
I’ve not encountered this before in Unity. I have encountered this in Max before though - especially on the biped root (bip).
Once exported into Unity this anomaly is not visible even at 1/10 speed - I believe this is due to the animation curves being re-processed in Unity.
Maybe you are experiencing the same thing (except negatively) when importing into Unity. I know there is a way to turn off this animation curve refactoring, or reduce it, although without Unity in front of me right now I can’t say how specifically to do it.
You also might have compress keyframes enabled under the animations? If so - turn that off.
Last consideration - if you keep experiencing this, since baking keys onto the child objects is a simple process in Max (save before doing this) might want to test it and export to Unity to see if there is any change.
And - last last suggestion, you might consider applying a link controller or position constraint to the child objects instead of direct linking them to the biped bones, although this should make any difference at all when imported into Unity, so only attempt this ‘fix’ last, because it should not result in any change.
Thank you theANMATOR2b for answering.As you suggest,I tried turning off compression,and swtiching to optimal mode,and turning off resample curves,none of them works.
Yes it is not even noticeable at 10% speed.At 100% speed,it is definitely far beyond human eye limit.Maybe they have to let it be.
What you describe sounds like the child bones are trying to keep a “global” position while parent bones move around, which generally cause issues, because the child bones’ animations must compensate for the parent bone moving around, which should always look correct on-frame, but will invariably have imprecisions between frames.
Since humanoid animations are pretty much baked, we make sure that the curves are correct on-frame, but there’s no real way of making sure that the values are completely correct between frames.
One (costly) solution is to export at a high framerate and let the keyframe reduction remove redundant keyframes.
Thanks for clarifying David, I was actually going to suggest increasing the keyframe animation timing in Max and then exporting - even though I’ve never used this ‘fix’ before.
With increasing the fps in Max will the animation have to be scaled to match the same timing of the original 30fps animation, or will Unity take care of this? I know we can reduce the playback speed of an animation in Unity, although I hold strong to the opinion that source assets should represent the final output in Unity as close as possible, except when unless ‘gameplay’ tweaks are used, like slowing down time or something like that.
Edits to assets after leaving content creation tool tend to cause iterative workflow to be time consuming and demoralizing when several iterations are needed to get stuff looking just right.
Thank you David.I tried to rescale the animation to twice the frames,like from 30 frames to 60 frames,the issue then tend to be imperceptible.This will increase the size of animation file like 20% as I test on one animation.