R15 Animations to R6 script help

Basically, I got an R15 animation out of Mixamo it doesn’t support R6 so I’m trying to find a way around that by converting it to R6.
I don’t know if such a thing is possible, but I have evidence possibly suggesting it is.

Here is the result of this script I made:


R15 character


R6 character


I know it looks a bit silly but I believe there is a clear similarity between the two, I just think my CFrame logic is a bit off, or it could be something else.

This is the script (entered in command bar):

local keyframeSequence = workspace.Script.Save.Animation:Clone()
workspace.R6.AnimSaves:ClearAllChildren()
keyframeSequence.Parent = workspace.R6.AnimSaves

for i, v in pairs(keyframeSequence:GetChildren()) do
	
											-------------------
	local humanoidRootPart = v.HumanoidRootPart				 --|
	local lowerTorso = humanoidRootPart.LowerTorso:Clone()   --|
	local leftUpperLeg = lowerTorso.LeftUpperLeg:Clone()     --|
	local rightUpperLeg = lowerTorso.RightUpperLeg:Clone()   --|
	local leftLowerLeg = leftUpperLeg.LeftLowerLeg:Clone()   --|
	local rightLowerLeg = rightUpperLeg.RightLowerLeg:Clone()--|
	local leftFoot = leftLowerLeg.LeftFoot:Clone()            -- no conditional statements to check if any of these components exist :p
	local rightFoot = rightLowerLeg.RightFoot:Clone()        --|
	local upperTorso = lowerTorso.UpperTorso:Clone()         --|
	local head = upperTorso.Head:Clone()  					 --|
	local leftUpperArm = upperTorso.LeftUpperArm:Clone()     --|
	local rightUpperArm = upperTorso.RightUpperArm:Clone()   --|
	local leftLowerArm = leftUpperArm.LeftLowerArm:Clone()   --|
	local rightLowerArm = rightUpperArm.RightLowerArm:Clone()--|
	local leftHand = leftLowerArm.LeftHand:Clone()           --|
	local rightHand = rightLowerArm.RightHand:Clone()        --|
											-------------------
	humanoidRootPart.LowerTorso:Destroy()
	
	local torso = Instance.new("Pose", humanoidRootPart)
	torso.Weight = 1
	torso.Name = "Torso"
	local headNew = Instance.new("Pose", torso)
	headNew.Weight = 1
	head.Name = "Head"
	local leftArm = Instance.new("Pose", torso)
	leftArm.Weight = 1
	leftArm.Name = "Left Arm"
	local rightArm = Instance.new("Pose", torso)
	rightArm.Weight = 1
	rightArm.Name = "Right Arm"
	local leftLeg = Instance.new("Pose", torso)
	leftLeg.Weight = 1
	leftLeg.Name = "Left Leg"
	local rightLeg = Instance.new("Pose", torso)
	rightLeg.Weight = 1
	rightLeg.Name = "Right Leg"
	
	local function calculateCFrame(cframe1, cframe2) -- main logic
		local cframe = cframe1*cframe2
		return CFrame.new(cframe.p.Z, cframe.p.Y, cframe.p.X) * CFrame.Angles(cframe:ToEulerAnglesXYZ())
	end
	
	torso.CFrame = calculateCFrame(lowerTorso.CFrame, upperTorso.CFrame)
	leftArm.CFrame = calculateCFrame(leftUpperArm.CFrame, leftLowerArm.CFrame)
	rightArm.CFrame = calculateCFrame(rightUpperArm.CFrame, rightLowerArm.CFrame)
	leftLeg.CFrame = calculateCFrame(leftUpperLeg.CFrame, leftLowerLeg.CFrame)
	rightLeg.CFrame = calculateCFrame(rightUpperLeg.CFrame, rightLowerLeg.CFrame)
	
	headNew.CFrame = head.CFrame
end

I’m more than happy to hear your opinion on this topic or any solutions, thanks!

2 Likes

So, I don’t think this would be possible. I think it is easy to do vice versa, where you convert R6 to R15, but because R15 has more body parts, this can not be achieved without ruining the animation. I recommend making your game force a certain avatar type (R6 or R15), and make animations for the one you choose.

I know it’s definetly possible because of how CFrames work. I just don’t think it’s worthwhile to keep trying it when It’d be better to just make my own animations.