【UE5】Metahuman自定义衣服蒙皮权重 您所在的位置:网站首页 blender顶点组权重 【UE5】Metahuman自定义衣服蒙皮权重

【UE5】Metahuman自定义衣服蒙皮权重

2023-03-24 23:33| 来源: 网络整理| 查看: 265

好久没写技术文章了,老觉得写这种玩意儿又不酷又没劲,但回头想想能帮助更多的人发挥更多的价值也是挺好的,有钱人不正是创造了非常多的社会价值所以才fire嘛,所以容吾等被垃圾琐事环绕的垃圾人写点垃圾痛快痛快,是垃圾也可以回收利用滴。

一、准备基础人体资源,并编辑衣服顶点或Pose适配人物角色

捏人的官网衣服很少,需要用自己制作的或网络上现成的衣服资源调整pose后进行蒙皮权重处理。但作为一个又懒又嫌麻烦的社会人,衣服权重怎么可以动手亲自刷呢,而且要刷单个角色得刷到猴年马月了,所以还是得程序化,力能借则借,劲能省则省,心力有限,减少不必要的麻烦才是正道。根据之前处理表情的经验,尝试摸索了一下衣服权重相关,当然不一定对,思路仅供参考。

所有虚拟角色的骨骼:metahuman_skel(动画共享啊)角色身体:官网下载的身体(不要带衣服,带衣服的进maya是没穿衣服,进UE身体会中空,被衣服GAI了呗。)

骨骼网络体并不是所有的骨骼都会用到,没有权重的骨骼会显示为灰色,可以只显示有权重的骨骼。导出FBX模型即可。

编辑衣服顶点适配角色是苦力活,没啥说的。

二、根据模板衣服确定需要的顶点组,并将资源导入进Blender

拷贝所有骨骼到vscode中发现metahuman有363个骨骼,但是很显然衣服不可能会用到所有的骨骼。

对模板的上衣和裤子进行比对,可以发现我们要传递的权重大概只有几十个,那就好办了。

好了,把官网的身体模型和自定义的衣服模型都开进Blender!

有个小技巧,都是血泪教训换来的,Blender默认单位是m,跟UE差100倍,需要将场景缩放100倍。(Length从m改成cm可能也会有问题,还是通过改单元大小进行缩放吧)

如果不进行提前缩放的话,进UE后你的root根骨骼会放大100倍,导致模型也会放大一百倍(不要通过Blender导出缩放100倍或进UE缩放100倍,还是在软件生态中就把单位设好,缩放0.01导入或放大100导出很容易出现蒙皮错误的情况)

小伙子不要自己瞎调导入导出的预设,会很容易出错的,UE导入勾选转换场景和场景单元即可,UE导出勾导出模型(没有朝向预设),Blender方面都保持默认。(不要瞎调scale,都保持default)

三、将衣服的蒙皮权重传递给衣服

快捷键提升效率,比如导入导出等各种繁琐的流程操作,右键将操作直接添加到偏好当中Q调取或直接设置快捷键非常方便。

导进来后,发现,咦,对了。就喜欢这种缺斤少两的东西,顶点组越少越好,可以发现spine_05没见了,也就是说衣服也不需要spine_05骨骼权重,证明在UE中通过人体的权重骨骼定的顶点组还是会有偏差的,跟衣服权重骨骼比较一下确定最终衣服的顶点组。

通过跟模板衣服比对,最终确立了这38个顶点组,当然不一定准,比如twistCor也可以要上。上肢四个关键词:clavicle胳肢窝、upperarm上臂、lowerarm下臂、hand手。下肢三个关键词:thigh大腿、calf小腿、foot脚丫子。

中轴线8个:root pelvis spine_01 spine_02 spine_03 spine_04 neck_01 head 上肢16个:clavicle_l clavicle_r upperarm_l upperarm_r lowerarm_r lowerarm_l upperarm_twist_01_l upperarm_twist_01_r upperarm_twist_02_l upperarm_twist_02_r lowerarm_twist_01_l lowerarm_twist_02_l lowerarm_twist_01_r lowerarm_twist_02_r hand_l hand_r 下肢14个:thigh_l calf_l thigh_r calf_r thigh_twist_01_r thigh_twist_02_r thigh_twist_01_l thigh_twist_02_l calf_twist_01_l calf_twist_01_r calf_twist_02_l calf_twist_02_r foot_l foot_r

为了方便,在此拿模板衣服简单做个演示。可以先把模型跟定位器分离,衣服两个模型合并。

稍微Ctrl+J合并一下,然后删除衣服的所有顶点组(为了方便测试)

先选衣服,再选骨骼,Ctrl+P 空组绑一下骨骼,顶点组权重对应骨骼名。

绑定后发现衣服也会自动生成相对应骨骼名称的顶点组。(上面删除操作可以忽略,到这删除,主要是为了避免有时候传递权重没有传递到位,通过看有无顶点组来检查)

先选没有顶点组的衣服,再选有顶点组的身体,Ctrl+L 传递权重,所有层进行传递,可以发现权重已经传给到了衣服。

四、添加没有的顶点组

哎呀,可以看到这顶点组实在是太多了,有些根本用不到,有些还可能没有。

基本最重要的就是四肢的权重。

手点一个个加并重命名太麻烦了,找谷哥哥和官方Python API去了。

照葫芦画瓢,WPS来点伪代码。10换行、34双引号、39单引号,由于单列拷出来会带双引号,需要查找清除,所以变量用单引号括起来。

拷过来执行一下,可以发现我们要的顶点组就来了。

五、通过VertexWeightMix修改器Mix叠加权重。

比如lowerarm_in/out/fwd/bck_l,一看这个前后左右的就不顺眼,通过权重查看我确定这就是我要的lowerarm_l,upperarm、thigh的左右也是,以及calf_KneeBack/knee_l,要啥膝盖,果断干掉,只要calf_l。

还有一些是骨骼和权重名称不一致的,还有一些顶点组是丢失的,比如女性角色的calf_twist_02_r。我认为顶点组该有的必须有,但越少越好。

import bpyobject = bpy.data.objects['f_med_nrw_cloth.001']bpy.ops.object.vertex_group_add()object.vertex_groups[-1].name='calf_twist_02_r'

一个个加选设置太慢了。

还是要猥代码,将group_b的权重传递给group_a。

modifier1=object.modifiers.new(type='VERTEX_WEIGHT_MIX',name='VertexWeightMix1')modifier1.mix_mode=('ADD')modifier1.vertex_group_a=('lowerarm_l')modifier1.vertex_group_b=('lowerarm_out_l')modifier1.mix_set=('ALL')bpy.ops.object.modifier_apply(modifier='VertexWeightMix1')

全部拷贝到Blender中执行。

应用一下可以看到权重都合并到单个的顶点组上了。

六、删除多余的顶点组

别忘了最重要的删除。

bpy.ops.object.vertex_group_set_active(group='root')bpy.ops.object.vertex_group_lock(action='LOCK', mask='SELECTED')bpy.ops.object.vertex_group_remove(all_unlocked=True)

代码跑一下停了,猜想跟上面的calf_twist_02_r一样是因为丢失引起的,但这个就不同了,通过对比左右权重,发现twist_02_r就是twistCor_02_r,所以简单重命名一下就好了。

可以看到我们要的顶点组基本到齐了。

七、对权重进行一些微调

这个是模板衣服,当然测着可能没什么问题。如果衣服有带有头饰或鞋子的话,就编辑模式中先Ctrl加选顶点红Assign定义面组,再绿黄清除顶点组的权重。

或者是清理权重,给到1即可。

再然后就是刷了。doge,程序化的最好,哈哈。刷是不可能的,这辈子都不可能刷的,刷起来不好又容易错。

如果编辑骨骼pose时模型有变形,将绑定修改器的Preserve Volume勾选即可。(Ctrl+P绑定会自动创建的)

八、导出角色到UE

选metahuman_base_skeleton替换mesh即可,这样衣服和角色动画就是共享的。

默认都是有master pose component。

要不然有时候会出现脑袋和身体接缝的问题。

之后再通过IK Rig确立重定向的骨骼大体部位,

IK Retargeter IK FK混合骨骼权重进行动画的微调。(好像5里IK重定向的Additinal Mesh有bug,要不然衣服脑袋头一块加上进行效果的预览和调节)

好了,垃圾人基本上想要表达的就这些了,仅供参考。刚好差不多仨半小时完事,睡觉了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有