-
-
Notifications
You must be signed in to change notification settings - Fork 97
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
Implement Skeleton re-targeting node #3379
Comments
Will post some extended uiux mockups for matching body armatures:
|
Hello, can I contribute an idea? What I think could be interesting and with very little complications would be to make a panel with a series of grooves in this case (BoneAttachment) and for the user to add the bones according to the name of each bone in the panel and it would be necessary to have a way of importing animated or non-animated skeletons that can be scaled and adapted to the model and for each complex part such as head, hands etc. make a sub-panel in case you want to add more bones or not that would cover the part of the non-standard bone names image of doubtful origin but as an example I think the idea is understood |
Yes. I personally done 10-20 different character with the full body grooves in the Blender VRM addon. https://github.com/saturday06/VRM_IMPORTER_for_Blender I am not happy with moving bones onto grooves. Only the most stubborn rigger will go to the effort of making a common skeleton chart and doing a look up table to memorize the exact mapping. |
Hi, I'm not very excited about moving bones either but I can't think of another idea since the bones can have any name or they can use models already with bones from some downloaded site and the nomenclature will never be standard, the other could be a custom plugin in blender that renames the bones to use a predefined nomenclature in godot to load them automatically a kind of baking before exporting in pose T and have a skeleton already prepared with the same nomenclature which is not how the addon would know that bone is which to rename |
My thinking, RetargetNode will subscribe to |
It is great to see many improvement in 3D skeletal animation support in Godot recently. e.g. A complementary proposal/issue that completes the workflow from BVH motion file to Skeleton retargeting? Is there a plan to make Godot part of the standard list of software for Motion Capture e.g. Rokoko Suit |
I did a little experiment. https://twitter.com/viridflow/status/1467679166137266177 As a result, I have two suggestions. One is to apply RetargetNode as a child of Skeleton, like SkeletonIK. This is to make the RetargetNode commonly applicable not only for FK animations, but also for IK, etc. This and using intermediate rigs will help us implement some features such as motion tracking, as we can implement no dependency on Rest for IK. Edited: The second is to implement an intermediate track as a variation or option of the Pos/Rot/Scl track. In the current implementation, an extra Skeleton is always needed in the scene to use the RetargetNode. Actually, by pre-multiplying the source Skeleton with the animation values, the Skeleton is no longer needed in the Scene. This simplifies the management of animation resources when performing FK retargeting. |
Isn't this implemented in Godot 4.x now? |
Retarget in 4.0 still exists only in importer and retarget node is not implemented in core, but it now can be able to be implemented as a custom module. |
Retarget node as a custom module
|
Now that https://godotengine.org/article/design-of-the-skeleton-modifier-3d/ has made it possible to implement Constraints, etc., we think it is worthwhile to start again with this as a realtime retarget. Since having Retarget mode in Animation like godotengine/godot#56902 has already been rejected twice by @reduz before, there is no other way for a realtime retarget except to design it correctly with SkeletonModifier3D. If it works, we can import Blender's Constraint settings. Implement AnimationProvider class by extending SkeletonModifierAnimationProvider has a Skeleton without Skin whose children are Override Rest. It has the following enum and properties to set RetargetMode: enum RetargetMode {
RETARGET_MODE_GLOBAL, // default
RETARGET_MODE_LOCAL,
RETARGET_MODE_ABSOLUTE,
};
RetargetMode spines;
RetargetMode hands;
RetargetMode arms;
RetargetMode legs; Please refer to the following link for an explanation of RetargetMode. https://github.com/TokageItLab/realtime_retarget Basically, RETARGET_MODE_GLOBAL is preferred, but RETARGET_MODE_ABSOLUTE looks better for fingers in some cases, and RETARGET_MODE_LOCAL is preferred for arms and legs in some cases. This approach means we cannot blend the different RetargetModes, but there is nothing we can do about that since we cannot have a RetargetMode in the Animation. This is probably the maximum compromise. Now importer has only the If the
The most debatable thing here is that the Animation track path is This means that animations imported with Other debatable points:
Or, except that it is not intuitive, but reversing the hierarchy explained above may solve most of the problems except double Skeletons...
In this case, the AnimationProvider will pass the pose of the parent Skeleton to the target Skeleton; The Skeleton Deferred process must be performed after the GeneralSkeleton Deferred process. It might be better to name the class PoseTransporter. |
Describe the project you are working on
Godot
Describe the problem or limitation you are having in your project
The only way to re-use animations is use compatible skeletons with similarly named bones and proportions. This can be significantly limiting for sharing animations or using animations from common sources such as Mixamo.
While in-engine re-targeting is generally not a technique advised for production (as it makes the amount of bones you can use to animate rather limiting, thus makes rigging looks worse, for reference most studios do this within the 3D DCC together with IK), there are still cases where it makes a lot of sense, such as body tracking, prototyping, or simply Indie development where creating custom animations for models can be expensive.
Note, this is an actual implementation proposal based on #2619, so it supersedes it.
Describe the feature / enhancement and how it helps to overcome the problem or limitation
The proposal here is to implement re-targeting as a special node. Mostly to make Skeleton less bloated and to reduce the need to make children scenes editable in order to configure them.
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
A new SkeletonRetarget node will be provided by the engine. This node will have the following properties:
Retargeter is a resource that does the retargeting logic. It is a virtual abstract class that does no logic, but it can be inherited to implement a retargeter. Godot will provide a default implementation: HumanoidRetargeter which will come with a default humanoid skeleton.
Editing HumanoidRetargeter will be similar to Unity/Maya/etc., except that you must set the source bone and destination bone.
Given the Retargeter is a resource, it will be possible to save it to disk to use it in other scenes.
Eventually, it should be possible to provide other more precise retargeters with more complex models via GDExtension if desired.
If this enhancement will not be used often, can it be worked around with a few lines of script?
Animation is core
Is there a reason why this should be core and not an add-on in the asset library?
Animation is core
The text was updated successfully, but these errors were encountered: