精灵优化(数量与冗余透明度)
Optimization of sprites (quantity vs redundant transparency)
我应该在充满 2d 透明精灵的 2D 游戏中使用什么。
- 以尽可能低的透明度裁剪到最大程度的图像。但是我需要其中的一些来完成一幅图像。
- 一个大精灵,其中透明像素占图像的 50% 以上。
- 或者也许这无关紧要,我应该采取与 Sprite 渲染器不同的方法。
感谢所有建议。示例如下。
我会提到我正在使用 Unity 制作这款游戏,它必须在移动设备上尽可能快。但是答案必须与 Unity 相关。
- 需要多张图片才能完成一张图片,但没有太多透明度
- 单张图像但有很多或多余的像素
四年后我可以有把握地回答我的问题了。
批处理
最好使用像素较少的较小图像,并且 re-use 多次使用。 Unity 有一个管道可以将您的图像缓存在 GPU 中,并多次使用相同的着色器代码。所有这一切只需要一次 CPU 到 GPU 调用。此效果称为“批处理”。
绘图调用通常 resource-intensive,图形 API 为每个绘图调用做大量工作,导致 CPU 方面的性能开销。这主要是由于绘制调用之间的状态更改(例如切换到不同的 Material)引起的,这会导致图形驱动程序中的 resource-intensive 验证和转换步骤。
批处理:在 CPU 上变换网格(精灵)的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。
较小的图像确保较少的 GPU 内存用于批处理几乎“免费”的操作。
您可以通过创建模板缓冲区来限制和简化模板共享执行。无需渲染每个像素(即使不透明度为 0),您可以增加模板值以将 alpha 截止为 0.3 甚至 0.5 - 通常,您不需要那么柔和的阴影或柔和的边缘,并且速度执行时间。
默认的 sprite 着色器使用非常小的模板值为您执行此操作,但您可以找到大量插件或着色器来帮助您实现这一点,并通过较小的图形权衡提高游戏速度。
我应该在充满 2d 透明精灵的 2D 游戏中使用什么。
- 以尽可能低的透明度裁剪到最大程度的图像。但是我需要其中的一些来完成一幅图像。
- 一个大精灵,其中透明像素占图像的 50% 以上。
- 或者也许这无关紧要,我应该采取与 Sprite 渲染器不同的方法。
感谢所有建议。示例如下。
我会提到我正在使用 Unity 制作这款游戏,它必须在移动设备上尽可能快。但是答案必须与 Unity 相关。
- 需要多张图片才能完成一张图片,但没有太多透明度
- 单张图像但有很多或多余的像素
四年后我可以有把握地回答我的问题了。
批处理
最好使用像素较少的较小图像,并且 re-use 多次使用。 Unity 有一个管道可以将您的图像缓存在 GPU 中,并多次使用相同的着色器代码。所有这一切只需要一次 CPU 到 GPU 调用。此效果称为“批处理”。
绘图调用通常 resource-intensive,图形 API 为每个绘图调用做大量工作,导致 CPU 方面的性能开销。这主要是由于绘制调用之间的状态更改(例如切换到不同的 Material)引起的,这会导致图形驱动程序中的 resource-intensive 验证和转换步骤。
批处理:在 CPU 上变换网格(精灵)的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。
较小的图像确保较少的 GPU 内存用于批处理几乎“免费”的操作。
您可以通过创建模板缓冲区来限制和简化模板共享执行。无需渲染每个像素(即使不透明度为 0),您可以增加模板值以将 alpha 截止为 0.3 甚至 0.5 - 通常,您不需要那么柔和的阴影或柔和的边缘,并且速度执行时间。
默认的 sprite 着色器使用非常小的模板值为您执行此操作,但您可以找到大量插件或着色器来帮助您实现这一点,并通过较小的图形权衡提高游戏速度。