godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
89.58k stars 20.74k forks source link

Animation truncated/cut short/incomplete when importing from blender .blend file. #91340

Open jitspoe opened 5 months ago

jitspoe commented 5 months ago

Tested versions

v4.2.2.stable.official [15073afe3]

System information

Windows 10, Vulkan forward +, Nvidia 3070

Issue description

One of the looping animations in my .blend file is cut short, so it only plays about 1/4 of the animation both in game and in the blender import preview window. Exporting to glb or gltf functions normally and includes the full animation. Seems the gltf file in the .import, though is cut short.

Steps to reproduce

Not sure what specifically triggers it, but see example below:

Minimal reproduction project (MRP)

test_anim_cut_short.zip

jitspoe commented 5 months ago

Ok, I've figured out the issue. It seems godot exports with "limit playback to range" enabled (or something like that), so if you're currently working on a short looping animation, and have the frame range set to something shorter than your longer animations, the longer animations get cut short.

To work around the issue, se the frame range to the longest animation you have:

image

Edit: Alternatively, you can disable "Limit Playback" in the import settings:

image

Took me a while to find this and figure out it was related to the animation length. I feel like this should be disabled by default and renamed to "Limit playback length" so it's more obvious what it does.

jitspoe commented 3 months ago

Ok, so I've discovered an issue with disabling Limit Playback. This might be a bit of a rare case, but to get perfect cycling animations for things like run or swim cycles, I put the cycles modifier on my animation curves and mirror duplicate the alternate step and offset it to the frames before 0 so the cycle is perfectly seamless.

image

If I have limit playback disabled when importing this, it actually starts the animation on the negative frames rather than at 0. These frames cannot be played within blender, so the result is different from the blender animation and usually results in a pop.

So here are the 2 scenarios where things break: 1) Limit playback is enabled and sometimes longer animations get cut off if you're testing shorter cycle animations and have the end frame set shorter than some of your animations. 2) Limit playback is disabled and sometimes animations that have negative frames (for the purpose of cycling animations) get additional frames added to the animation.

Suggestion: Disable limit playback by default and (add an option, enabled by default to) ignore frames with negative values on import.