My goal is for the animation to look like this
(This is what the animation looks like in Blender.)
The problem I’m facing is it fails to properly sync the animation with the non-IK rig that we have set up in studio. It seems as if the movement of the bone jutting out at the top between the tail and the torso is severely inhibited but not completely gone. Furthermore, the feet at the bottom of the rig bend upwards 90 degrees for some reason? This is what the animation looks like in studio.
Solutions attempted:
- Setting Rotation settings for the rig to quarternion rather than euler (they were always set to quarternion). Unsuccessful.
- Removing IK constraints - Rig in studio already has it’s IK constraints removed. We know that the bone that moves the feet to their proper position still does so despite it having IK controls because it still positions the legs where they should be positioned. The only issue with them so it seems is they change the rotation of the foot by about 90 degrees as seen below.
Due to the enormous workload that we face with animating these creatures, we would much rather animate them using an IK rig than a non-IK rig, so that is off the table as well. One could assume this is simply an issue with the Avatar Evolution build with skinned meshes, but we briefly attempted something similar with the beta build while it was up as well and we experienced the same result. If ROBLOX includes IK support for blender rigs in the future it might fix the issue but until then I’d like to hear of any other solutions to fix this issue.
Note: This animation won’t actually be used in-game - it’s just a test animation to demonstrate the issue we’re facing.
3 Likes
@The_Aliens - Thanks for working with me to come to a potential solution. I will share the results here, so other devs might be able to use the same solution…
The animation importer expects the animation to be on the rig for which it is played.
So we have to make an .fbx that has the animation on the non-ik skeleton.
First get the two rigs into the same scene in the source tool.
You can do this by exporting the runtime rig/model as an .fbx and importing into the animation rig file.
Then, run a script to constrain the runtime rig to the ik rig, and make an animation on the runtime rig.
For Blender, run something like this in Python console:
( you may need to change the armature references in the first two lines. )
import bpy
armature_noIK = bpy.data.objects['Armature.001']
armatureIK = bpy.data.objects['Armature']
# contrain non-IK rig to IK rig
for bone in armature_noIK.pose.bones:
for boneIK in armatureIK.pose.bones:
if bone.name == boneIK.name:
constraintRot = bone.constraints.new('COPY_ROTATION')
constraintRot.target = armatureIK
constraintRot.subtarget = boneIK.name
constraintTrans = bone.constraints.new('COPY_LOCATION')
constraintTrans.target = armatureIK
constraintTrans.subtarget = boneIK.name
# make a new animation on the non-ik rig
firstFrame = bpy.context.scene.frame_start
lastFrame = bpy.context.scene.frame_end
bpy.ops.object.mode_set(mode='POSE')
for frameNum in range(firstFrame, lastFrame + 1):
bpy.context.scene.frame_set(frameNum)
bpy.ops.pose.visual_transform_apply()
for bone in armature_noIK.pose.bones:
bone.keyframe_insert(data_path="location")
if bone.rotation_mode == "QUATERNION":
bone.keyframe_insert(data_path="rotation_quaternion")
else:
bone.keyframe_insert(data_path="rotation_euler")
# remove contraints
for bone in armature_noIK.pose.bones:
for constraint in bone.constraints:
if constraint.type == 'COPY_LOCATION' or constraint.type == 'COPY_ROTATION':
bone.constraints.remove(constraint)
For some reason, all the script will not enter at once. You’ll need to press Enter twice.
Delete the original IK Armature and mesh.
Export the runtime rig, both animation and mesh to an .fbx file.
3 Likes