Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

Unity 2021.2 beta 版提高了物理模拟功能的实用性,该功能现在可支持更多用法,能让机器人的开发与调试更为轻松高效。

ArticulationBody(关节体)改进

ArticulationBody 组件是 Unity 机器人模拟的核心功能,它可以精确地模拟出运动链,解决机器人手臂、机械手、移动机器人等模拟的关键问题。为了改善组件的性能与实用程度,我们一直在听取用户的反馈意见并改进。

现在,ArticulationBody 重新排列后的属性列表阅读起来会更加方便。所有质量参数都被归纳到了一起,其下方则的归纳好的锚点参数,及驱动力参数。这些改动已应用至 Unity 2021.1 和 2020 LTS。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

ArticulationBody 编辑器现在使用与普通编辑器一样的可迭代关节,确保开发者能获得一致的使用体验。除此之外,新编辑器还支持更直观地编辑关节范围及锚点。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

拓展后的关节工具现在支持编辑 Prismatic Joint,以及所有 ArticulationBody 关节类型。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

ArticulationBody 新增 collision detection mode(碰撞检测模式)选项,支持所有刚体所用的持续性碰撞检测。更新将同步至 2021.1 和 2020 LTS 以支持某些特殊用例:比如,在训练机器学习模型控制人形角色行走时,便需要在脚部持续地检测碰撞,否则模型将学会利用脚部与地面重叠时产生的反冲力(即引擎为避免两个平面重叠产生冲突而对运动物体施加的反向矢量)来加快自己的移动速度,甚至跳跃到空中。

collision detection mode(碰撞检测模式):
https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Articulati...

ArticulationBody.AddForce 现在有了更为多样的力,以对标 Rigidbody.AddForce,譬如作用力、加速力或脉冲力。如此一来,现有的 Rigidbody 代码可以更轻松地切换到 ArticulationBody 代码。

ArticulationBody 组件现在有了专门的文档页面,里面详细说明了组件的边界条件和特殊用法。

ArticulationBody 组件:
https://docs.unity3d.com/2020.1/Documentation/Manual/class-ArticulationB...

我们还根据用户的反馈为 ArticulationBody 组件的所有 C# 脚本属性加入了测量单位,请在此处查看 mass(质量)属性的实例。

mass(质量):
https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Articulati...

编辑器改进

我们将继续提高普通物理模拟管线的易用性,提升其灵活性,以适配更多的用法。我们认为 Physics 是复杂物理模拟的基石,创作者现在能够使用额外的功能来更好地了解自己的工作领域,让模拟结果更为准确。

除了以上内容外,Physics Debugger 现在能正确地在单独编辑模式(Isolation Mode)和场景编辑模式(Context Mode)中支持预制件,用户可以独立制作预制件进行编辑,隐藏无关的场景,做到“各个击破”。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

物理模拟分层是碰撞检测系统性能优化的一个重要工具,通常在包含多个分层的大场景中。我们需要先禁用所有碰撞层,然后再启用必要的碰撞层。为此,Physics 设置新添了各分层的碰撞检测启用选项。在包含大量分层的大型项目中,我们便能将所有的碰撞精简到一个较小的分层集合里,以此来提高性能。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

Physics Profiler(物理模拟分析器)现在新增了几项指标及图表种类,文本窗口也更为详细地展示当前模拟的数据。新增指标包括调用物理模拟的总次数、连接体的数量以及上一帧的变换次量。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

用户现在还可以创建自定义分析窗口,里面仅包含特定项目所需要的指标。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

并且内存占用量也能作为指标显示。

主线程外的连续物理模拟调用

物理模拟调用的批处理作为一种提高性能的手段(如 Raycasts),可在所有空闲的 CPU 核心上执行物理模拟,而非只在主线程上执行。

理想情况下,批量调用的结果会输出到一个 C# job 中来最大化性能,但这里的主要问题在于,碰撞体的碰撞将被返回成 Unity 组件(RaycastHit.collider),所有 Unity 组件必须在主线程上运行,因此在子线程上运行的物理模拟无法自由地处理碰撞。

Unity 组件(RaycastHit.collider):
https://docs.unity3d.com/ScriptReference/RaycastHit-collider.html

为了解决该问题,引擎现在会公开碰撞体的实例 ID,实例 ID 可以在主线程之外自由使用,让连续性批量调用成为可能。

碰撞体的实例 ID:
https://docs.unity3d.com/2021.2/Documentation/ScriptReference/RaycastHit...

触面摩擦改进

触面摩擦是 Unity 默认的摩擦模拟模式,它更强调性能而非模拟精度,以往需要通过大量运算来生成较为精确的结果。

Physics 设置现在新增了增强版触面摩擦模拟,如果双方的接触面上包含一个以上的摩擦锚点,则其生成的摩擦力可比普通模型准确两倍以上。

在下图实例中,带有不同摩擦力的方块在一个平面上滑动。红色方块表示根据理论预测的最终位置,蓝色方块使用了常规的触面摩擦,它最终达到了预测位置的一半;绿色方块使用了改进后的触面摩擦,其结果更加贴近理论模型。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

接触面修改

新的接触面修改 API 现在已经开放使用,该 API 允许制定物理引擎对接触点的处理方式,包括修改任意一对接触面的接触点属性、限制解算程序施加的推力、调整目标矢量等等。它还有其它用法,比如在任意碰撞体上打洞、生成粘黏性接触面和各种物理驱动的传送带。

在下方例子中,球体无视了与平面的接触(可设置区域性忽视)并穿过了平面,而右侧的方块在两个斜面上弹跳时并不会旋转(因为物体接触后的反应被设为不旋转)。

Unity 2021.2 Beta | 物理模拟功能更新,带来更逼真的机器人仿真效果

在 Unity 2021.2 Beta 版中的所有改进都能让 Unity 中的模拟更为逼真,若你想在 Unity 中开发机器人,欢迎在 Unity Robotics Hub 上了解我们的几个实例与演示。
https://github.com/Unity-Technologies/Unity-Robotics-Hub

本文转自:Unity官方平台,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。