Is there a way to save an animation frame as a singular pose?

Trying to build a world, but I need singular poses that are solid.
I don’t need an idle animation or anything like that, just a solid pose. Does anyone know a method? I’ve tried duplicating after posing, etc.

Do you mean like a emote? If you could elaborate on this more maybe I could help you.

No, I need a solid pose. Like, as if it were a statue. It remains like that forever, not an animation.
Cause I used to use the Animation Editor to make statues but now I can’t duplicate the model to get that animation frame.

Is there any other method of posing R15 models as easily as the animation editor allows?

I mean, that would probably be a stupid way of doing it, but can you just run the animation while play testing, then hit Pause at the right moment and then copy the pose model?

4 Likes

You might be able to use that character creator plugin, and anchor the parts.

You could try manually setting the CFrame of each part in the model by selecting the relevant part in the explorer and copying its values, then putting them into another duplicate model. You’ll need a plugin or the command bar to do this, though.

There is a cumbersome, manual option of this sort: You can open the animation editor, go to the frame of the animation you want to capture, drag the current animation “dummy” character to ServerStorage, close the animation editor, delete all the Rig attachments and joint Motor6D from the dummy, anchor the body parts, and finally drag the dummy back to Workspace. If you don’t remove the attachments with Rig in the name, the character will get re-rigged and reset to default platform standing pose.

The reason you can’t just copy paste poses from animating characters easily, is that the animation system sets the joint Motor6D.Transform property, which is ephemeral and not stored anywhere (like things that are not Archivable).

I don’t do this. I make player statues with a script. I make a copy of the character I want to pose into a statue, save the animation I want to take the pose from using the Animation Editor (so it ends up as KeyframeSequence in Dummy->AnimSaves), and then I use this utility script I wrote to copy a selected Keyframe onto the character:

--[[
	
	AllYourBlox 2017 - Statue Util - Apply animation Keyframe to a copy of a player avatar in the workspace
	
	1. Select avatar character model (e.g. a copy of your avatar you copy-pasted into the workspace from play solo)
	2. Select Keyframe object (A Keyframe object from an animation saved from the Animation Editor, e.g. Dummy->AnimSaves->KeyframeSequence->Keyframe)
	3. Run this script
	
--]]

local RunService = game:GetService("RunService")
local Selection = game:GetService("Selection")

local selectedThings = Selection:Get()

local char = nil
local kf = nil

if selectedThings and #selectedThings >= 2 then
	for _,child in pairs(selectedThings) do
		if not kf and child:IsA("Keyframe") then
			kf = child
		end
		if not char and child:IsA("Model") then
			char = child
		end
		if kf and char then
			break
		end
	end
end

if kf and char then
	for _,pose in pairs(kf:GetDescendants()) do
		if pose:IsA("Pose") then
			local bodyPart = char:FindFirstChild(pose.Name)
			if bodyPart then
				local joint = bodyPart:FindFirstChildOfClass("Motor6D")
				if joint then
					joint.C1 = joint.C1 * pose.CFrame:Inverse()
				end
			end
		end
	end
	
	wait()
	
	for _,bodyPart in pairs(char:GetChildren()) do
		print(bodyPart.Name)
		if bodyPart:IsA("MeshPart") or bodyPart.Name == "Head" then
			bodyPart.Anchored = true
			local joint = bodyPart:FindFirstChildOfClass("Motor6D")
			if joint then
				joint:Destroy()
			end
			for _,att in pairs(bodyPart:GetChildren()) do
				if att:IsA("Attachment") and string.find(att.Name,"Rig") then
					att:Destroy()
				end
			end
		end
	end
else
	if not char then
		warn("There is no character model in the current selected items")
	end
	if not kf then
		warn("There is no animation Keyframe object in the current selected items")
	end
end
13 Likes

Just set the pose in the animator, then with the animation editor open, close studio and publish the file. When you reopen the place, the model should be stuck in the pose

A long time ago I created a module to Create statues of characters and have them posed nicely using a single Keyframe animation. I just updated that so that it works again if you want to take a look.

Here is the code for applying a single keyframe to a character, it’s similar to the code that @AllYourBlox posted earlier but it might be a bit easier to see how the Keyframe is being applied to the character. You can test it out by copying an R15 character into workspace and changing the PosedCharacterName.

local CharacterToPose = workspace:WaitForChild("PosedCharacterName")

local PoseAnimationId = "http://www.roblox.com/asset/?id=532421348"
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local KeyframeSequence = KeyframeSequenceProvider:GetKeyframeSequenceAsync(PoseAnimationId)
local PoseKeyframe = KeyframeSequence:GetKeyframes()[1]

local function applyPose(character, poseKeyframe)
	local function getJointBetween(part0, part1)
		for _, obj in pairs(part1:GetChildren()) do
			if obj:IsA("Motor6D") and obj.Part0 == part0 then
				return obj
			end
		end
	end

	local function recurApplyPoses(parentPose, poseObject)
		if parentPose then
			local joint = getJointBetween(character[parentPose.Name], character[poseObject.Name])
			joint.C1 = joint.C1 * poseObject.CFrame:inverse()
		end

		for _, subPose in pairs(poseObject:GetSubPoses()) do
			recurApplyPoses(poseObject, subPose)
		end
	end

	for _, poseObj in pairs(poseKeyframe:GetPoses()) do
		recurApplyPoses(nil, poseObj)
	end
end

applyPose(CharacterToPose, PoseKeyframe)
10 Likes