使用新的反向动力学力传感器来模拟可感知环境的复杂机器人。完全重做后的Physics Debugger将助你更好地分析力的相互作用。此外,插值、批量查询等功能的性能也得到了改进。
物理调试器(Physics Debugger)是了解物理引擎内部运作的重要工具,也是观察项目内特殊物理行为的主要手段。一个好的调试器在编写逼真、现代、丰富的物理模拟上起着关键作用。基于这点考虑,我们重新设计了调试器的用户界面(UI)并增加了一些有趣的功能。
为了在相同的空间内容纳更多的信息,我们将各个属性分为几组标签,并且还添加了几组新的检测属性。
此前,Rigidbody和ArticulationBody组件在检视器内包含有一个可折叠的“Info”部分,它展开后会显示当前线性矢量等其他信息。但这样导致编辑器的整体性能出现了明显的下降。在以前,比较多个运动物体的参数很复杂,你需要同时打开两个检视器面板。为了解决这些问题,我们把所有的属性都转移到了物理调试器(Physics Debugger)窗口的“Info”选项卡上,这里会显示每个被选中对象的属性,让你可以轻松地进行并列比较。
工具现在支持可视化物体的接触点、接触法线和间距。
类似Physics.Raycast及Physics.CastSphere等Physics查询指令通常会被用于编写自定义的角色或载具控制器等物理行为。这些指令并不能在调试器中出现,调试起来也很棘手。为了应对这个问题,新版本的调试器支持有选择地可视化物理模拟的查询指令。
到目前为止,Unity工具只支持所谓的正向动力学:给定一组物体及其作用力来计算其运动轨迹。这种方法固然非常有用,但我们想进一步扩展机器人工具箱的功能。因此,我们为Unity 2022.1添加了对反向动力学的支持:给定一个物体及其运动轨迹,模拟计算出作用力。
我们将在以后的数个版本持续迭代、完善该功能。在Unity 2022.1中,我们公开了一组函数用于计算当前作用于ArticulationBodies的力的组成,在这些力抵消之后物体才能向着预定的轨迹运动。我们会在后续版本中继续披露更多有趣的概念,比如抵消解算器冲力的关节力。我们欢迎大家亲自尝试一下,并在论坛上留下你的想法。
需要特别指出,新功能可以:
插值与外推法
Rigidbody同时使用插值和外推法进行较低频率的模拟,形成一种平滑运动的表象。引擎内部会在每次更新(update)计算变换(transform)的位置来实现运动。在插值时,物体前两帧的姿势会被用于计算当前帧的姿势。在外推法时,仅上一帧的姿势和矢量会被用于计算。但由于它轻量的特点,我们不会将这些姿势传回物理引擎。它们只会被传给物理引擎以外的系统(比如图形和动画)。正因为如此,一条投射出去的光线并不能检测到插值姿态下的物体。
为了不让物理引擎注意到变换的改变,我们的机制是在写入姿势前调用Physics.SyncTransforms()来调取每次更新,再调用一个内部方法来清除Physics的所有变换更新。这造成了两类问题:
为了解决这些问题,我们特意将插值代码修改成不在每一帧上同步所有变换。这个改动显著提高了性能;新的插值代码比以前运行得更快(与场景复杂度相关)。
对论坛反馈的回应
我们的论坛包含有一个版块专门讨论各种实验性质的物理模拟技术,本次新版本中应用的部分改动就源于这里的讨论:
我们迫切地希望看到大家能用新的反向动力学API和改版后的Physics Debugger创作出的内容!现在就来下载最新的Unity 2022.1版本,并在机器人板块和物理模拟预览板块加入讨论吧。
Is this article helpful for you?
Thank you for your feedback!