LibGDX 二维 ||在屏幕外对象上调用 draw() 是低效的还是它们被自动剔除?

LibGDX 2D || Is calling draw() on offscreen Objects inefficient or are they automatically culled?

我正在制作一个简单的 2D 直升机游戏作为学习的一种方式 libgdx。如果我有一个位于屏幕外的对象,在这种情况下有许多摩天大楼,调用 batch.draw() 是否会导致 OpenGL 尝试渲染该对象?如果是这样的话,写一个跳过绘制调用的支票并不难,我只是想知道是否有必要。我使用分析器统计了 calls/draw 次调用,但数字没有增加,所以我猜没问题?

提前致谢!

有一个平衡的行为。它们没有被剔除,所以它们被发送到 GPU,它们的顶点由顶点着色器处理。但是在顶点着色器投射它们并且计算出它们在平截头体之外之后,将不会有进一步的计算(没有片段着色器对所有像素运行)。

所以绘制它们是有成本的,但没有可见的那么高。 CPU 成本相当于可见或不可见的精灵。 GPU 为可见的精灵做了更多的工作,它几乎与精灵将占据的屏幕像素数成线性比例。

当然,剔除它们也会有一些 CPU 成本,因为您会将它们的位置与相机进行比较。如果您检查每个特定的树可能不值得,但是通过一次检查大块可以节省大量费用,就像如果您知道一包树组合在一起,您保留一个包含所有这些树的边界框并检查那而不是每一棵树。

如果您的游戏中的精灵少于两千个,即使在低端 phone,其中的 none 也值得担心。