godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.12k stars 69 forks source link

Add a way to convert animation tracks to Bezier Curve tracks #9597

Open Arnklit opened 4 months ago

Arnklit commented 4 months ago

Describe the project you are working on

A game in production

Describe the problem or limitation you are having in your project

Sometimes animators start out using regular keys for a track, but realise they need more control and move over to a bezier curve track. Currently you cannot convert the exiting track, so you have to recreate it manually.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

An option in to "Convert track to Bezier Curves track" when selecting a regular track. possibly the option to go the other way as well.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

This could be added to the Edit menu in the Animation Player.

image

If this enhancement will not be used often, can it be worked around with a few lines of script?

This would be used often.

Is there a reason why this should be core and not an add-on in the asset library?

I think this would fall under expected features that should be built in.

fire commented 4 months ago

See also -- Unify bezier animations in the animation player #392

TokageItLab commented 4 months ago

This is technically possible, but ideally it should be the opposite.

BezierTrack has a significant performance bottleneck in that it performs complements that require 3D computation at runtime. In other words, I believe that the internal values of BezierTrack should be baked in the same way as Path2D/3D and treated like ValueTrack, and BezierTrack should be integrated into ValueTrack as an InterpolateType option of ValueTrack.

However, due to fundamental trackpath differences, the conversion from ValueTrack->BezierTrack is only possible one way. I believe that their integration should take place in 5.0, where compatibility breakdowns or large scale converters are a prerequisite.

So finally, this proposal seems valid as a work-around that works at least for now (4.x), but I don't know if it should be supported in the core, as it should be possible enough to do it with add-ons. If the demand is too much, I have no reason to oppose it.