[Studio Beta] Avatar Joint Upgrade: Enabling Physically-Simulated Characters

Ok, figured out everything. We good now :slight_smile:

1 Like

The fact that it’s enabled in live mode for the demo place got me confused, so I thought there was a way to enable it on my side as well

I guess I will be waiting for phase 1 then, when the feature exits studio beta

Likely Coordinate, like in CFrame.

RAGDOLL ENGINE? thank you roblox

I know it isn’t full on Root-Motion yet, but is there anyway to circumvent the players flying into the atmosphere when playing animations that take the LowerTorso away from the HumanoidRootPart?

This is the behavior from turning off IsKinematic for the LowerTorso.Root AnimationConstraint.

Original Animations


Behavior


1 Like

Which joints are set to non-kinematic here? In my experience, the wobbling can happen when running with the Root or Waist set to non-kinematic. I recommend keeping Root and Waist set to IsKinematic = true.

This is because the HumanoidRootPart is the main thing that moves roblox characters. The rest of the body just “gets dragged along”. The UpperTorso is a relatively heavy mass, so if the HRP is whipping it around rapidly the character body will flop around more. Conversely, if you keep the Root and Waist kinematic, the only parts flopping around will be the head, arms, and legs.

In the demo place, I made only the arm joints non-kinematic when walking around, which ends up being much more stable. Also, using the ControllerManager gives even more stability.

Those steps of opting in only add the new joints to your avatar. To see an effect, you’d change the IsKinematic property of the joints with a script. You can take some demo scripts from the example place.

1 Like

Ah, so that’s what I was missing, thanks man!

This is a really cool update! I have a couple of questions though.

When it comes to this new system, is it meant to be used primarily on the new physics based controllers? I feel like it would be better there since its all physics forces and such. In addition to this, is there any plan on having root motion as can sort of “mimic” it with certain settings but its not predictable?

Will we also get smoother interpretation of the physics? When I tested it using the local server, with two clients, it appears really choppy.

It’s actually something I once dealt with before but in this case I do not know of a solution. Before I would have to weld the RootPart to the Torso and disable the Motor6D that connected them to make it interpret smoothly. Probably due to humanoids having some weird hardcoded networking or something… Either way, I would love to see a fix or at least a work around.

AnimationConstraint are meant to be a generic physics Constraint. They work with the old and new Humanoid controllers, and on non-Humanoid parts! Not specifically related to the Joint Upgrade, we do want to migrate all characters to the new controller over time because it’s generally more stable.

Yes! We’ve explored a few ways to fix this and hope to ship something early next year.

4 Likes

do IKConstraints work with this

Of course. That’s shown in the announcement post too.

This is also the case with R6 models, the RootJoint’s CFrame is not zeroed out, I had to remake it with proper CFrame values in order to dynamically animate the RootJoint using code.

can you guys add a keybind to ragdoll for the test place

also how to make my guy be able to look 360 degrees without flipping

@Homeomorph Apologies if this is a known issue, but switching the animationconstraints to be non-kinematic seems to mess with layered clothing rendering:

3 Likes

Cool, I am gonna make Fall Guys with this.

1 Like

Way to convert Motor6D rigs to AnimationConstraints, just run this in command bar:

local Motor6DRig = path to rig

for i, Joint in ipairs(Motor6DRig:GetDescendants()) do
	if Joint:IsA("Motor6D") then
		if Joint.Part0 ~= nil and Joint.Part1 ~= nil then
			local AnimationConstraint = Instance.new("AnimationConstraint")
			local Attach0 = Instance.new("Attachment")
			local Attach1 = Instance.new("Attachment")
			Attach0.Name = Joint.Name.."Motor6D"..Joint.Part0.Name
			Attach1.Name = Joint.Name.."Motor6D"..Joint.Part1.Name
			Attach0.CFrame = Joint.C0
			Attach1.CFrame = Joint.C1
			AnimationConstraint.Attachment0 = Attach0
			AnimationConstraint.Attachment1 = Attach1
			AnimationConstraint.Name = Joint.Name
			AnimationConstraint.IsKinematic = true
			Attach0.Parent = Joint.Part0
			Attach1.Parent = Joint.Part1
			AnimationConstraint.Parent = Joint.Parent
			Joint:Destroy()
		end
	end
end

also the reverse way (to convert animconstraints to motor6d):

local AnimationConstraintRig = path to rig

for i, Joint in ipairs(AnimationConstraintRig:GetDescendants()) do
	if Joint:IsA("AnimationConstraint") then
		if Joint.Attachment0 ~= nil and Joint.Attachment1 ~= nil then
			local Motor6D = Instance.new("Motor6D")
			Motor6D.C0 = Joint.Attachment0.CFrame
			Motor6D.C1 = Joint.Attachment1.CFrame
			Motor6D.Part0 = Joint.Attachment0.Parent
			Motor6D.Part1 = Joint.Attachment1.Parent
			Motor6D.Name = Joint.Name
			Motor6D.Parent = Joint.Parent
			Joint.Attachment0:Destroy()
			Joint.Attachment1:Destroy()
			Joint:Destroy()
		end
	end
end
4 Likes

What would you recommend doing if we’d like to have bones (or the alt of it) affected? Currently I am making a rig using bones, and it would be divided as the body and then the clothing on top of it (which would also have bones).

Truthfully I have never tried skinned meshes, however I’d love to know if there’s any other alternatives OR perhaps if there’s anything in the works where the bones (or some other instance) would be affected by physics.

Its time for plan gta5 to commence.

1 Like