image - Sprite 的优化(数量 vs 冗余透明度)

标签 image unity3d sprite shader

我应该在大量填充 2d 透明 Sprite 的 2D 游戏中使用什么。

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

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

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

    Required multiple images to finish one image but without transparency
  • 需要多张图片才能完成一张图片,但没有透明度

  • Single image but with a lot or redundant piexels
  • 单个图像但有很多或多余的像素
  • 最佳答案

    四年后,我可以自信地回答我的问题。
    批处理
    使用像素较少的较小图像并多次重复使用总是更好。 Unity 有一个管道,可以将您的图像缓存在 GPU 中,并针对相同的着色器代码多次使用它。所有这一切都需要一个 CPU 到 GPU 的调用。这种效果被称为“ 批处理”。
    绘图调用通常是资源密集型的,图形 API 为每个绘图调用做了大量工作,从而导致 CPU 端的性能开销。这主要是由绘制调用之间完成的状态更改(例如切换到不同的 Material )引起的,这会导致图形驱动程序中的资源密集型验证和转换步骤。
    批处理:在 CPU 上变换网格( Sprite )的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。
    较小的图像确保较少的 GPU 内存用于批处理几乎“免费”的操作。
    Stenciling
    您可以通过创建模板缓冲区来限制和简化模板的共享执行。无需渲染每个像素(即使不透明度为 0),您可以增加模板值以在 0.3 甚至 0.5 处截断 alpha - 通常,您不需要那种柔和的阴影或柔和的边缘,而且速度很快处决时间。
    默认的 Sprite 着色器以非常小的模板值为您完成这项工作,但是您可以找到大量插件或着色器来帮助您解决这个问题,并通过较小的图形权衡来提高游戏速度。

    关于image - Sprite 的优化(数量 vs 冗余透明度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33799514/

    相关文章:

    c# - 如何获得从对象到空间映射的距离

    android - unity OnTriggerEnter 和 OnTriggerExit 延迟或在移动设备上不起作用

    ios - 在 SpriteKit 中检测 Sprite 碰撞而不反弹

    Android在Andengine中为不同类型的实体实现对象池

    html - IMG 下方宽度为 100% 的内容 Div 将无法在 IMG 下方正确显示

    android - 图像太大会导致应用程序返回到以前的 Activity 吗?

    jQuery 网络摄像头插件 - 保存图像

    java - 如何在java中从网络加载图像

    c# - 使用构造的返回类型覆盖通用基类属性

    javascript - 如何使用 javascript 在客户端将 2 个 png 图像合并为 1 个?