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

时间:2015-11-19 09:13:07

标签: image unity3d sprite shader

我应该在2D游戏中使用什么,其中包含2d透明精灵。

  • 以尽可能低的透明度裁剪到最大的图像。但我需要其中一些来完成一个图像。
  • 一个大的精灵,其中透明的piexls超过图像的50%。
  • 或者可能这没关系,我应该采取不同的方法然后Sprite Renderers。

所有的吸烟都很受欢迎。以下示例。

我会提到我使用Unity来制作这款游戏​​,它必须在移动设备上尽可能快。但是,anwser doenst必须与Unity有关。

Required multiple images to finish one image but without transparency

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

Single image but with a lot or redundant piexels

  • 单张图片,但有很多或多余的piexels

1 个答案:

答案 0 :(得分:1)

四年后,我可以毫无疑问地回答我的问题。

批处理

始终最好使用像素较少的较小图像,然后重复使用多次。 Unity有一个管道,可将您的图像缓存在GPU中,并多次用于同一着色器代码。只需一个CPU即可调用GPU。这种效果称为“ 批处理”。

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

批处理:在CPU上变换网格(子图形)的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。

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

Stenciling

您可以通过创建模板缓冲区来限制和简化通过模板共享的执行。无需渲染每个像素(即使不透明度为0),也可以增加模板值以将Alpha值截断为0.3甚至0.5-通常,您不需要那种阴影或边缘柔和的速度延长执行时间。

默认的精灵着色器以非常小的模板值为您完成此操作,但是您可以找到许多插件或着色器来帮助您完成此任务,并通过较小的图形权衡来提高游戏速度。