我正在为 RTS 游戏开发等距 2D 瓦片引擎。我有两种方法可以绘制地板。一种选择是一张大图像(例如 8000px x 8000px 大约有 10MB),第二种选择是仅在可见区域中逐块绘制图像。
我的问题是什么更好(性能)?
我正在为 RTS 游戏开发等距 2D 瓦片引擎。我有两种方法可以绘制地板。一种选择是一张大图像(例如 8000px x 8000px 大约有 10MB),第二种选择是仅在可见区域中逐块绘制图像。
我的问题是什么更好(性能)?
在性能方面和内存方面,平铺方法更好。
内存方面:如果您可以使用单个spritesheet来保存需要渲染的每个图块的纹理,那么使用的内存量将大大减少 - 与为要多次渲染的图块重新定义纹理相反。此外,在每个纹理上都有一个名为“pitch”的属性。该属性告诉我们正在使用的内存比图像实际需要的内存多。什么?为什么我的程序会这样做?回到过去的美好时光,当 Ben Kenobi 还被称为 Obi Wan Kenobi 时,纹理占据了他们应该做的记忆。但现在,借助硬件加速,GPU 为您的纹理添加了一些填充,使其与可以更快处理的边界对齐。这是您可以使用 spritesheet 减少的内存。
从性能的角度来看:每当您在屏幕上绘制常规精灵时,图形硬件需要三个主要信息:1)您要渲染的纹理。2)你想渲染纹理的哪一部分。3)您要渲染到屏幕上的哪个位置。对要渲染的每个对象重复此操作。使用 spritesheet,它只传递一次数据——性能大幅提升,因为从 CPU 到 GPU 传递数据(反之亦然)真的很慢。
实际上,我不同意这两条评论。当你的程序成熟时,改变这种口径是很困难的。