blender python 代码根据虚拟人物生成相应视频

1、虚拟人物下载(fbx):Mixamo

2、虚拟人物设计:可以下载makehuman,然后导出为obj或fbx格式,并且在Mixamo上面进行绑定骨架

3、骨架绑定(需要带有界面的GPU机器)自动完成骨架绑定:https://github.com/zhan-xu/RigNet

4、也可以利用 :Mixamo上传对应的模型进行骨架绑定

5、代码操作部分(相机跟拍、人物动作混合、声音轨道和动作轨道混合):

import os
import re

import bpy
class ModelProcessingTool:
    def __init__(self):
        # self.start()
        print("finished!")
        self.base_data_path = "G:/git_alg/dengta/digital_man/data/"
        self.scn = bpy.context.scene
        self.head_bone_reg=re.compile(r'.*Spine$')
    def add_action_to_nla(self, ob, track_name, action_name, frame_num):
        # 在nla中,按照object进行分组,如果是控制骨骼动作,故先获取到骨骼实体,对齐进行插入轨道操作

        # action是已经做好的动作,在动作编辑器中制作完成后,存放到非线性动画堆栈中但暂时不启用,而是等待被调用
        action = bpy.data.actions[action_name]  # !!!关键语句
        print(ob.animation_data.nla_tracks.keys())
        if action is not None:
            # 新建轨道:如果已经有同名轨道的话,就不新建
            if track_name in ob.animation_data.nla_tracks.keys():
                track1 = ob.animation_data.nla_tracks[track_name]
            else:
                track1 = ob.animation_data.nla_tracks.new()  # !!!关键语句
                track1.name = track_name

            # 冲突判断:由于同一个轨道上面,多个动作不能重叠,如果要做动作混合,可以新建一个轨道,这里不需要动作混合,如果有重叠,就直接返回错误

            action_len = action.frame_range[1] - action.frame_range[0]
            action_start = frame_num
            action_end = int(action_start + action_len)

            print("in")
            for act_ani in track1.strips:
                exist_act = act_ani
                print("dd")
                print(action_start, action_end, exist_act.frame_start, exist_act.frame_end)
                if exist_act.frame_start > 1:
                    result = set(range(int(exist_act.frame_start), int(exist_act.frame_end))).intersection(
                        set(range(action_start, action_end)))
                    print(result)
                    if result:
                        print("error -1")
                        return False

            # 将动作加入到nla中的对应轨道的对应时间段
            track1.strips.new(action.name, frame_num, action)  # !!!关键语句
            return True
        else:
            print("error -2")
            return
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会发paper的学渣

您的鼓励和将是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值