精灵优化(数量与冗余透明度)

Tom*_*zak 5 shader image sprite unity-game-engine

在充满 2D 透明精灵的 2D 游戏中我应该使用什么。

  • 以尽可能低的透明度裁剪到最大的图像。但我需要其中一些来完成一张图像。
  • 一个大精灵,其中透明像素占图像的 50% 以上。
  • 或者也许这并不重要,我应该采取与 Sprite 渲染器不同的方法。

所有建议表示赞赏。下面的例子。

我要提到的是,我正在使用 Unity 来制作这款游戏​​,并且它必须在移动设备上尽可能快地运行。但答案不必与 Unity 相关。

需要多张图像才能完成一张图像,但没有透明度

  • 需要多张图像才能完成一张图像,但没有太多透明度

单个图像但具有大量或冗余的像素

  • 单个图像但具有大量或冗余的像素

Tom*_*zak 4

四年后我可以自信地回答我的问题。

配料

最好使用像素较少的较小图像,并多次重复使用。Unity 有一个管道,可以将图像缓存在 GPU 中,并针对相同的着色器代码多次使用它。所有这一切都通过一次 CPU 到 GPU 调用实现。这种效果称为“批处理”。

绘制调用通常是资源密集型的,图形 API 为每个绘制调用执行大量工作,从而导致 CPU 端的性能开销。这主要是由绘制调用之间进行的状态更改(例如切换到不同的材质)引起的,这会导致图形驱动程序中的资源密集型验证和转换步骤。

批处理:在 CPU 上变换网格(精灵)的顶点,将许多相似的顶点分组在一起,然后一次性绘制它们。

较小的图像可确保更少的 GPU 内存用于批处理几乎“免费”的操作。

模板印刷

您可以通过创建模板缓冲区来限制和简化模板共享执行。您可以增加模板值,将 alpha 截止值设置为 0.3 甚至 0.5,而不是渲染每个像素(即使不透明度为 0) - 通常,您不需要那么柔和的阴影或柔和的边缘,这样可以加快速度执行死刑的时间。

默认的精灵着色器可以使用非常小的模板值来完成此操作,但是您可以找到大量插件或着色器来帮助您实现这一点,并通过小的图形权衡来提高游戏速度。