amrgomaaelhady / SynthoGestures

This repository has the SynthoGestures Framework.
MIT License
4 stars 0 forks source link

Generating Static Gestures #3

Closed goutamyg closed 3 weeks ago

goutamyg commented 3 weeks ago

Hi,

I tried to create push hand out gesture from NvGestures dataset by importing the StaticGesture Actor and modifying the FingerSpacingVariation, ArmNoise and related parameters. However, the best I could get to is this: Screenshot 2024-06-21 174659 Is there a tutorial/documentation on how these hand and finger-related parameters can be modified to generate more static gestures (e.g., show index finger, show three fingers)?

amrgomaaelhady commented 3 weeks ago

Hi, thanks for trying to expand the gestures, the FingerSpacingVariation, ArmNoise and related parameters, are intended to adjust the shape of the hand and the arm jitters a person do when performing a gesture. However, you create different gestures by defining a new spline path for the model and adding selecting this new gesture from the Actor Settings. You could create those spline with a blueprint, or simply duplicate/edit one of the existing the gestures and manipulate its spline with the GUI. You can check the below screenshot for different options.

image

goutamyg commented 3 weeks ago

Yes, that makes sense. I was looking at a simpler approach towards creating a new static gestures; which is, since the only difference between Gesture4 in your framework and the push hand out gesture is orientation of Ring, Pinky, and Thumb fingers. Hence I created a copy of Gesture4 Actor and tried to modify the following parameters:

Screenshot 2024-06-21 200203

But I could not figure out what finger-related parameter changes I need to make to transform Gesture4 into a push hand out. I apologize for not precisely describing the issue in my previous comment.

amrgomaaelhady commented 3 weeks ago

No worries at all. All of the variations are options to make the gesture differ. This is like having different participants. I have enabled some of them already by default and that is why you don't get exactly the same gesture performed every time you play. You can find below a brief description of what each of the variations do, I have also added to the github readme:

• SpeedVariation Changes the speed at which the gesture will be performed. Depending on the setting in the gesture, this might also influence the speed of the pre- and post gesture (these are the path followed until the position of the spline and back). If a relative value is selected, it will be relative to the default speed in the gesture settings. • PositionVariation Changes the position of the spline. It is recommended to use relative values since absolute values refer to the world coordinates. • FingerVariation Changes how angled each finger is. A value of 0 for all fingers represents a flat hand, while a value of -90 for all fingers represents a fist. • HandNoise Changes the rotation of the hand. The hand can move from a random starting rotation to a random end rotation during the gesture. This is only recommended for arm gestures. • ArmNoise Determines how much the arm should move for gestures performed by the hand or a finger. • HandNoise Determines how much the hand should move for gestures performed by a finger. • FingerSpacingVariation Change the spacing between fingers. For example to create a piece sign with the fingers. • StaticPause Changes how long the hand should hold the pose for static gestures. • RadiusVariation (not in all gestures) Changes the radius of gestures that are based on a circle. Can also be used to distort the circle. • PositionVariation Changes the position of the effector for animation-based gestures.

goutamyg commented 3 weeks ago

Thanks for the detailed explanation! Now I am able to generate the full palm gesture :) Screenshot 2024-06-21 230238

One last question before closing the issue: What is the functionality of variable Arm Part: {Arm, Hand, Finger}. What impact it has the generated gesture?

amrgomaaelhady commented 3 weeks ago

The Arm part is also a way of variation for how the gesture is performed. You could try it out with Gesture 1 and see how it affects the gesture performance every time you play the scene. It is also again a way to simulate different human behavior. For example, '''Arm''' option makes the gesture movement from left to right (for Gesture 1) coming from the Arm, while '''Hand''' make the movement originating from the hand itself, while '''Finger''' does not make sense here and will cause a weird behavior as you can see when playing it.