Copy link to clipboard
Copied
When are we going to get Blendshap Support For Facial Animations?
Copy link to clipboard
Copied
Hi @Mia21926898f70t Belendshapes are on the radar, but I do not have a date for you at this time. I will updated you here when I have more information. Thanks
Copy link to clipboard
Copied
Know this isn't an ideal solution but I just figured out a way around this. In blender, create an armature with a bone at every vertex of your mesh with copy location constraints to the respective vertex. Bake the action of the bones as they follow your shapekey animation, then parent the mesh to the armature. I haven't tested too extensivly but this first test works well - about 500verts and 500bones -> https://adobeaero.app.link/bVm2Jy9qYyb
Here's a script that automates the bone creation and the constraint creation
import bpy
mesh_object = bpy.context.active_object
mesh_object.name = "MyMesh"
# Create an armature object
bpy.ops.object.armature_add()
armature_object = bpy.context.active_object
armature_object.name = "MyArmature"
armature = armature_object.data
# Enter Edit mode on the armature
bpy.context.view_layer.objects.active = armature_object
bpy.ops.object.mode_set(mode='EDIT')
# Iterate through each vertex in the mesh
mesh = mesh_object.data
for vert in mesh.vertices:
# Create a bone for each vertex
bone = armature.edit_bones.new("Bone_" + str(vert.index))
# Set the bone's head and tail to the vertex location
bone.head = vert.co
# Set the bone's roll to align with the vertex normal
bone.roll = vert.normal.angle((0, 0, 1))
# Exit Edit mode on the armature
bpy.ops.object.mode_set(mode='OBJECT')
# Create a vertex group for each vertex in the mesh
mesh = mesh_object.data
for vert in mesh.vertices:
# Create a vertex group for the vertex
vg = mesh_object.vertex_groups.new(name="Vertex_" + str(vert.index))
# Add the vertex to the vertex group
vg.add([vert.index], 1.0, 'REPLACE')
# Clear existing bone constraints
bpy.ops.object.mode_set(mode='POSE')
bpy.ops.pose.select_all(action='SELECT')
bpy.ops.pose.constraints_clear()
# Add a Copy Location constraint to each bone of the armature
for pose_bone in armature_object.pose.bones:
bone_name = pose_bone.name
vertex_group_name = "Vertex_" + bone_name.split("_")[-1]
# Check if the vertex group exists in the mesh
if vertex_group_name in mesh_object.vertex_groups:
# Create a Copy Location constraint for the bone
constraint = pose_bone.constraints.new('COPY_LOCATION')
constraint.name = "Copy Location: " + bone_name
constraint.target = mesh_object
constraint.subtarget = vertex_group_name