Notifications
Article
Unity 2019.3中的物理更新
Updated 21 days ago
2.2 K
4
Unity 2019.3 beta版中包含了不少PhysX系统的更新。这些新更新可在实际应用中让系统更精准、更快速、更耐用。
作者:Anthony Yakovlev,2019年10月22日
原文链接:https://blogs.unity3d.com/2019/10/22/physics-updates-in-unity-2019-3/

我们将PhysX库从PhysX 3.4升级到了PhysX 4.1。若想了解更多,请查看NVIDIA的PhysX 4.1 SDK Guide中的“Migrating from PhysX SDK 3.4 to 4.0”部分。

新解算器类型

我们在2019.3中启用了一种新的解算器类型,叫做Temporal Gauss-Seidel。我们可在Physics大类的Edit > Project Settings下找到它。使用这个新解算器时,各关节对过度伸展及其它小错误将更具抗性。

新broad-phase(粗测阶段)类型

我们还曝光了一个新的broad-phase算法,叫做Automatic Box Pruning(自动盒剪枝)。该算法与此前发布的Multibox Pruning(多盒剪枝)相似,但它还能自动计算世界边界和地层的数量。它可以维持现有网格单元格,使用通常Sweep And Prune()方法来检测可能相互覆盖的碰撞体。该算法旨在帮助构建大场景,防止单用Sweep And Prune算法导致的错误检测。该模式原属于PhysX 4.1粗测阶段的默认模式,但保守考虑,我们默认禁用了它。如果想尝试该算法,可以在Physcs设置的Broadphase Type(粗测阶段类型)下激活它。

新的mid-phase(中期阶段)

Mid-phase包含一整套数据结构和算法。当我们运行一次physics query(物理查询)或一个碰撞体靠近另一块网格表面时,这些算法将在网格上选取一小部分可能相交的三角面。由于一个网格可能有许许多多的三角面,我们并不想精确地逐个检查每一面。该结构中算法将选取一小部分有检测价值的子网格,加速整个过程。
当我们实例化MeshCollider组件时,需要将sharedMesh属性指定到组件上,而在该网格物理烘焙过程中,新的加速结构将被构建。该构建过程将花上不少时间,而我们需要缩短这个时间。在较旧的PhysX版本中,大部分时间都被花在构建R-Tree上。
PhysX 4.1使用了一种不需要R-Tree的算法。此类算法的缺点是算法只能在Windows、Mac和Linux目标平台上运行。在桌面平台上该算法会自动启用,我们可在Cooking Options下拉菜单中为单个MeshCollider设置禁用算法。在不支持的平台上,Mid-phase将自动启用旧版算法。

延迟及多线程网格烘焙

正如上文所说,实例化一个新MeshCollider将花费不少时间。而现在我们可以使用Physics.BakeMesh函数预烘焙在MeshCollider上使用的网格,将需要大量计算的网格烘焙流程藏到加载界面或过场后,如冒险游戏中的对话场景或一段过场动画。
该函数有一个有趣的副作用,我们可以在主线程之外调用它,将烘焙加载分配到所有可用核心上。在本文档中查看其在C# Job System中的应用例子
推文:揭示一个可靠的Physics.BakePhysicsMesh(meshInstanceId, isConvex)函数,它可在任何线程上即时为MeshCollider烘焙数据。C#任务系统中的使用实例(生成N个网格,并在主线程之外烘焙。)

TerrainCollider thickness(厚度)的移除以及Unified Heightmaps(统一高度贴图)设置

在Unity 2018.3中,我们为TerrainCollider换用了一种更耐用的contact generation(接触生成)路径,更改了其算法。在计算接触时,该新算法在计算接触面时不会使用一个单独的路径来处理几何形高度贴图,而是选取高度贴图接触面的一部分作为网格,再利用常规网格接触生成码处理。不过,我们保留了旧版代码,我们仍可在物理设置中的Enable Unified Heightmaps(激活统一高度贴图)选项中启用它。
在PhysX 4.1的更新中,移除了Enable Unified Heightmaps选项。此外,我们还移除了Terrain组件中的thickness(厚度)设置。Terrain thickness本用于解决隧穿效应(tunneling effect),该效应是指快速移动的物体在系统未检测到接触的情况下穿过地形表面。而现在thickness被移除了,我们建议你使用Continuous Collision Detection(连续性碰撞检测)取而代之。

运动学的重新插入

当一个运动学刚体转换为非运动学刚体,物理系统会在粗测阶段重新插入运动学,以检测碰撞。该操作将执行一个额外的OnTriggerEnter事件。
我们近来一直致力于打磨和稳固Unity中的PhysX系统,希望本次更新能为大家带来更多的精准度、更好的稳定性和更高的性能。现在就来下载Unity 2019.3 beta版试用吧!别忘了在论坛上告诉我们你的想法。

开发过程中遇到问题?请在Unity Connect App”群聊“ - “技术交流”中提问
Tags:
Unity China
690
Comments
汪汪
10 days ago
美工,程序员
能不能把isground优化一下?
0
20 days ago
6666
0
弥南哉
21 days ago
中上
可以
0
hua1
Staff
22 days ago
😁😌
优秀
0