BlaXuan 发表于 2022-9-26 19:38

Unreal 5.0 中 Control Rig 层次结构的更改?

在本文中,我们将讨论 Unreal 5.0 中 Control Rig 层次结构的更改。我们通过消除在其他层次结构实现中看到的某些限制,提出了一种操纵静态层次结构的新方法。
我们将讨论之前的限制、我们的实现以及动态层次结构的用例。这篇文章会让角色绑定师、动画师和程序员对虚幻 5.0 中的控制绑定和运行时动画感兴趣。
当前系统中存在哪些问题?

广泛使用的 DCC(数字内容创建工具)对角色绑定有一系列假设:

[*]层次结构在动画开始之前由绑定器固定和定义。
[*]解决姿势的图是固定的,因此必须在动画开始之前定义装备的所有特征。
[*]钻机的多种用途/任务需要多个钻机。
这些假设/技术限制推动了角色装备的设计,一直到电影和游戏工作室的动画管道。这导致:

[*]角色绑定可能非常复杂,因为它们需要解决角色可能遇到的所有潜在动画挑战以及动画师的具体要求。
[*]从 Motion Capture 到最终表演的动画流程可能是零散的,并且需要许多绑定和处理步骤。
[*]工作室必须投资定制开发,以解决与上述假设相冲突的动画挑战。工作室倾向于开发大型而复杂的动画工具,或者依赖于现有管道之上的一系列插件和拼凑而成。
基于依赖图的架构对于角色绑定和动画有一系列缺点:

[*]周期可能是有问题的。有向图求解模型不能很好地处理/根本无法处理循环行为,例如对称性或随时间变化的依赖关系
[*]控制结构与绑定的求解部分相结合,为更改某些动画任务的控制行为带来了挑战。
多年来,许多专有解决方案通过展示新方法的会议和演示浮出水面。例如,Raf Anzovin 提出的临时索具方法提出了一种不同的方法 - 并且可以提供思考的依据。
拉夫·安佐文。2019. 通过“短暂”绑定实现快速、无插值的角色动画。在 ACM SIGGRAPH 2019 会谈(SIGGRAPH '19)中。计算机协会,纽约,纽约,美国,第 54 条,1-2。DOI:通过“短暂”绑定实现快速、无插值的角色动画 | ACM SIGGRAPH 2019 会谈
虚幻引擎 5.0 中的绑定层次结构

假设

在查看需求/要求之前,让我们通过定义一系列假设来深入了解它:

[*]层次结构可以随时更改。
[*]可以在保持动画的同时切换装备。
要求/动机


[*]在运行时从层次结构中添加/删除元素。
[*]在运行时更改层次结构中元素之间的关系。
[*]可以通过程序创建部分(或整个)层次结构。
[*]层次结构可以用多个 LOD(细节层次变化)来表示。
[*]循环场景是可能的(左手连接到右手,后来右手连接到左手,例如)。
设计

为了回答上述假设和要求,我们在 Control Rig 中设计了动态层次结构,以结合灵活性和性能。动态层次结构对我们之前在顶层的实现很熟悉,使其成为用户的选择加入功能,并且在撰写本文时向后和向前兼容。以前的实现(从 4.26 / 4.27 开始)使用一个简单的平面数据容器,它只关注性能和数据紧凑性,但没有提供所需的灵活性。
基础设施分离

在 5.0 中,我们将层次结构基础设施分为两层:URigHierarchy(数据模型)和 URigHierarchyController(变异层)。层次结构和控制器支持通知方案,以将其连接到 UI 或其他服务以传播更改。简而言之,我们介绍了一种软 MVVM 设计分离。然而,层次结构本身可以在没有控制器的情况下执行与动画相关的任何更改 - 而拓扑更改需要控制器。拓扑更改描述了导致内存布局更改的编辑。
例如当你设置一个元素的变换时,你只需要访问URigHierarchy::SetTransform,但是当给一个元素添加一个父元素时你需要访问URigHierarchyController::AddParent。
表现

我们已经确定存在仅在本地空间中访问层次结构(例如与动画蓝图集成时)以及仅在全局空间中访问层次结构的极端情况。此外,常规情况是访问本地空间中的一些转换以及全局空间中的一些转换。为了支持这一点,我们实现了一个惰性评估方案,其中本地可以从全局计算,反之亦然 - 同时缓存中间结果。为了控制缓存有效性的复杂性,我们还引入了一种缓存有效性检查机制,可以通过 C++ 定义启用该机制。
为了识别拓扑变化,有一个通过可用委托的通知方案以及一个拓扑版本——您可以使用它来识别元素是否已添加/删除,或者关系是否在您上次访问层次结构后发生了变化。
可选的多育儿

层次结构可以存储元素列表,其中每个元素可以与一个或多个附加元素有关系。从 5.0 开始,唯一存在的关系是父子关系。某些元素只能有一个父元素 (FRigSingleParentElement),而其他元素可以有多个 (FRigMultiParentElement)。我们特意选择提供多父元素作为选项 - 这样大多数层次结构都可以从性能稍好一些的单父元素中受益。
空间切换

随着时间的推移,一个元素与更多的父母相关 - 每个关系的权重可以被调制/动画。通过将所有权重从一个父级移动到另一个父级,元素可以切换其空间,因为本地变换现在在另一个父级中表示。将此与惰性求值方案相结合,可以轻松补偿全局变换 - 使元素不会在世界空间中移动或“弹出”。您可以将本地转换标记为脏(要重新计算)并相应地更改父关系。
经典 DCC 和我们的实现之间的一大区别是父关系可以是完全暂时的,这意味着它们可以在一段时间后再次存在并完全消失。这允许在动画创作期间灵活选择空间和关系,而不必担心周期。
在 5.0 中,Sequencer 利用这些功能来提供面向用户的 Space Switching 功能集。




好处


[*]本地/全局转换的快速和惰性评估。
[*]层次结构数据结构中拓扑编辑的灵活性。
[*]大而快速的程序编辑(如反转链、断开链等)。
[*]用于集成任意视图/用户界面的通知方案。
缺点/缺点


[*]与 4.26 / 4.27 中的扁平封装版本相比,动态结构的内存占用更大(~ 1.6 倍)。
[*]代码复杂性和缓存有效性错误的风险。
未来构想


[*]层次结构的灵活拓扑为解决更大的层次结构打开了大门,而不仅仅是每个字符的范围。将多个层次结构合并成一个较大的层次结构可以允许在较小的层次结构之间建立关系。
重要提示:

Unreal虚幻引擎电脑配置的要求是比较高,特别是实时渲染,前期的硬件成本是比较高,这里有一个简单的节省硬件成本的方法,使用赞奇超高清云工作站,即使本地普通的电脑也能运行UE5软件,且普通电脑也能享受行业最高端的CPU和GPU,极大提高制作效率和使用体验,且使用方便快捷,全面支持3D应用软件插件运行,随时调用百余款软件插件,高效作业。
赞奇超高清云工作站可以利用云计算、虚拟化技术,为企业提供的云上虚拟Windows桌面及应用服务,提供VDI的云桌面交付方式,满足不同场景的需求,多终端接入,企业员工可随时随地访问桌面,提高企业办公效率,提升企业信息安全,保护企业数据资产,降低运维、设备成本。

页: [1]
查看完整版本: Unreal 5.0 中 Control Rig 层次结构的更改?