Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
138 stars 2 forks source link

ValueTimeline For Dynamic Animations #1113

Closed lxw404 closed 1 month ago

lxw404 commented 9 months ago

Is your feature request related to a problem? Please describe.

Currently it is very tedious to create even mildly complex animations in game or to incorporate animations which are exported from animation software which are static in nature.

It would be much more convenient to be able to dynamically construct a timeline of keyframe values along with interpolation modes directly and blend between these.

Although we have ValueGradientDriver and its greatest strength is the ability to dynamically change keyframes+values, it currently lacks the flexibility of being able to specify interpolation modes/curves per keyframe, making it unsuitable for precise animation. It also lacks the ability to be constructed via existing animation data along with organizational issues which make it unwieldly for any large number of keyframes.

Describe the solution you'd like

There should be some way of allowing users to dynamically construct a chronologically sorted timeline of keyframe values that target specific fields, each keyframe storing the target values, its interpolation mode, and handles in the case of curves. All of these keyframes should be dynamically editable to allow for flexibility in tweaking the animation programmatically, or even procedurally generating it.

Additionally, there should be a way of separating "Tracks" which represent different states of animation for the same target value, as well as a way to combine such tracks. In Blender this is done with the NLA track editor, in other such game engines this is commonly done via BlendTrees or similar.

It would be especially nice if this could in some way incorporate existing imported static animations. (I'm sure there are other sub-features of such a system which are interleaved with these, however there are the main ones I can think of at the moment)

Describe alternatives you've considered

The current methodologies of animation in Resonite are split into 3 categories:

These all suffer from various shortcomings including:

Additional Context

Although I prefer the reactivity of procedural animation, sometimes traditional animation is much more efficient and preferred for reducing complexity, however it's also just as important to sprinkle in procedural elements to react in ways which enhance its grounding with environment in which it exists.

Hopefully a solution to this presents a way to harmoniously bridge these approaches into one powerful solution for creators to use.

stiefeljackal commented 9 months ago

There should be some way of allowing users to dynamically construct a chronologically sorted timeline of keyframe values that target specific fields, each keyframe storing the target values, its interpolation mode, and handles in the case of curves.

What you are describing there is AnimJ, a JSON format of AnimX, where it contains the tracks that house the keyframes, the timings, and the curve interpolations to drive fields. You cannot construct AnimJ inside Resonite, but you can using a text or code editor and then drag the .animj file into Resonite. The CJ New Year 2024 Party used AnimJ to create the drone show. Actual drone software was used to produce the tracks, keyframes, and interpolations in a different format which was then translated into AnimJ.

The documentation for AnimJ used to be present somewhere, but it is currently “unavailable” at this time. Only a small number of people know about it.

As mentioned, the only caveat is that you can only create the required AnimJ file outside of Resonite, so a way to either create it within the game or modify the AnimX asset in the game might be cool.

lxw404 commented 9 months ago

I am well aware of AnimJ, however it has the exact caveats mentioned above of the methodologies listed. As you point out this can not be constructed nor modified inside of Resonite after its creation, and as such I would treat it the same as a static animation workflow.

What I am requesting specifically is a dynamic solution to building and blending animations within Resonite itself (which may possibly include the ability to incorporate imported static AnimJ/other such static animations allowing them to be modified outside of their original construction as an aside).

stiefeljackal commented 9 months ago

What I am requesting specifically is a dynamic solution to building and blending animations within Resonite itself (which may possibly include the ability to incorporate imported static AnimJ/other such static animations allowing them to be modified outside of their original construction as an aside).

I understood that. That is why I included the last sentence in my original post since you wanted to modify the animation within Resonite itself, which I am all for. Having this ability will help avoid getting out of VR.

CometKuma commented 1 month ago

I highly agree with this feature request. Having an animation creator/editor with support for keyframes and interpolation would vastly increase Resonite's flexibility in many ways be it visually or functionally. It would also prevent alienation to those coming in from using other 3D artist software or game development software as keyframing is a feature in almost every one. To add something onto this post: I'd love the ability to animate not just position, rotation and scale-- but also values and objects such as color, lights, materials and even slots themselves.

ProbablePrime commented 1 month ago

This is superseded by Froox's issue here: #1545