Unity可确定性定点数(软浮点)物理引擎

发布时间 2023-07-30 14:40:33作者: JeasonBoy

Unity自带的物理引擎,都是用的硬件浮点,硬件浮点有个特点,就是不同CPU,实现的标准可能不一样,导致会有误差。

也就是说,Unity自带的物理引擎,在不同平台上,模拟的效果可能会不一样。而且就算是同一机器,也可能因为浮点造成的误差,导致每次模拟的结果都不一样。

解决方法就是用软件浮点(定点数)来代替硬件浮点,不同平台,浮点的实现都是统一的方式,而且每次计算结果都是唯一,不存在误差,确定就是定点数性能要比浮点数差。

 

物理引擎:

  • Box2D:Unity自带的2D物理引擎,不确定性
  • Physx:Unity自带的3D物理引擎,不确定性
  • Bullet:Unity商店有人移植了一款支持U3D的版本,可能支持确定性模拟?还没测试:Bullet Physics For Unity | 物理 | Unity Asset Store
  • Havok:Havok为Unity的DOTS做的新物理系统,可能支持确定性模拟?
  • Unity Physics:Unity专为DOTS做的新物理系统,仅可在ECS模式用,在同一机器上是确定性的,但是在不同机器上还是不确定性,不过有人修改了一版,将浮点换成软浮点,实现跨平台确定性,论坛:Reddit - 深入了解任何内容  Github:Kimbatt/soft-float-starter-pack: Software implementation of floating point numbers and operations (github.com)
  • BEPUphysicsint v1:定点数C#物理引擎,目前用的人最多,但是好多年没更新了。最新的v2版据说因为用了.NET CLR导致跟Mono和IL2CPP的Unity兼容性不好。缺点是纯C#,没U3D组件支持