首页 > 其他分享 >blender4.1添加骨骼复制位置和复制旋转约束代码(Armature-Biped_Root)

blender4.1添加骨骼复制位置和复制旋转约束代码(Armature-Biped_Root)

时间:2024-06-22 08:59:37浏览次数:12  
标签:target mixamorig source 复制 blender4.1 armature Root bone name

添加旋转旋转约束

import bpy

# 定义骨架中骨骼的映射关系
bone_mapping = {
    "mixamorig:Hips": "Pelvis",
    "mixamorig:LeftUpLeg": "Left_Thigh",
    "mixamorig:LeftLeg": "Left_Calf",
    "mixamorig:LeftFoot": "Left_Foot",
    "mixamorig:LeftHand": "Left_Hand",  # 假设Left_Toe0没有旋转约束
    "mixamorig:RightUpLeg": "Right_Thigh",
    "mixamorig:RightLeg": "Right_Calf",
    "mixamorig:RightFoot": "Right_Foot",
    "mixamorig:RightHand": "Right_Hand",  # 假设Right_Toe0没有旋转约束
    "mixamorig:Spine": "Spine",
    "mixamorig:Spine1": "Spine1",
    "mixamorig:Spine2": "Spine2",
    "mixamorig:RightShoulder": "Right_Clavicle",
    "mixamorig:RightArm": "Right_UpperArm",
    "mixamorig:RightForeArm": "Right_Forearm",
    "mixamorig:Neck": "Neck",
    "mixamorig:Head": "Head",
    "mixamorig:LeftShoulder": "Left_Clavicle",
    "mixamorig:LeftArm": "Left_UpperArm",
    "mixamorig:LeftForeArm": "Left_Forearm",
}

# 要添加约束的骨架名称
source_armature_name = "Armature"
target_armature_name = "Biped_Root"

# 找到源骨架和目标骨架对象
source_armature_obj = bpy.data.objects.get(source_armature_name)
target_armature_obj = bpy.data.objects.get(target_armature_name)

if source_armature_obj and target_armature_obj and source_armature_obj.type == 'ARMATURE' and target_armature_obj.type == 'ARMATURE':
    # 遍历映射关系,为每个骨骼添加复制旋转约束
    for source_bone_name, target_bone_name in bone_mapping.items():
        source_bone = source_armature_obj.pose.bones.get(source_bone_name)
        target_bone = target_armature_obj.pose.bones.get(target_bone_name)
        
        if source_bone and target_bone:
            # 添加复制旋转约束
            constraint = source_bone.constraints.new('COPY_ROTATION')
            constraint.target = target_armature_obj
            constraint.subtarget = target_bone.name
            print(f"Added COPY_ROTATION constraint from {source_bone_name} to {target_bone_name}.")
        else:
            print(f"One or both bones not found: {source_bone_name}, {target_bone_name}")
else:
    print(f"One or both armatures not found or not of type ARMATURE: {source_armature_name}, {target_armature_name}")

添加复制位置约束

 

import bpy

# 定义骨架中骨骼的映射关系
bone_mapping = {
    "mixamorig:Hips": "Pelvis",
    "mixamorig:LeftUpLeg": "Left_Thigh",
    "mixamorig:LeftLeg": "Left_Calf",
    "mixamorig:LeftFoot": "Left_Foot",
    "mixamorig:LeftHand": "Left_Hand",  # 假设Left_Toe0没有旋转约束
    "mixamorig:RightUpLeg": "Right_Thigh",
    "mixamorig:RightLeg": "Right_Calf",
    "mixamorig:RightFoot": "Right_Foot",
    "mixamorig:RightHand": "Right_Hand",  # 假设Right_Toe0没有旋转约束
    "mixamorig:Spine": "Spine",
    "mixamorig:Spine1": "Spine1",
    "mixamorig:Spine2": "Spine2",
    "mixamorig:RightShoulder": "Right_Clavicle",
    "mixamorig:RightArm": "Right_UpperArm",
    "mixamorig:RightForeArm": "Right_Forearm",
    "mixamorig:Neck": "Neck",
    "mixamorig:Head": "Head",
    "mixamorig:LeftShoulder": "Left_Clavicle",
    "mixamorig:LeftArm": "Left_UpperArm",
    "mixamorig:LeftForeArm": "Left_Forearm",
}

# 要添加约束的骨架名称
source_armature_name = "Armature"
target_armature_name = "Biped_Root"

# 找到源骨架和目标骨架对象
source_armature_obj = bpy.data.objects.get(source_armature_name)
target_armature_obj = bpy.data.objects.get(target_armature_name)

if source_armature_obj and target_armature_obj and source_armature_obj.type == 'ARMATURE' and target_armature_obj.type == 'ARMATURE':
    # 遍历映射关系,为每个骨骼添加复制旋转约束
    for source_bone_name, target_bone_name in bone_mapping.items():
        source_bone = source_armature_obj.pose.bones.get(source_bone_name)
        target_bone = target_armature_obj.pose.bones.get(target_bone_name)
        
        if source_bone and target_bone:
            # 添加复制旋转约束
            constraint = source_bone.constraints.new('COPY_LOCATION')
            constraint.target = target_armature_obj
            constraint.subtarget = target_bone.name
            print(f"Added COPY_ROTATION constraint from {source_bone_name} to {target_bone_name}.")
        else:
            print(f"One or both bones not found: {source_bone_name}, {target_bone_name}")
else:
    print(f"One or both armatures not found or not of type ARMATURE: {source_armature_name}, {target_armature_name}")

 

标签:target,mixamorig,source,复制,blender4.1,armature,Root,bone,name
From: https://www.cnblogs.com/jingzaixin/p/18261839

相关文章

  • MySQL之复制(九)
    复制复制管理和维护确定主备是否一致在理想情况下,备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误,备库同样可能因为MySQL自身的特性导致数据不一致,例如MySQL的Bug、网络中断、服务器崩溃,非正常关闭或者其他一些错误。(......
  • buildroot --- BR2_EXTERNAL(添加外部 package,不改变 buildroot 任何内容)
    make-C$(buildroot文件夹路径)BR2_EXTERNAL=$(BR2_EXTERNAL_XXX_PATH),可以不修改buildroot/package路径下的内容实现编译引用外部packageBR2_EXTERNAL_XXX_PATH文件夹需要包含如下三个文件:external.descexternal.mkConfig.inexternal.mk包含所有package的mk文......
  • buildroot-2020.05生成不了bluez相应工具的解决方法
    使用buildroot-2020.05编译生成bluez时,无法生成bluetoothctl、hciconfig等工具,发现其默认使用的bluez版本为5.54,而我们验证改为5.52版本时才能生成这些工具,故做了如下修改:1.bluez5_utils a.修改package/bluez5_utils/bluez5_utils.mk文件,将   BLUEZ5_UTILS_VERSION=......
  • python工具系列(亲测有效):在pycharm中复制粘贴时出现ENSP如何处理
    在pycharm中复制粘贴时出现ENSP如何处理在pycharm中复制粘贴时出现ENSP如何处理在pycharm中复制粘贴时出现ENSP如何处理安装nexchatgpt插件之后,生成的代码,如果直接粘贴到pycharm.py文件中,会出现ENSP图样,如下图所示:粘贴到jupyternotebook虽然看不出来,也是不能......
  • linux重启后SSH无法启动,报/var/empty/sshd must be owned by root and not group or w
    问题:Linux上的SSH无法启动,执行/usr/sbin/sshd报 /var/empty/sshdmustbeownedbyrootandnotgrouporworld-writable。解决办法:查看发现这个目录的属主不是root,所以启动ssh报错#ls-ld/var/empty/sshd/  d——x——x——x2meifuroot1024Feb192024/var/emp......
  • buildroot --- 新添加一个 package(应用)
    参考资料:https://buildroot.org/docs.html buildroot-slides.pdf章节 IntegratingnewpackagesinBuildroot  以下基于RK3308SDK(与SDK关系不大,其他SDK类似) 在app文件夹下新建个文件夹wifitest,里面新建两个文件main.c#include<stdio.h>intmain(int......
  • 快团团大团长如何设置帮卖(复制帮卖)?帮卖教程教你怎么做!
    快团团大团长如何设置帮卖(复制帮卖)?帮卖教程教你怎么做!一、功能说明【帮卖】:开团的团长自己有货品,但是想要更多的出货量,团长就可以给其他有顾客资源的团长设置帮卖佣金,邀请其他团长帮忙卖货。【复制帮卖】:复制帮卖就是小团长复制大团长的团购内容,用自己的身份开团,复制帮卖可......
  • mysql主从复制GTID模式
     版本8.0.36 主从复制的定义是指把数据从一个Mysql服务器(主节点)复制到一个或多个Mysql服务器(从节点)中,会把主节点服务器中的所有数据库实例、特定数据库实例或特定表等,全部复制到从节点服务器中。主从复制的原理是通过基于日志的复制方式实现数据的同步。当主服务器上发生数......
  • OpenCL中局部变量和全局变量间的异步复制内存
    本文主要是async_work_group_copy(...)和wait_group_events(...)的使用范例。展示了从全局内存到局部内存加载数据和从局部内存到全局内存写入数据。这系列内置函数可以用来取代直接赋值式的代码。不过我没有仔细对比过使用异步复制和直接赋值那个效率更高。本系列函数中还有定步......
  • MySQL之复制(四)
    复制复制的原理基于语句的复制在MySQL5.0及之前的版本中只支持基于语句的复制(也称为逻辑复制),这在数据库领域是很少见的,基于语句的复制模式下,主库会记录那些造成数据更改的查询,当备库读取并重放这些事件时,实际上只是把主库上执行过的SQL再执行一遍。这种方式既有好处、......