-
Notifications
You must be signed in to change notification settings - Fork 439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Complete animation support #101
Comments
Very nice, I'd really like to see this in Magnum, too!
As long as Vulkan is not really released yet, obviously not, but I definitely agree with you that Vulkan support would be a huge attraction to possible new users. |
@Squareys: I might actually have more fun with animations, Vulkan will require a lot of boring iterations in the beginning to get into some useful shape first (and lots of boring reading/learning). But yeah, you're right, implementing Vulkan support would be very hard for anyone that doesn't have deep insight into design of this engine, animations not so much. |
In addition to the paper mentioned in "Dual quaternion linear/spherical interpolation" (which discusses dual quaternion linear (and iterative) blending and screw interpolation (ScLERP)), this paper also suggests a method to compute screw parameters for screw interpolation. |
I would vote for Animations over Vulkan. Animations would benefit people using the library and make it more appealing. Vulkan is good, sure, but I don't think it would make such a huge difference as having more animation support. |
One thing that would be really amazing is a small interpolation example along the lines of Overgrowth's techniques: http://www.gamasutra.com/view/news/216973/Video_An_indie_approach_to_procedural_animation.php Blending between only two keyframes at a specific time, producing a realtime animation. |
👍 Great presentation! |
@VinnyVicious to be frank, I thought it's always done like this :) having two, maybe three keyframes defined for each animation "clip" with some specific interpolation curve in between and then (automatically) combining all those interpolated poses together .. or am I missing something? |
@mosra, usually, i just do the entire animation in Max and export the FBX containing it. And then play it in the engine. This leads to issues known as players skating, etc. Does magnum have a builtin way to interpolate stuff? A small example with different curves? 👯 |
Yeah. It's much more common practise to just have animators do all the work and then probably use a bit of blending in the engine. Some games go further, but you'll often find that artists want more control than the engineer has time. 💃 |
I wanted to get rid of the skating issues and also handle edge cases, like the jump technique. Everything is much more fluid using this Overgrowth technique. I can do more poses in Max and just ask the engine to work on the cue points based on player input. Since i'm not very good when it comes to 3D math, i'm looking some examples on the subject. 🏄 |
A good place to start learning more about IK is this CCD study: http://graphics.ucsd.edu/courses/cse169_w04/welman.pdf. This is also good: http://www.cs.cmu.edu/~./15464-s13/lectures/lecture6/IK.pdf |
I think this could define the scope of initial "ready to use" animation support pretty well: http://the12principles.tumblr.com/ |
And I guess I could also publish my Animation braindump that I did a few months ago: https://gist.github.com/mosra/0ff8443d623cc0b09efb7a7299a0f692 |
More to add to the Disney 12 principles: https://twitter.com/jrcanest/status/788441769864073216 |
Stuff's being baked in #191. |
More animation examples: https://twitter.com/DavitMasia/status/1023862760789225472 |
Amazing work! |
Initial animation support merged in #191 and mosra/magnum-plugins#46. |
Spline interpolation, Cubic Hermite, Catmull-Rom, TCB and other splines are being done in #267. |
#267 with basic Cubic Hermite splines support needed for glTF import is merged, Cat-Rom and TCB conversion together with forgotten |
Lots of great examples here: http://foxcodex.html.xdomain.jp/index.html |
any plan to support ozz-animation (https://github.com/guillaumeblanc/ozz-animation) for skeletal animation maybe via integration? also seems like magnum-examples doesn't have skeletal animation example yet? |
@pixelblender I just recently got skeletal animation working with Magnum, all the pieces are there, but there's no example, no, and you have to write your own Skinning shaders. |
That's awesome! Do you think an example with a character could be added so it's easier to implement? |
Is there any intention to eventually support automatic vertex group weight assignment algorithms such as "Bone Glow"? |
Oh, that's cool -- didn't know such algorithms even were a thing. Yeah, why not, that'd be something to go into Unfortunately I don't have time to implement that myself anytime soon, so contributions welcome :) |
The two closest things I've found on GitHub so far for skinning work are https://github.com/meshonline/Surface-Heat-Diffuse-Skinning & https://github.com/JSandusky/Urho3DProcGeom |
This is one thing I wanted to do since the very beginning. I'm slowly implementing various bits here and there. Making this public so we can track the (non)progress better and to have a list of requirements in case someone is willing to help.
Math::lerp()
)Math::lerp()
/Math::slerp()
)min
/max
properties which are currently ignored)SceneGraph
now, but without the scene graph and virtual callsAnimation::Player::stop(time)
,Animation::Player::pause(time)
to schedule stop/pause at given time (the animation continues until then) ... then I'd need alsoAnimation::Player::state(time)
, right?tweeny.js
, https://easings.net/, http://robertpenner.com/easing/ -- c98a936, docsAnimation::Extrapolation
(?) with ability to use last keyframe as the "before" extrapolation (and vice versa) ... or in general, override the behavior when the animation doesn't play yet or after it was finished, as with the CSSanimation-fill-mode
property (currently finishing causes the last keyframe to be used) and not-yet-started (manually stopped) causes the first keyframe to be usedbonesjoints,bonejoint weights in meshes,bone objectsskeleton assignment) (depends largely on Mesh Data rework #371) -- e8b6454, d7a4f3b, f447e99Transformation animation import in OpenGEXnot planned, nobody uses this format anymoreSkinning data import in OpenGEXnot planned, nobody uses this format anymoreMorph data import in OpenGEXnot planned, nobody uses this format anymoreanimation-direction
property)hint
-- it'll still always only increment thehint
but takeabs(hint)
as the frame index, so if passing negative, it'll go backwards.-size
to go from the other side, can't really make that generic...add()
(Containers::Handle
with index + generation for this?)TrackView
(needs some rework to make this happen because currentlyTrackViewStorage
does a function pointer cast)Example opportunities:
More ideas:
The text was updated successfully, but these errors were encountered: