动画节点编辑器界面介绍
阅读
2023-08-26更新
最新编辑:TrimesS_
阅读:
更新日期:2023-08-26
最新编辑:TrimesS_
介绍&前言
AnimGraph 是一个数据驱动系统,用于动态合成关键帧和程序骨骼动画,并控制组合之间的切换时间。它由两个主要部分组成:一个是编辑器,用于创建定义动画行为的基于节点的Graph;另一个是Runtime,用于在游戏过程中根据来自AI、导航、环境和其他游戏系统的输入评估Graph。
AnimGraph 的核心是一棵连接节点的树。每次游戏Update时,都会对图形进行评估,以计算该帧中角色的姿势。在图形更新过程中,每个节点都会从其子节点获取动画姿势,对其执行混合或 IK 等操作,并将生成的姿势传递给其父节点。传递给树根节点(最终姿势节点)的姿势就是角色在渲染时使用的姿势。开发人员可以通过组合不同类型的节点来定义游戏角色的动画性能,这些节点将执行不同的混合操作,或根据游戏的当前状态决定使用哪个子节点的动画。
在更新 Source 2 项目以使用 AnimGraph 时,需要牢记的最大区别是游戏代码不再直接告诉动画系统播放哪个序列。取而代之的是,游戏代码向图形提供命令和游戏环境的上下文,由图形中的逻辑来决定播放哪些动画以及如何播放。这样,游戏代码就可以专注于更高层次的游戏玩法,而无需对动画进行微观管理,动画师也可以在不懂 C++ 的情况下创造和迭代更好的角色表演。
AnimGraph 编辑器
您可以在编辑器中创建Runtime使用的Graph,在受控环境中对其进行测试,并调试发现的任何错误。
主面板
这是编辑器的主要区域。它显示当前查看项目的详细编辑器。双击右上角带有指示器的节点,即可打开其特定的编辑器。
默认情况下,它显示图形顶层的所有节点和连接,但对于状态机和运动匹配等更复杂的节点,它也会重复使用,以显示特定编辑器的可视化效果。
预览窗口
在预览模式下,预览窗口会实时显示应用于一个或多个模型的图形所创建的动画。
控制按键:
- 鼠标左键:使用活动工具(在预览模式下)
- 鼠标左键 + alt:围绕场景中心旋转
- 鼠标右键:转动摄像头。在第一人称模式下,按住并使用 WSAD 键使摄像机旋转
- 鼠标右键 + alt:缩放
- 鼠标中键:平移
- 鼠标滚轮:缩放
主输入
此面板显示并允许用户控制所有 AnimGraph 的通用值。其中包括外观方向和当前斜率等。
驱动器
允许您添加、编辑和删除驱动器。
驱动器负责接收游戏或用户关于角色移动方式的输入,并将其转换为Graph可用于驱动动画选择的格式。例如,人工智能角色可以使用 "路径 "驱动器,它将从导航系统中获取一条路径,并确保角色沿着这条路径移动;或者使用 "玩家控制 "驱动器,它将使用前进、后退、向左和向右等方向性输入。不会移动的角色则不需要驱动器。
驱动器会更新两次: 在节点更新之前,以便处理来自游戏的任何输入,并将其提供给节点 节点更新完成后,以便对节点更新时计算出的根运动进行必要的修正
参数
允许您添加、编辑和删除 AnimGraph 参数。
参数允许其他游戏系统向Graph发送信息,以便Graph决定播放哪些动画以及如何播放。Graph可以拥有任意数量的参数,这些参数是游戏提供给Graph的值,以便Graph决定播放哪些动画。与 "主输入"面板中的字段不同,参数是Graph的特定参数。这些参数包括是否下蹲、角色当前的健康状况或角色持有的武器等。
参数是类型化的,类型决定了参数的使用方式:
- Bool 参数可以是1或0。适用于可切换的状态
- 枚举(Enum)参数可以是多个用户定义的值之一,每个值都可以有一个与之相关的名称。例如,武器枚举的值可以是刀、手枪、步枪或霰弹枪。虽然枚举参数与 Int 参数类似,但它们只能有有限的值,而且这些值的名称在整个编辑器中都会使用,这使得它们不容易出错,而不必总是记住例如值 2 表示步枪。
- Int 参数可以是任何整数
- Float 参数可以是任何小数(浮点数)
- Vector 参数由 3 个浮点数组成
标签
允许添加、编辑和删除 AnimTags。
AnimTags 是由 AnimGraph 发送给游戏中其他系统的信号,当特定事件发生时,这些系统就会知道。它们可以放置在Graph中的项目上,然后由项目负责发送给任何监听器,并包含事件的相关信息。
AnimTags 是对之前动画系统中 AnimEvents 的改进,也是通知游戏代码发生特定事件的首选方法。虽然 AnimGraph 仍然支持 AnimEvents 以保证兼容性,但标签具有以下几个优点:
标签可以有持续时间。监听器将以 "开始/结束 "对的形式接收标签通知,或者以 "已触发 "的形式接收标签通知,这意味着标签没有持续时间。使用 animevents 可以在动画上创建开始/结束对,但如果动画在到达结束事件之前被中断,那么游戏代码就会永远卡在等待状态。已开始的标签即使被中断,也能保证发送结束通知。标签也会自动合并,因此如果一个动画在结束时有一个标签,而另一个动画在开始时有相同的标签,那么游戏代码只会看到一对开始/结束对,而不是两对。 标签也可以放在动画以外的项目上,例如状态机节点中的状态。 标签是类型化的。AnimEvents 只用一个 ID 来区分自己,因此游戏代码必须监听所有的动画事件,即使它只对某个动画事件感兴趣。有了 AnimTags,游戏代码就可以只注册监听它感兴趣的标签类型。例如,声音系统可以注册只接收图形中的音频标签。 标签可以有任意的有效载荷。因此音频标签可以包含声音文件,而布料标签可以包含布料解算器的设置。AnimEvents 只接受一个字符串作为有效载荷,虽然该字符串可以是多个设置的 KV3 描述,但字符串仍需解析为代码可以使用的结构体 标签是数据驱动的。每个图形都可以定义自己的标签集,而无需修改代码。在代码中定义的静态列表中,所有动画事件都必须有一个唯一的条目。随着多年来新事件的不断产生,这个列表已经变得非常大,而且可能是某个项目独有的事件仍然会出现在所有其他项目的构建中,从而导致未公布项目的泄露。
播放控制器
控制 AnimGraph 在预览模式下的播放。
按此按钮进入预览模式,并在编辑器中运行当前Graph。你还可以从该面板加载 AnimGraph 重放记录。
控制台
在进入预览模式时,显示有关图形潜在问题的任何错误或警告。
属性面板
此面板将显示当前选定项目的属性。其中包括基本属性列表,也可能包括一些更详细的信息,如迷你编辑器或 3D 预览等子面板。
搜索栏
AnimGraph 可能会变得很大,这时就很难找到你要找的节点。单击搜索框或按下 Ctrl+f 可搜索图形中的节点名称、节点类型或属性。您还可以搜索标签或参数,搜索结果将显示使用这些标签或参数的所有位置。
译者:TrimesS
原页面:点击跳转
使用辅助(机器翻译):DeepL