为什么在图形引擎中难以有效地计算碰撞?

Mat*_*att 7 3d graphics

从最古老的游戏到非常现代的游戏,看起来你仍然可以通过墙壁看到或者通常可以看到一些相机位置的地面.为什么在图形引擎中难以有效地计算碰撞?是否四舍五入/精度损失导致错误渲染的视图?

Jid*_*ddo 2

这实际上并不是明确意义上的碰撞。在这些情况下,摄像机位置实际上可能并不在墙壁或地面“内部”,但它只是非常接近它。

在计算机 3D 图形中,相机具有近平面远平面的概念。只有位于这两个平面之间的几何体才是可见的,而其余的将被剪裁。如果您距离某物太近并且正确对齐相机,那么几何体的某些部分很可能会距离近平面定义的相机太近,从而导致几何体不会被渲染。

现在,到这个近平面的距离可以由开发者设定,而且可以设定得很短——短到足以确保不会发生这样的情况。然而,用于确定渲染期间哪些对象距离相机最近、从而渲染哪些对象、不渲染哪些对象的深度缓冲区z 缓冲区与近平面距离和远平面距离密切相关。

在图形硬件中,深度缓冲区使用每个像素的固定位数表示,例如 32 位。这 32 位必须足以准确表示近平面和远平面之间的整个跨度。它也不是线性的,但会使用更接近相机的精度。因此,选择非常小的近平面距离将大大降低深度缓冲区的整体精度。当两个物体彼此非常接近时,这可能会导致整个场景中出现烦人的闪烁。

您可以在此处阅读有关此问题的更多信息以及在此处阅读第 12.040 节