在屏幕边界外绘图是否会影响性能

Oop*_*ser 3 c# performance xna

在我的2D游戏中,我有大地图,我滚动它(就像在帝国时代).

在绘制时,我绘制所有元素(纹理/图像).其中一些在屏幕上,但大多数都没有(因为你看到大约10%的地图).

XNA是否知道不通过检查目标矩形是否会落在屏幕上来绘制它们?

或者我应该手动检查它并避免绘制它们?

pin*_*man 6

使用时有时会忽略CPU性能的概念,SpriteBatch就是如何对精灵进行批处理.并且使用可绘制的游戏组件并不容易有效地批量精灵.

基本上,绘制精灵的GPU并不慢,并且将所有精灵组织成批处理的CPU并不慢.缓慢的部分是当CPU必须与GPU通信时需要绘制的内容(向其发送批处理信息).调用时不会发生 CPU到GPU的通信spriteBatch.Draw().它会在你打电话时发生spriteBatch.End().因此效率低下的结果就是spriteBatch.End()不那么频繁.(当然这意味着Begin()不太经常打电话).另外,使用spriteSortMode.Immediate非常谨慎,因为它会立即导致CPU将每个sprite信息发送到GPU(慢)).

因此,如果你在每个游戏组件类中调用Begin()&End()并且拥有许多组件,那么你不必要花费很多时间,而且你可能会花费更多的时间来制定更好的批处理方案而不是担心屏幕外的精灵.

除此之外:GPU无论如何都会自动忽略其像素着色器中的屏幕外精灵.因此,剔除CPU上的屏幕外精灵将无法节省GPU时间.

参考这里.


Cyr*_*ral 5

您必须手动考虑这一点,并且它将在很大程度上影响游戏的性能,这也称为剔除.剔除不仅仅是因为在屏幕上绘制内容会降低性能,这是因为调用Draw很多额外的时间很慢.还应排除您不需要更新的任何超出视口的内容.您可以在此处详细了解如何执行此操作以及如何SpriteBatch处理此操作.