日前,一位荷兰学生Tom Kemna通过Unreal引擎为手指应用了基本的反向运动学,并分享介绍了自己的开发历程。以下是映维网的具体整理:
Tom Kemna实现的效果
1. 背景
简单的背景介绍,如果没有兴趣你可以跳过这一段。我是一名学生,而我们正在用HTC Vive Pro开发一款VR恐怖游戏。我希望获得更多与VR交互相关的经验,因此我争取到了玩家角色实现这一职责。在开发过程中,我看到一个视频关于将反向运动学用于上楼梯时双脚,于是我就问自己:嘿,我是否也能这样做呢?
2. 介绍
首先,如果你不知道什么是反向运动学,我推荐你看这个视频:
简单来说,这是为骨骼网格制作动画的方法。在Unreal引擎中,你可以在动画蓝图中采用名为“Two Boned IK”节点的选项来实现这一点。你提供两个位置:一个“效应器”和一个“关节”,而它们将允许允许你操纵骨骼。
2. 实现
我已经开发了一个简单的系统:当你抓住对象时,系统将允许你用手指包裹它们。有很多方法可以实现反向运动学,下面我将介绍问题是什么,而我又是如何进行解决。然后,我将简要说明为什么会选择这个解决方案。
2.1 问题
对于沉浸感,我们需要双手的操作尽可能逼真。为此,我们需要用手指包裹对象并与之交互,这样我们就不会出现截断或非常静态的双手。
这是一个问题,我们需要为一堆手指检测碰撞,然后它们需要停留在遇到的第一个对象上。
2.2 解决方案
最后,我选择了一个采用常规蓝图逻辑和动画蓝图逻辑组合的系统。
要实现反向运动学,你需要准备一定的工具:1.正确rigged的骨架网格;2.rig的动画蓝图。3.利用骨架网格的蓝图。
首先,我们需要找到手指所在的位置。我决定创建隐藏在游戏中的UE4箭头组件,并根据每个箭头的变换计算线条轨迹。
下面是采用默认Unreal 4手部网格的蓝图视图:
第三则与反向运动学有关。Unreal引擎允许用户设置Two-Boned反向运动学。如果采用动画蓝图,你可以将每个手指设置为通过两个位置将反向运动应用于两个骨骼。
最大的障碍是设置效应器位置和关节目标位置。效应器位置是IK尝试放置骨骼的位置,而关节目标位置则是说明骨骼应如何旋转。关节目标位置实际上是一个误导性的名称,因为它位于你希望骨骼旋转的位置的对面,我花费了一定的时间才弄明白这一点。
我们使用一个关节来旋转骨骼,并通过一个目标来定向骨骼。我们使用常规蓝图中的函数设置值来正确设置所有的值。我在示例项目中创建了三个函数,按以下顺序调用。
SetAllFingerIK:一个调用SetSingleFingerIK()五次的函数(每个手指一次)。这意味着将代码组合成一个大函数。SetSingleFingerIK:每个手指最后都需要调用3个跟踪,所以这是一个line trace 集合。这将计算和设置动画蓝图中的变量。LineTraceAlongArrow:根据箭头的变换返回line trace的击中结果。
下图是食指的效果:
3. 选择这一解决方案的原因
除了单独为所有一切制作动画外,我找不到任何替代方案。当然,单独为所有一切制作动画是一项非常耗时的任务。动态地为手指制作动画是唯一可选的替代性解决方案,而反向运动学可以做到这一点。
这很难做到这一点的原因是,关于这个具体问题的信息很少,这意味着我必须自己解决这个问题。最后,我自己开发了这样一个系统。如果你想在Unreal引擎中看看具体的实现,这里是一个示例项目。
原文链接:https://yivian.com/news/55926.html
来源:映维网