pc8888888 发表于 2022-5-27 17:20

介绍一下Control Rig方案

最近Epic又搞出了一个噱头很足的MetaHuman项目。在第二个宣传片里,冒出了一大片控制器,角色台词里说出一句“I am fully rigged”,而我也刚好在抄FF7RE的复读内容里提到的Control Rig方案,顿时起了兴趣,赶紧下载学习一下样例工程,顺便看看这话到底有多少水分。
Control Rig是什么

在Unreal引擎里绑定模型编辑骨骼约束的资源。。。概念就是这么简单一概念,但背后包含的对模块设计,工作流程设计和思考就没有这么简单了。
刚接触这个概念的人最直接的反应,Control Rig能干的事看起来动画蓝图也能干,他们之间有什么区别?
概念上,Anim BP是动画逻辑脚本,Rig Graph是骨架约束脚本;一个是Controller,一个是Component。实际操作上,Rig Graph可以混合Anim BP,Live Link, Sequecer使用,独立控制约束开关;Anim BP则只能在模型播放动画且逻辑通路跑到约束逻辑时才能执行约束效果。等功能推广普及后,甚至可以让制作绑定的同学来引擎里配合制作Rig Graph,但他很难去负责动画蓝图里的约束控制。

Control Rig有什么用

交互需求

以FPS为例子,每个枪械操作的动作需求都发生在相机正前方,正确性问题比滑步还要严格。

[*]常规的解决思路,将枪械分组,每一组枪械有相同的交互操作和交互位置。
[*]使用IK的解决思路,设计交互组件,IK交互点,交互动画,在每个枪械模型上独立配置交互。


相比FPS而言其他类型游戏并没有这类常规性的交互需求,更多的是在实现特殊动画,场景交互,物品交互,人物交互的功能模块时,需要间歇性的开启交互组件。但思路都是一致的,为了提高交互的动态性,需要合理的配置一些IK功能。
为了更加系统性的配置IK功能,可以对这部分系统做一次业务抽象,总结动态交互模块->设计绑定脚本->配置角色模板。这块的设计分层思路,和UE把Controller和Component分离的设计类似;Component本身只是功能的载体,暴露开关调度接口给业务逻辑层;开发阶段的编辑配置因为这个分层变得非常轻量,角色模型绑定Rig Component的配置思路符合常规的面向对象原则。



总结动态交互模块-设计绑定脚本-配置角色模板

动画需求

ControlRig方案的最佳实践是创建出全身控制点,可以为动画重定向提供中转骨架。这其中包含动态重定向和静态重定向两个部分。
动态重定向就如上面提到的游戏模块,利用Rig约束实时性的特点,利用IK功能实现一些表现效果,从而减少美术静态动画资源的数量。


静态重定向部分,构思比较激进。首先我们要了解,DCC内的骨架约束作为辅助静态动画制作的一环,只能在DCC软件内发挥作用,常规导入到游戏引擎的只有被烘焙的动画数据和失去约束效果的骨架,都是静态数据。引擎方面就在考虑有没有更为灵活的在引擎内建立绑定调整动画的制作方式。引入引擎内Rig资产的概念,就可以解决这个问题,约束功能从DCC内的辅助工具,变为可以提供引擎使用的数字资产。


配套的加入约束的反向计算,Control Rig的工作流提前,如此便可以让美术在引擎内进行简单的动画调整。理想的设计,将Control Rig用作数据沙盒的唯一出口,统筹现有方案,可以有效减少抽象概念。同时通过合理配置全身IK节点,可以减少部分功能的计算节点数量。



Unreal的方案

看完了上面介绍的内容后,我们再回过头来看Unreal 的Control Rig方案,挑出重点来说。

Rig Graph配备了新的的蓝图解释器,设定了三个逻辑入口:

[*]Setup:初始化
[*]Forward Solve:正向计算,ctrl->bone
[*]Backward Solve:反向计算,bone->ctrl
由此实现了在引擎内修改动画的基本流程。
新增概念Rig Hierarchy,包含RigElement,子类有FRigBone,FRigControl等。新增概念Control Type,辅助分类配置控制器节点。这部分在MetaHuman的Facial Rig里表现最为明显,大部分控制点都是Float,少量的Vector2D和Bool。在实际操作上,允许配置Control节点的控制器位置。
由此实现在编辑器环境下的拖动编辑。



编辑Rig Graph的时候,对着官方的ControlRigMannequin(过期)和MetaHunmans(很长)项目抄一遍,入门一下IK方案,就能对具体功能有基本认识。看了一遍大概有下面这些重要节点:

[*]ProjectTransformToNewParent:转换坐标空间输出Transform的节点
[*]Get&SetTranform:读写节点Transform
[*]Inital&Offset&Current Transform:节点内置概念,合理使用可以减少计算量
[*]IKSolver:常用的BaseIK(TwoBone),FabrIK计算节点
[*]GetControl:根据控制器类型获得返回值
[*]SetToCurve:Facial Rig的写操作



尾巴

Contol Rig概念虽然比较新鲜,但实际写起来就是个类似大段IK计算代码的东西。MetaHuman宣传片里讲的话确实没有水分,那么长一堆代码,缩放调到最大都看不全,控制器全身上下连手指都绑定到了(虽然没绑定脚趾)。根据我的观察,确认了Control Rig在实际应用中只是一个单纯线性的计算流程。按照FF7的ppt里给出的说明,Hip Control这个流程花点心思还原一下,应该能做出一个功能近似的劣化版本。有了IK集合的概念之后,差不多攻击吸附之类的功能也可以作为角色的控制点放到约束上配置,能干的事可以变得更多。



Hip不放在一开始算也是一个设计点

BlaXuan 发表于 2022-5-27 17:25

您好,想问一下ff7的ppt在哪里能看,找了半天没有找到

super1 发表于 2022-5-27 17:30

CEDiL - CEDEC Digital Library
页: [1]
查看完整版本: 介绍一下Control Rig方案