BlueRoseNote/03-UnrealEngine/Animation/外包过程中的动画重定向以及蒙皮调整经验.md
2023-06-29 11:55:02 +08:00

96 lines
8.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 外包过程中的动画重定向以及蒙皮调整经验
date: 2022-08-24 09:52:19
excerpt:
tags:
rating: ⭐
---
## 前言
本人最近给自己的Demo外包了若干角色动画也遇到了一些坑。所以这里给大家分享一下相关经验避免大家再次采坑尤其是那些缺乏经验、精力的独立游戏制作者。当然本人对3DMax完全不熟悉大部分信息都是本人与外包大哥沟通过程中产生的个人认知如有错误还请指正谢谢。
PS.本人因为布料碰撞问题导致重新导入6次角色包括绘制布料、设置碰撞与编写动画蓝图。真是太痛苦了
## 如果角色需要使用Ue4的布料需要额外确认的事情
1. 使用的是否是3DMax。
2. 场景单位问题:角色大小是否正常。
3. 骨骼问题根骨骼的缩放是否为1、旋转是否为0与布料碰撞有关骨盆骨骼也需要检查一下防止因为fbx导出轴向问题导致骨盆骨骼旋转。换句话说就是在拿到绑定后的角色时需要马上使用Ue4进行角色布料碰撞测试。
当然蒙皮与动画肯定是要检查的,一般靠谱的外包都不会犯这些错,所以这里我也不说了(主要是我也不太懂)。这里主要是我个人认为需要注意的问题:
第一点和第二点可以合起来说:因为3DMax的默认单位是英寸在绑定时有可能会出现因为导入模型时的单位不正确而导致角色缩小问题。至少本人遇到了这个问题整整郁闷了1个月。个人认为关键还是需要搞清楚max或者fbx文件的单位、max的系统单位以及输出单位。调整单位的方法有以下3个
## 单位问题
**设置Max场景单位**
Max导出文件单位不正确的主要原因在于文件本身的单位不正确。Ue4的默认单位为厘米而Max默认为英寸。所以我们可以通过调整单位来解决这个问题大致步骤如下 1. Cutomize-UnitsSetup进度单位设置命令。 2. 选择SystemUnitSetup。 3. 将单位设置为厘米。 4. 此时打开单位为英寸的max文件就会提示Units Mismatch,选择Rescale The File Objects To System Unit Scale。 5. 之后导出Fbx注意将导出单位改成厘米。
**场景缩放**
对于蒙皮文件,这个操作可能会产生问题。操作步骤如下: 1. 在Utilities栏中找到RescaleWorldUnits并打开。 2. 设置缩放因子后,点击确定。
**UnrealEngine导入设置**
在Ue4导入选项中有个单位缩放你可以直接在这里设置导入缩放比例。在没有Max源文件只有fbx文件的情况下只能选择这种方法。
> 注意如果你的角色要使用布料系统那么以上方法都会让布料的碰撞失效。经过试验如果根骨骼的缩放不为1以及旋转不为0就会出现碰撞失效的情况。因为这些方法本质就是缩放根骨骼。
一种简单的解决方法就是直接设置角色类骨骼模型的缩放。不过本人因为强迫症所以不推荐这种方法。具体的解决方法请参照**Maya蒙皮传递**这一节。这里我先说一下2个软件的骨骼系统之后再细说解决方法。
## 骨骼类型
据我所知3DMax有CS(biped)与CAT骨骼系统虽然它也有普通的骨骼但是因为角色动画库基本都是以这些骨骼系统为基础所以基本不会使用。
我找的外包大哥用的是CS(biped)。CS有点不爽的地方就是会都出一个Biped节点。
至于CAT结构和Ue4的HumanIK结构相似但外包大哥说这个不太稳定所以没有使用。
对应到Maya则是HumanIK工具结构和Ue4的HumanIK结构相似多出一节脚趾骨当然我目前没有和专门外包Maya动画的公司沟通过不太确定他们是不是使用HumanIK来做角色动画库的。如果公司打算专门给Ue4做动画可以考虑使用Ue4的动画插件。
这些骨骼系统对于动画其实并没有影响但如果你是一个和我一样的拿着自己的工资做Demo的傻逼个人开发者**因为资金有限无法外包所有的动画或是需要使用商场资源制作原型亦或是想套用AdvancedLocomotionSystemV的动画系统。那么我推荐你使用Ue4的标准骨骼进行绑定并使用重定向系统将其他骨骼系统的动画重定向到标准骨骼上。**
理论上动画师还是会使用动画库对应的骨骼系统再绑定一个角色,因为动画需要根据角色模型进行调整。当然绑定的精度不用那么高了。
## 动画重定向
因为本人使用的是Maya所以这里以Maya为主。首先需要制作用于重定向的标准的TPose就是把角色摆成一个十字架可以参考HumanIK工具的标准骨骼。其原因是因为TPose容易统一方便对齐。重定向Pose将会直接影响重定向的质量。所以我推荐在Maya中制作另一个原因在于Ue4的重定向工具无法根据现有骨骼动画处理IK骨骼动画。下面我将简单介绍Ue4与Maya中的重定向流程
**UE4**在Maya中制作完TPose后给骨骼K一帧动画并导出。在Ue4中导入后在得到的AnimationSequence上右键Create-Create PoseAsset之后就可以在RetargetManager左下的ManageRetargetBasePose界面中点击ModifyPose指定创建的TPose。
根据重定向源与目标不同还可以分为这里的非UE4骨骼动画以CS骨骼动画为准
CS=》Mannequin与Mannequin=》CS按照对应骨骼结构在RetargetManager的SetUpRig中选择HumanIK模板并设置对应骨骼即可。如果两个绑定角色的身高相同root骨骼可以置空。如果不同则需要在给CS骨骼再添加一根root骨骼。重定向过程中可能会出现手臂、腿部不正确的问题这可能是twist骨骼位移的问题需要将部分twist骨骼需要置空。
CS=》CS这种情况可能涉及到其他非标准骨骼所以这里需要在重定向源骨骼Asset上右键Create-Create Rig再按照对应骨骼结构填入。
**Maya**选择Rigging模式点击Skeleton-HumanIK运行。之后再点击CreateCharacterDefinition创建角色定义就可以指定对应骨骼了。
你可以手动指定也可以套用官方模板前提是你的骨骼没有改过名称模板有CS、CAT与HIK。大致步骤如下
[https://www.youtube.com/watch?v=ms1wGBjykA8www.youtube.com/watch?v=ms1wGBjykA8](https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3Dms1wGBjykA8)
如果你的骨骼改过名称了就需要手动指定了。如果你的角色骨骼没有处于TPose状态HumanIK界面中的大臂与手会显示为黄色所以遇到这种情况就需要调整当前骨骼为TPose状态。
在设置完重定向源与目标角色后:
1. 点击CreateControlRig添加控制之后角色会被锁住如果要再次修改则需点击边上的锁按钮。
2. 导入重定向源的动画。
3. 在HumanIK的Character中选择目标角色Source选择为重定向源角色此时重定向源的动画数据就已经重定向目标角色上了。
4. 如果你的目标角色为UE4标准骨骼此时就需要将IK骨骼P设置父子关系到对应的控制器上。 应该是将IK骨骼和对应的骨骼建立父子约束先选爹再选儿子这一步应该在设置TPose之前进行。
5. 选中骨骼、模型与控制器,并且导出动画。(记住需要点击烘焙动画选项)
## Maya蒙皮传递
大致操作如下:
1. 复制原有蒙皮文件作为新的蒙皮文件。在删除历史、断开连接后,调整骨骼与模型大小,并且冻结缩放与旋转属性。
2. 将原有蒙皮文件的骨骼进行批量重命名。
3. 将原有蒙皮文件导入新的蒙皮文件中。因为之后需要将模型合并所以需要确定UV通道是否正确如果你像我那样扣了UE4角色的眼睛的话
4. 将原有模型与调整过大小的模型分别进行合并之后切换到Rigging模型运行skin-BakeDeformationToSkinWeights。
5. 在大纲视图中选中对应项按住鼠标中键拖拽到对应栏中以完成指定。指定完选项点击Apply。再等一把王者顺风局的时间蒙皮的就传递好了。
## Maya批量命名脚本
如果你的重定向源骨骼名称与目标相同这就需要进行批量改名了。这是网上找来的脚本对于骨骼需要按住Shift并且点击+,展开所有骨骼节点,再选中批量添加后缀。
```text
from maya.cmds import *
sel = ls(sl=True)
numSel = len(sel)
for i in range(0,numSel,1):
origName = sel[i]
#print origName
rename(origName,origName+'_old')
```
## 结语
本文写的比较仓促如有不明白的地方欢迎交流。Maya中的重定向工作可以通过Python编写插件来实现批量重定向动画本人将会在Demo完成后尝试编写这个插件。