Unity3d浮点精度限制

Zen*_* Qu 3 floating-point unity-game-engine

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

"由于浮点精度的限制,建议将GameObject的世界坐标放在一个较小的范围内."

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

Eri*_*hil 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).如果你正在绘制利用这种精细分辨率的物体,只要它们靠近原点就会看起来很好.然而,当它们穿过你的场景到达坐标幅度较大的地方时,它们会失去分辨率.

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