我的订单|我的收藏|我的商城|帮助中心|返回首页
搜维尔[SouVR.com]>服务>案例分享 应用研究>案例分享>软件开发

Unity2022.1扩展机器人工具箱优化

文章来源: 作者:frank 发布时间:2022年05月13日 点击数: 字号:

Unity2022.1版本中Unity对其机器人工具箱进行了多项优化并对诸多功能进行了改进以提升性能。这些优化包括:

使用新的逆动力学力传感器工具模拟复杂的环境的机器人感知;

通过完全改进的Physics Debugger探索动力学;

利用插值、批处理查询等方面的性能改进。

下面让我们来依次了解一下此次Unity都优化了一些什么内容。

Physics Debugger优化

Physics Debugger是理解物理引擎内部工作方式以及理解项目中观察到的特定行为的重要工具。一个好的Debugger是创作令人信服的且符合物理学原理项目的关键工具。因此Unity彻底改造了Physics Debugger的用户界面,并添加了一些有趣的新功能。

为了在同一个空间中容纳更多的信息,在新版本中将属性选项添加到选项卡中,并在其中添加了许多新的选项。

以前,在Debugger中刚体和关节体组件都有可展开的“Info”选项卡,用户可以将其展开来查看附加信息,如当前的线速度。然而,展开“Info”部分后,编辑器的整体性能就会显著下降。此外,以前比较不同几何体的参数很复杂,用户需要打开两个检查器面板。为了解决这一问题,Unity将所有属性移到了Physics Debugger窗口的“Info”选项卡中,窗口中显示了每个选定对象的属性,用户现在可以轻松地并排比较它们。

现在,在调试器中可以在法线和分离距离交汇处旁显示接触点。

Physics queries:如Physics.Raycast或Physics.CastSphere通常支持自定义,如自定义角色控制器或车辆控制器。再过去的版本中它们是不可见的,因此调试起来很棘手。为了解决这个问题,Unity2022.1版本提供了Physics queries可视化功能。

逆动力学

到目前为止,Unity拥有的工具只支持正向动力学,即,给定一组物体和施加在物体上的力,以此计算物体的移动轨迹。这一功能非常实用,通过此次扩展机器人工具箱。Unity 2022.1中全新增加了对逆向动力学的支持,即,给定一个物体和轨迹,在模拟时计算导致该该物体沿轨迹移动所受的力。

具体而言,新功能包括:

获得由驱动器施加到物体上的当前力。能明确显示出驱动器为达到目标付出了多大力。该力的大小取决于驱动器的刚度和阻尼,以及当前的增量目标位置和增量目标速度;

获得所需的合力来抵消重力,对抗力和作用在物体上的离心力

获得 joint force需要达到期望值的加速度。

Interpolation与Extrapolation

当以相对较低的频率进行模拟时刚体会用Interpolation与Extrapolation的形式来给人一种平滑运动的印象。这是通过计算每次更新的变换姿态来实现的。在Interpolation的情况下,最后两个模拟姿态会被用于计算该帧新的变换姿态。在Extrapolation的情况下,将会使用最后模拟的姿态和速度。但是,Unity并没有把这些姿态反馈给物理引擎。姿态仅为系统提供图形和动画。因此,Raycast不会检测到Interpolation姿态的物体。

为了避免在转换模式过程中出现物理学问题,整个机制必须完全遵循物理学原理。在内部法则调用后,SyncTransforms会在姿态写入之前调用每个更新权限,以清除所有变换更新。这就导致了两类问题:

如果场景中至少有一个Interpolation物体,所有物理组件的所有变换变化在每次更新时都会与物理引擎同步(即使它们在每次更新时都需要同步一次);

如果对具有带Interpolation的刚体组件的变换进行了更改,则该对象的Interpolation会中断,因为用户进行的变换更改会传播到physics engine,并更改最后一个模拟的姿态(姿态不会单独存储,只是物理引擎当前使用的姿态)。

为了解决这些问题,Unity更新了Interpolation的代码,这样就不需要同步每帧的所有变换。该优化进一步提高了性能;新的Interpolation代码比以前运行更快(取决于场景的复杂性)。

处理论坛上的反馈

论坛致力于讨论physics tech的各种实验预览,在Unity 2022.1版本中将实现的一些优化:

在许多项目中,尤其是大型项目,经常使用许多GameObject layers,因此描述层组合和产生物理接触对的矩阵也会变得相当大。在Unity 2022.1版本中,突出显示了当前选定的行和列,这让使用更加方便。

Joint用于连接两个刚体,并定义它们相对运动的约束。从Unity 2020.2开始,Joint也可以用于将刚体链接到关节体。为了实现这一点,每Joint类都拥有了一个附加属性,这在检查器中能够看到。同时链接到刚体和关节体是不可能的,所以当一个选项已经被设置时,同时显示这两个选项会占用垂直空间。在新版本中将会只显示已设置的属性从而节省空间。

运动学刚体是一种特殊类型的物体,它可以影响其他物体,但不会让其他物体影响自己,除非其被频繁移动。因此,它类似于一个static collider。运动学刚体的典型的用例是角色控制器、物理动画驱动以及对于手腕运动的虚拟现实模拟等。这是通过设置一个运动目标来控制的,物体将在一个模拟帧中达到该运动学目标。这里与static collider的主要区别在于,运动学目标不是通过瞬间瞬移(改变姿态)达到目的,而是通过计算一帧内达到目标所需的线速度和角速度,并在事后将数据传递给求解器。通过这种方式,可以有助于正确地实现约束雅可比矩阵,因此任何附加的jointchain都将正确地做出反应(没有故障)。在Unity2022.1版本中,Unity公开了一个新方法可以实现在一次操作中设置运动学目标的位置和旋转。

Unity 2021.2中引入的Contact modification功能可以在Contact Point details被用于为求解器创建contact constraints之前更改由narrow phase生成的Contact Point details。在Unity 2022.1版本中,开发团队为接触对中的物体速度添加了新的getters。

PhysX版本目前已经更新到了4.1.2,这是迄今为止4.x系列中的最新版本。但这是一个小版本,只能解决关键的错误和崩溃。

当一个动态物体与一个collider重叠时,求解器的目标是找到corrective impulse,在满足所有约束的同时将它们分开。在内部,此impulse是针对一对接触点中的每个接触点单独计算的,但是之前版本的Unity只有一个返回所有点总和的总值。随着新版本的发布,Unity将公开接触点的一个新属性,允许检索每个接触点的impulses的结构。

Physics批处理查询功能,可直接用于支持某些用例,但目前功能不多。此功能还在继续发展,新版本的Physics批处理查询功能支持更多的用例,比如具有更复杂的线程模式的用例,查询的类型也更加多样化。Unity2022.1版本添加了一个新的批处理查询类型(Physics.ClosestPointCommand),并支持在任何物理场景中运行批处理查询。

电话:010-50951355 传真:010-50951352  邮箱:sales@souvr.com ;点击查看区域负责人电话
手机:13811546370 / 13720091697 / 13720096040 / 13811548270 / 13811981522 / 18600440988 /13810279720 /13581546145

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料