FINAL IK - Full Body IK, Aim, Look At, FABRIK, CCD IK... [1.0 RELEASED]

What do you mean “tween”? I also don’t plan on having grabbing. The player will have the weapon the whole time. The problem is that the walking animations move the hands for some reason, even with an animation mask. Any idea how to fix that?

It must be the locomotion that is working on the Root. If you set Weight to 0 in VRIK’s Locomotion settings, that should make it able to move. But then of course you’d have no procedural locomotion.
If you are trying to move the character by something like thumbstick input and need locomotion to follow, You should move the VR tracking space instead, in case using Oculus, move the OVRCameraRig object. As head target is parented to that, the avatar will move along with the locomotion. Keep the avatar not parented to the camera rig.

By tween I mean interpolating smoothly from one position/rotation to another with Vector3.Lerp() or SmoothDamp().
Do the walking animations move the hands or just change the bending direction of the elbows. If you have hand position/rotation weight set to 1, animation should not move the hands. Can you record a video or something please so I could better understand what is going on there?

Best,
Pärtel

Hello Partel,
I have a humanoid character with some punching animations. I would like the character to face the enemy and always punch enemy’s head. Is it possible to achieve it with final ik + puppetmaster for funnier effect?

Hey,
Yes, please check out these demos: “Aim Swing”, “Aim Boxing” using AimIK, “Boxing” (more accurate, but slower as it requires FBBIK too).

Best,
Pärtel

Hey Partel,

Not sure if this has been answered before so will ask here and hopefully you can help.

How do I limit the distance a hand can follow an ik target. I dont want my character to overreach and have him pulled in the direction of the target.

I ask because my punch animations should maintain there original punch distance(or minimal if close to target). I have a clunky fix but it requires manually editing the distance for every punch on every character of different shapes and sizes.

Ps I have played around with push, pull, reach but it still drags my characters spine forwards to attempt to reach the target.

Any help is always appreciated. Thanks.

Hi Partel,

I have both FinalIK and PuppetMaster and I love the way they just work. I’m currently using them in a multiple character situation, and I notice they’re eating away on the CPU performance quite a bit.

Is there any chance you’d consider updating FinalIK to make use of the job system and also the burst compiler features of Unity? I think this could have the potential to increase the performance in order of magnitudes for FinalIK.

I believe it would unlock the possibility of using FinalIK performantly with whole crowds of mecanim characters.

First,thank you very much for the finalik hard work @Partel-Lang
I take about one month to learn Blender and unity

I just got a project working a full body tracking with 8 vive tracker’s
But I’m a little stuck here… first i don’t know how to script the calibration seat
(The head bone in avatar it’s around the nose, but the tracker it’s on my Forehead)

I already set avatar and my height both around 187 centimetre

First I can’t find any Tutorial about the calibration,
just some script and " vrik calibration controller " in the finalik project
your webside said has a DEMO about the vrik calibration, but i can’t find it…

  1. Can you give me an instruction or a full Tutorial how to use the " vrik calibration controller "

I’m also has some problem about the camra rig (From steamvr package)
the left/right eye can’t not see in the camra rig (I think because I use PIMAX headset)
This does not affect me, but alot explanation in the Finalik said use the HDW for the head
A little confused me…

  1. My questions is put tracker will affect the results?

My hand wrist look weird when i straighten my arm
is it Because I use the valve index controllers?
3. How to fix this problem

My Hardware:
Pimax 8K plus HDW (I don’t use for the tracking)
8 tracker’s (head、pelvis、2feet、2knee、2elbow)
valve index knuckles (2 hands)

Hi, Pärtel, I think this question is not directly related to FinalIK, but I am wondering if you can give me some guidance. How can I blend between the IK result and a pre-made animation?

For example, I am doing a 10-second live mocap performance, for the first 5 seconds, I want to use the IK result, and for the later 5 seconds, I want to play back a dance animation, how can I blend between these two parts?

Thank you as always!

Hey @Partel-Lang ,

Did you discontinue your root-motion.com/qa/ pages, or are they just down? You answered a question of mine there prevously and I need to refresh my memory :slight_smile: (Specifically, this was RE: how to rotate the pelvis bone on an FBBIK.)

Thanks!

Hey,
You could just limit the position of the IK target from the shoulder:

ik.solver.leftHandEffector.position = ik.references.leftUpperArm.position + Vector3.ClampMagnitude(leftHandTargetPos - ik.references.leftUpperArm.position, armLength);

If you don’t want upper body to be pulled by the hands at all, set solver iterations to 0. That will disable full body solving and make it work basically like BipedIK + save you a bunch of CPU time.

Hey,

Animation and especially IK are terrible candidates for multi-threading by nature because they need to work on hierarchical data structures and be solved in specific linear order. I have made multiple test cases - AimIKJ and CCDIKJ solvers based on Animation Jobs (can import them from Plugins/RootMotion/FinalIK/_Integration), also the same using Animation Rigging framework, but they are all much slower than their old single-threaded counterparts, even if used on 100 or more characters. DOTS animation is going to be faster, but most likely not nearly as much as you’ve seen in some of the DOTS tech demos that are about moving tens of thousands of independent objects.

Hey,
I don’t have a tutorial for calibration because there are a million different rigs people might have. So people use vive trackers for only the feet, some also have body and/or elbow trackers, some use VR hand controllers, others use trackers there too. Sometimes people use other kinds of motion capture systems and there are many different kinds out there.

But basically this is what you should do:

  1. Make a new script like MyCalibration.cs
  2. Copy the code from VRIKCalibrationController
  3. Assign all the trackers/controllers as Head/Body/Hand/Foot Tracker in that component.
  4. Fill in the Settings in the editor, make sure all the forward and up axes correspond to the orientations of your trackers. Make sure the axes point in the same direction as they do on the green tracker mock objects in the demo
  5. Change if (Input.GetKeyDown(KeyCode.C)) to whatever input you wish to use to call for the calibration in you application.

If your wrist looks weird, please try adding the TwistRelaxer component to the forearm or the forearm roll bones if you avatar has them. It runs after IK to even out the twist angle of the bone.

I’m sorry I didn’t understand the question about the “he left/right eye can’t not see in the camra rig”. Did you mean you can’t see anything when you put on the headset?
About the information to use HMD as VRIK head target, it means you should make a duplicate of the avatar’s head bone, assign it as VRIK head target and parent it to whatever represents the head tracker. With Oculus that would be the CenterEyeAnchor, with OpenVR that would be the Camera under the [CameraRig].

Hey,
You can do that just by smoothly blending ik.solver.IKPositionWeight to 0. Then you’ll be free to play the dance animation. You can have the animator enabled at all times, just when using IK, use a subtle idle animation so it wouldn’t mess with the IK too much. Can use Baker to bake a short animation clip of just the default pose too.

Hey,
Yeah, sorry, had to nuke that because of all the automated spam, notification and other issues. The new helpdesk can be found here. Unfortunately I was not able to migrate all the content.

About rotating the pelvis with FBBIK, please check out the “Offset Effector” demo and try rotating the “Pelvis Effector” there.

Cheers,
Pärtel

Ah, I see. Dang, that stinks! Just going through them has helped me out a bunch of times.

Thanks, that mostly works! I am curious how this works though, since it’s only setting the positionOffset (no rotation). I’d like to keep the effector operating in world space, but changing the relevant line to effector.positionOffset = (transform.position - effector.bone.position) * weight * e.weightMultiplier; breaks the rotation working (as expected); same if I set the body weight inside the FBBIK to 1.

Any ideas @Partel-Lang ?

That’s too great, Pärtel, thank you!

https://imgur.com/a/lB1w2DU

Hello!

I am having some problems implementing VRIK and Photon for a multiplayer application.
I am using VRIK just for the head and hands movement. For the legs, I have a walking animation.
Did someone manage to implement this? What game objects should I sync over the network?
The game objects set as targets set for VRIK or the transforms of the body?

Thanks

I’ve been playing around with VRIK for a couple days now and I am trying to get the legs to look decent when moving my character. The legs tend to stretch like crazy like in the image I uploaded. Anyone experience anything like this? What did you do to get the legs to step more accurately?

Thanks in advance :slight_smile:

5970296--640625--Legs.png

Hey,
OffsetEffector basically just rotates thigh effector positions around itself so that’s how it looks like it is rotating the pelvis.

You should use positionOffset += instead of = in your code when working with positionOffsets. They will be reset to zero after each solver update, so don’t worry about that adding up over the frames. It was designed like that so multiple positionOffset modifiers could be applied on top of each other.
You should also account for other modifiers so change the line to this:

effector.positionOffset += (transform.position - (effector.bone.position + effector.positionOffset)) * weight * e.weightMultiplier

Hey,
Do you have HandPosers on those hands? If you have “Pose Root” assigned that would keep the fingers locked to the assigned pose. Set handPoser.poseRoot to null to disable that. The hand will be free to be animated again then.

Hey,
Just made a VRIK-PUN integration demo recently, check it out please. Basically it syncs just head and hand targets, IK is solved locally on each machine.

Hey,
What kind of settings you use for locomotion, the default ones?
You might want to check out this demo about using animation for locomotion. Animation works better for moving from A-B.

Cheers,
Pärtel

Just found the package

Hello,

Just today I saw the integration package you made and now I was checking it out!
Thanks a lot for this, I will use it as a reference!

I have nothing on the hands.I have an avatar mask that masks out the hands, and it causes that for some reason.

Hi again,

So I managed to implement the VRIK - Photon package you made, the syncing is behaving properly except for the fact that it takes the same movement of the vr controllers for both instantiated prefabs, so both have the same movement of the hands, no matter if I control the local prefab or the remote prefab. Any ideas of how I can fix this? Thanks

I am giving my own reply, but I managed to fix this issue :slight_smile:
Thanks again for this great Unity package! :slight_smile:

1 Like