Unity 社区
2
1

更为逼真的机器人模拟:Unity 2021.2 Beta版物理模拟更新

Unity技术博客
阅读 2879
2021年9月6日
Unity 2021.2 beta版提高了物理模拟功能的实用性,功能现在有了更多的用法,并且能让机器人的开发与调试更为轻松高效。
ArticulationBody(关节体)改进
ArticulationBody组件是Unity机器人模拟的核心功能,它可以精确地模拟出运动链,解决机器人手臂、机械手、移动机器人等模拟的关键问题。为了改善组件的性能与实用程度,我们一直在听取用户的反馈意见,并根据反馈进行改进。
ArticulationBody重新排列后的属性列表阅读起来会更加方便,而所有质量参数都被归纳到了一块,其下方则为归纳好的锚点参数,及驱动力参数。这些改动已应用至Unity 2021.1和2020.3。
ArticulationBody编辑器现在使用与普通编辑器一样的可迭代关节,确保其有一致的使用体验。除此之外,新编辑器还支持直观地编辑关节范围及锚点。
而拓展后的关节工具现在支持编辑Prismatic Joint,以及所有ArticulationBody关节类型。想要了解更多详情或向我们反馈,请访问
该论坛主题贴 https://forum.unity.com/threads/articulation-body-visualisation-gizmos.1129364/?_gl=1*1igq4o4*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.155462200.248936851.1630638751-2049639410.1602584092
ArticulationBody新增
collision detection mode https://docs.unity3d.com/2021.2/Documentation/ScriptReference/ArticulationBody-collisionDetectionMode.html?_gl=1*1igq4o4*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.155462200.248936851.1630638751-2049639410.1602584092
(碰撞检测模式)选项,支持所有刚体所用的持续性碰撞检测。更新将同步至2021.1和2020.3以支持某些特殊用例:比如,在训练机器学习模型控制人形角色行走时,便需要在脚部持续地检测碰撞,否则模型将学会利用脚部与地面重叠时产生的反冲力(即引擎为避免两个平面重叠产生冲突而对运动物体施加的反向矢量)来加快自己的移动速度,甚至跳跃到空中飞行。
ArticulationBody.AddForce现在有了更为多样的力,以对标Rigidbody.AddForce,譬如作用力、加速力或脉冲力。如此一来,现有的Rigidbody代码可以更轻松地切换到ArticulationBody代码。
我们还详细说明了组件的边界条件和特殊用法,使得文档内容更加清晰,
ArticulationBody https://docs.unity3d.com/2020.1/Documentation/Manual/class-ArticulationBody.html?_gl=1*1cmttw8*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.176947494.248936851.1630638751-2049639410.1602584092
组件现在有了专门的文档页面。
我们还根据用户的反馈为ArticulationBody组件的所有C#脚本属性加入了测量单位,请在此处查看
mass(质量) https://docs.unity3d.com/2021.2/Documentation/ScriptReference/ArticulationBody-mass.html?_gl=1*1cmttw8*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.176947494.248936851.1630638751-2049639410.1602584092
属性的实例。
编辑器改进
我们将继续提高普通物理模拟管线的易用性,提升其灵活性,以适配更多的用法。我们认为Physics是复杂物理模拟的基石,创作者现在能够使用额外的功能来更好地了解自己的工作领域,让配置出的模拟结果更为准确。
除了以上内容外,Physics Debugger现在能正确地在单独编辑模式(Isolation Mode)和场景编辑模式(Context Mode)中支持预制件,用户可以独立出预制件进行编辑,隐藏无关的场景,做到“各个击破”。
物理模拟图层是碰撞检测系统性能优化的一个重要工具,通常在包含多个图层的大场景中,我们需要先禁用所有碰撞层,然后再启用必要的碰撞层。为此,Physics设置新添了各图层的碰撞检测启用选项。在包含大量图层的大型项目中,我们便能将所有的碰撞精简到一个较小的图层集合来
提高性能 https://api.unity.com/v1/oauth2/authorize?client_id=unity_learn&locale=zh_CN&redirect_uri=https%3A%2F%2Flearn.unity.com%2Fauth%2Fcallback%3Fredirect_to%3D%252Ftutorial%252Fphysics-best-practices%253F_gl%253D1%252A19jfqjg%252A_gcl_aw%252AR0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.%2526_ga%253D2.256427272.248936851.1630638751-2049639410.1602584092&response_type=code&scope=identity+offline&state=7d7ffe2d-b5f3-4fbc-9e92-788cc0145569
Physics Profiler(物理模拟分析器)现在新增了几项指标及图表种类,而文本窗口现在可更为详细地展示当前模拟的数据。新增指标包括调用物理模拟的总次数、连接体的数量以及上一帧的变换次量,
用户现在还可以为项目启用/禁用指标来自定义分析窗口,
并且内存占用量也能作为指标显示。
主线程外的连续物理模拟调用
物理模拟调用的批处理作为一种提高性能的手段(一如Raycasts),可在所有空闲的CPU核心上执行物理模拟,而非只在主线程上执行。
理想情况下,批量调用的结果会输出到一个C# job中来最大化性能,但这里的主要问题在于,碰撞体的碰撞将被返回成Unity组件(
RaycastHit.collider https://docs.unity3d.com/ScriptReference/RaycastHit-collider.html?_gl=1*h6q9y1*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.217785877.248936851.1630638751-2049639410.1602584092
),所有Unity组件必须在主线程上运行,因此在子线程上运行的物理模拟无法自由地处理碰撞。
为了解决该问题,引擎现在会公开
碰撞体的实例ID https://docs.unity3d.com/2021.2/Documentation/ScriptReference/RaycastHit-colliderInstanceID.html?_gl=1*h6q9y1*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.217785877.248936851.1630638751-2049639410.1602584092
,实例ID可以在主线程之外自由使用,让连续性批量调用成为可能。
触面摩擦改进
触面摩擦是Unity默认的摩擦模拟模式,它更强调性能而非模拟精度,但仍可通过大量的运算来生成较为精确的结果。
Physics设置现在新增了一个新的增强版触面摩擦模拟,如果双方的接触面上包含一个以上的摩擦锚点,则其生成的摩擦力可比普通模型准确两倍以上。
在下图实例中,带有不同摩擦力的方块在一个平面上滑动。红色方块表示根据理论预测的最终位置,蓝色方块使用了常规的触面摩擦,它最终达到了预测位置的一半;绿色方块使用了改进后的触面摩擦,其结果更加贴近理论模型。
接触面修改
新的接触面修改API现在已经可用,我们正在
相关论坛贴 https://forum.unity.com/threads/experimental-contacts-modification-api.924809/?_gl=1*f59ffh*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.173092512.248936851.1630638751-2049639410.1602584092
中收集反馈意见。该API允许制定物理引擎对接触点的处理方式,包括修改任意一对接触面的接触点属性、限制解算程序施加的推力、调整目标矢量等等。它还有其它用法,像是在任意碰撞体上打洞、生成粘黏性接触面和各种物理驱动的传送带。在下方例子中,球体无视了与平面的接触(可设置区域性忽视)并穿过了平面,而右侧的方块在两个斜面上弹跳时并不会旋转(因为物体接触后的反应被设为不旋转)。
真实的模拟
所有这些改进都能让Unity中的模拟更为逼真,许多改进都响应了用户们的建议或反馈,我们也邀请在看的你前来
与我们交流 https://forum.unity.com/forums/physics-previews.123/?_gl=1*bzz3yp*_gcl_aw*R0NMLjE2MjkyNjM3NTEuQ2owS0NRand2TzJJQmhDekFSSXNBTHczQVNxc0NkNktLb2cwTXVqNjNCeF9nMFdfbG0wNEFuNFFWbWFfTVZMOFdOcWhxbDFyVjBpTTZ1QWFBdkljRUFMd193Y0I.&_ga=2.72437136.248936851.1630638751-2049639410.1602584092
。若想在Unity中开发机器人,请在
Unity Robotics Hub上了解我们的几个实例与演示 https://github.com/Unity-Technologies/Unity-Robotics-Hub
发布于技术交流
1条评论

AI

全新AI功能上线

1. 基于Unity微调:专为Unity优化,提供精准高效的支持。

2. 深度集成:内置于团结引擎,随时查阅与学习。

3. 多功能支持:全面解决技术问题与学习需求。

AI