LibGDX 2D || 在屏幕外对象上调用 draw() 是低效还是自动剔除?

mmu*_*on2 2 java graphics performance libgdx

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

提前致谢!

Ten*_*r04 6

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

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

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

如果您的游戏中的精灵少于几千个,那么即使在低端手机上,这些都不值得担心。