IK Controls are now out of beta!

Hi, we do support this. IKControls are NOT limited to R15 rigs, but work with ANY rig made out of parts+motors or bones.

The idea of detecting existing constraints from blender or other software is interesting, although the format and results would be different as the underlying solvers are. But I’ll have a look, thanks.

2 Likes

We do have a guide/tutorial that walks you through setting up your first IK Control :slight_smile:

1 Like

Thanks for providing the resources!

1 Like

Hi, thanks for your report.
We are aware of the candy-wrap issue and working on it.
For the second issue, the “memory foam”, is because we don’t reset the pose between frames. We’re discussing exposing an option to do so. In the meantime, you can achieve the result by resetting your motors manually. Below a script.

Reset pose script
local function resetpose(character)
    for _, obj in ipairs(character:GetDescendants()) do
        if obj:IsA("Motor6D") then
            obj.Transform = CFrame.new()
        end
    end
end

local function Update()
    resetpose(script.Parent)
end

game:GetService("RunService").Stepped:Connect(Update)
1 Like

Thanks for the info, I’ll check it out!

1 Like

When messing around with IKControls, I found a bug where using attachments as EndEffectors (when the Attachment is parented to the ChainRoot) would send the ChainRoot to NaN. This can be reproduced by setting the ChainRoot to R6.Left Arm and the EndEffector to Left Arm.LeftGripAttachment

Viewport:
image

Explorer:
image

Left Arm properties:
image

IKControl properties:
image
(Target is the green cube in the first image)

I’m pretty sure this is due to the arm trying to move with the attachment, and they keep pushing each other recursively. Whatever the case, this limits my use case for IKControls and forces me to go back to my old workaround of using parts instead. Hope to see a fix for this soon!

1 Like

You’re right, that was my mistake.

1 Like

Thank you for the report, I’ll investigate.

1 Like

Yes, this is intentional. Originally Pole was exposed to the GUI as well, but we felt that we shouldn’t require devs to set the pole just to get realistic poses, and should instead work on improving the solver (still on it). We still have it available for advanced users however as script property.

1 Like

Hi, this is for the old IK system in the Animation Clip Editor, which although uses the same name (IK) is not related to IK Controls. That system will be replaced with IK Controls. I’ve forwarded the report to the relevant people in the meantime, thanks!

1 Like

Thanks for the reports, I’ll check them out and fix them.

1 Like

Yes they do! :slight_smile: let me know if that works with your rigs

1 Like

We have fixed this and it will be live shortly, thank you for the report.

1 Like

I figured out how to turn players into ragdolls using this new feature! They can also have animations played over the top too.

I’ve written a tutorial here:

13 Likes

Yes, we currently have a single pole which is used for the whole chain.
Performance was improved a lot during the beta, for reference a single IK control takes ~80 microseconds on average. Most of it it’s spent reading/writing to the rig, which we’ll improve further, but should be already fast enough.

2 Likes

Thanks for the report, I’ll add a fix.

2 Likes

I’ve discovered a CRITICAL bug (crashes every client):

Edit: this was reported by DrewDude500 above

If players/NPCs have their joints broken (which happens upon death) with IKControls active in their humanoid it will crash every single client (including the server & other players)

How to replicate this issue:

  1. Create a new place + insert a rig
  2. Insert an Animator & IKControl into the humanoid. Set the properties as you wish, as long as they are valid.
  3. Have the dummy die server-side or call :BreakJoints() on it.
  4. The client will immediately crash with an error exception.

2 Likes

is their any plans on adding more poles? If not, would it be possible to make limbs with multiple joints going in opposite directions by using multiple IK’s?

Edit: I was able to do something like what I was talking about (with multiple joints going in different directions) but it acts a bit weird.


You can see in the video that the rig would sometimes snap to certain positions.

Also because you can’t specify which joint the pole should be affecting and the solver doesn’t find the best solution where the joint would be closest to the pole, you can get different cases like these even though everything is the same:
IKTesting1
IKTesting2

3 Likes

I don’t know what your use case is, but I was able to get it working on R6 fine, I used the shoulder and grip attachments of the arms for chain roots and end effectors respectively, with the LookAt type & an EndEffectorOffset and it works perfectly.

https://gyazo.com/a594cf57be99d414129c7cfb772481b4.mp4

(I know something like this doesn’t really need IK at all, but the convenience of the arm pointing at an attachment automatically with no custom replication or messing with joints and animations is great)

2 Likes

CC @drewbluewasabi
I found a temporary solution if you want to test it out without fear of accidentally crashing until the issue’s fixed, you can destroy the IKControls when the humanoid dies. For example put this in StarterCharacterScripts on both client and server (so server and local script):

script.Parent:WaitForChild('Humanoid').Died:Once(function()
	for _, v: IKControl in script.Parent:GetDescendants() do
		if v:IsA('IKControl') then
			v:Destroy()
		end
	end
end)


^ Works with :BreakJoints as well

2 Likes