unity3D 是否在任何时候优化浮点数
本文关键字:优化 浮点数 任何时候 是否 unity3D | 更新日期: 2023-09-27 18:13:22
我想知道是否有人知道 Unity 是否在引擎盖下使用浮点数进行任何优化。
因为它们的mathf
函数本质上包装了 C# math
函数,大概是因为它使用了浮点数而不是小数,这本身就是一种优化,但它们仍然是可用于存储值然后除以 10 倍的因子的ulong
资源的两倍。
在进行每帧处理数百到数千个浮点数的物理计算时,似乎我们想要我们能得到的所有选择。
理想情况下,我被告知我想使用指针,我将提供指向指针的链接,但我并不相信在不安全的运行中运行。
http://answers.unity3d.com/questions/804103/how-to-enable-unsafe-and-use-pointers.html
(8 位(、短(16 位(、Int (32 位(、长(64 位(和十进制(128 位(是准确的,而浮点(32 位(和双精度(64 位(则不准确。浮点的优点是它们的范围很高,但代价是精度。
您可以获得接近零的高精度,而在较高的数字下获得更少的精度。我使用 Unity 为我自己的项目进行的测试表明,在某些情况下,我已经无法在 16 000 米之后将东西定位在我的 1 米网格内,它会跳过 1 米。
大多数显卡及其 API 使用 32 位浮点数据类型。这是内存(以及一些,但不多的处理能力(和精度之间的权衡。因此,Unity 也使用 float 是有道理的。尽管一些商务卡已经开始支持 16 位和 64 位浮点数。
Unity 不会对浮点数本身进行优化,在大多数情况下,它会以原始状态将其移交给 GPU。这是最优化的方法。
选择将 Math包装在 Mathf 中可能是为了避免混淆(即方法签名(,并允许它们正确扩展 Math 类。
一个更大的缺点的例子:我的游戏有一个近乎无限的世界,因此必须有一个"Futurama Engine"。它会不时地将玩家调整为 0,0,0 并相应地调整世界,以防止任何物体在浮动中处于过高/过低的位置。">发动机根本不会移动船。飞船停留在原地,发动机围绕它移动宇宙。如果 Unity 和显卡使用十进制,则不需要这样做。
注意:
浮点数为 32 位,双精度为 64 位,小数为 128 位。所以 ulong 的大小是浮点数的两倍,大小是双倍,小数点大小的一半。
-Scott Chamberlain