Demo: Green Dragon

Articles with the tag: Inverse Kinematics

Input: mouse cursor head tracking

For realistic head movement, the cursor position shouldn't dictate the position. It should dictate a force or direction to which the head can aim over time. For realism, the dragon's head should be combined with a simulated or pre-animated idle motion, such as an occasional swaying motion. This can be achieved by blending animations and skinning using the combined armature animation matrix palette.

Still, here's a demo of the test mesh/armature working with direct position coordinates controlled by the mouse (using bezier-based IK):

Just for kicks, here's how the traditional IK tracks an interactively-moving point. It looks pretty smooth, perhaps smoother than the IK, but as constraints have not been implemented, it cannot be used to realistically model the dragon's head.

The lack of rotation also rears its head, and the mesh appears squashed.

Read More »

IK solver: Bézier curve method implementation (part 2)

[13/05/14 09:02]

Despite the weird drawing, the curve transformations appear to work.

[13/05/14 11:35]

Yeah, the weird drawing of the armature was due to a rendering oversight.

The armature largely aligns with the curve, but flickers at a few stages. It also stops aligning completely when the curve becomes too sharp.

The strange flickering may be due to the boundaries not being set right in the collision detection and needs tuning.

After tuning - much smoother, but still a bit jerky. I assume the larger jerking near the start is due to the curve not having enough arc length to contain the length of the armature. The curve must be calibrated to be long enough in the animated/simulated scenario.

Read More »

IK solver: Bézier curve method implementation (part 1)

Problem with the curve-armature alignment method: If the bones in the armature are shorter than the length of the curve segments, sequential bones may be aligned parallel to each-other, and not provide the most accurate representation of the curve.

This can be remedied one way by subdividing the curve segments so that they become shorter. This could even be done for a specific segment once a more general intersection area is found. However, this would increase calculation cost.

It can also be remedied by making sure the curve doesn't make too sharp an angle for the segment lengths to approximate in an aesthetically pleasing way. A slower curve can be approximated by longer segments. I will be using a B-spline/Bézier-based IK method for a natural-looking dragon's neck, which would not follow sharp angles, so a smaller number of curve segments should suffice.

[12/05/14 12:17 ...

Read More »

Collision detection: Armature-curve alignment (for Bézier curve-based IK method)

Hang on, if the quadratic equation is used on a finite line which doesn't completely go through the sphere (partial intersection)... how many roots will there be? I will calculate a test case by hand. Obviously the quadratic equation will product two roots, but a way of discerning the physically realistic roots would be useful.

Also, what to do if the sphere really does go through a joint twice? Simple:
The value returned by the quadratic equation is the parameter (is it normalised?). The value closest to unity will represent a point further along the curve segment.

[10/05/14 11:00]

Testing partial intersection by calculating roots between a finite line and a circle and graphing the results.

Conjecture: the root most suitable to represent the parameter t along the line will exist in the range [0, 1].

Intersections between a line of finite length and a circle ...

Read More »

IK solver: Bézier curve method

B-spline IK method outline

Make a B-spline (a composition of Bézier curves) of length equal to armature length. Place bones at lengths down the spline. Blender offers it as an option and the Blender documentation suggests it as being apt for organic bone structures such as spines. It would work well for my demo dragon character's long neck.

Definition of a parameterised curve in the 3D environment:
p = P(s) where p is 3D point in space where the curve lies at that distance, s.

Of course the bone distance would be defined by short jumps, not curved distances (it is discrete). It would seem that it is more complicated to map it to the continuous curve function, then, unless the curve can be discretised too.

Armature curve-following method outline

If each bone's reach can be thought of as being contained within a sphere of a certain radius ...

Read More »

IK Constraints

[24/04/14 14:49]

Right, the IK is good enough for the model. Making test bind pose with basic "neck" armature in a curved pose like the eventual dragon model. A few constraints should make its movement look natural even without rotation.

To Blender!

Current state of IK

Update: rotation works now.

[24/04/14 16:29]

Constraints for each joint should be defined relative to their parent joint, but how should they be defined in particular? The current IK solver doesn't allow "roll" motion for the joints, but each joint still has yaw and pitch rotation. Each joint could therefore specify a bounds, for example: yaw_max, yaw_min, pitch_max, pitch_max.

In the phoxtrace (Update: now "CharSim") IK solver, each frame the best incremental rotation is calculated for each joint in the form of a quaternion based on an axis and rotation. It may be necessary to convert the ...

Read More »

Page 1 / 2 Older »