Unity3d浮点精度限制

时间:2013-06-02 04:02:00

标签: floating-point unity3d

我收到Unity3D Pro的警告,我不太明白。 我在GUI中将我的播放器的Transform.position.x设置为1000000,它给了我这个警告:

  

“由于浮点精度限制,建议将GameObject的世界坐标放在较小的范围内。”

这是否意味着我的单个场景必须小于1000000 * 1000000 * 1000000。这被认为足够大吗?如果我想要一个更大的世界,我将需要多个场景?当一个新场景被加载时,我的玩家的位置会被重置吗?如何管理位置数据,使其不会超出范围?

1 个答案:

答案 0 :(得分:6)

对于数量级为1,000,000的数据,IEEE-754 32位二进制浮点的步长为1/16(。0625)。因此,可代表1,000,000以上的下一个数字是1,000,000.0625。

如果您的视图中看不到.0625的变化,那么这可能没问题。如果你的世界中物体的比例大于.0625比任何物体特征小得多,并且视图永远不会放大到.0625的差异对于人眼来说是显而易见的,那么可能没有问题。 (但是,你可能需要更多的余地。即使那个大小的物体特征不可见,一些数学可能会受到影响,因为任何速度,位置等的计算都不能使用小于.0625的增量。正在对数量为1,000,000的数字进行32位算术。)

将其与原点附近的数字进行比较,比如数量为100.在100处,步长为1/131072(.00000762939453125)。如果你正在绘制利用这种精细分辨率的物体,只要它们靠近原点就会看起来很好。但是,当它们在你的场景中移动到坐标幅度较大的地方时,它们会失去分辨率。

这里的基本问题是场景的大小与场景中细节的大小之间的比率。这是有限的。只要对象特征也很大,您就可以拥有大坐标。但是当坐标很大时,你无法保持精细的物体特征。