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

最低0.47元/天 解锁文章
735

被折叠的 条评论
为什么被折叠?



