【问题标题】:iPhone. Particle system performance苹果手机。粒子系统性能
【发布时间】:2010-03-29 13:38:54
【问题描述】:

我尝试使用 Core Graphics 将雨雪绘制为 粒子系统。 在模拟器中渲染进行得很好,但是当我在真实设备上运行我的应用程序时,渲染速度变慢了。

所以,请告诉我提高 iPhone 上粒子系统绘制性能的方法。

我应该为此使用 OpenGL 还是 CoreAnimation?

【问题讨论】:

  • 我认为您需要确定哪里出现减速。如果是在绘制代码中,那么切换技术可能会得到加速。您可以在不交换 API 的情况下改进您的算法。加载 Shark 和 Instruments,找出您的时间都花在了哪里。

标签: iphone opengl-es core-animation particles


【解决方案1】:

OpenGL 将是渲染的最低级别,因此应该提供最佳性能(如果操作正确)。如果没有太多粒子,CoreAnimation 将足够接近(确切的数字取决于其他因素,但最多 50 个应该是可以的)。 当您说您目前正在使用 CoreGraphics 时,您的意思是您正在根据计时器重绘吗?如果是这样,那么 CoreAnimation 肯定会帮助您 - 只要您可以将每个粒子分离到一个视图中。您仍然可以使用 CoreGraphics 来渲染单个粒子。

您是否使用物理引擎来计算位置?

【讨论】:

  • > 当你说你现在正在使用 CoreGraphics 时,你的意思是你正在根据计时器重绘吗?是的。我用定时器。 > 您是否使用物理引擎来计算位置?一点点。我使用几个公式进行轨迹计算。
  • 最大粒子数将在 100 到 200 之间(可能是 300)
  • 好的 - 每个粒子的一个视图可能不会缩放到那个级​​别 - 但您可能仍然可以将附近的粒子分组到较少数量的视图中。除此之外,我认为 OpenGL ES 将是必要的——但如果你以前没有做过,请准备好一点学习曲线。
  • 谢谢!您如何看待第三个库(例如 Cocos2D)?看看是不是好主意?
  • 我自己没用过,但是看到别人用过Cocos2D,看起来还不错。除非您投资编写自己的高质量物理引擎,否则我会使用 Cocos2D 或类似的引擎。
【解决方案2】:

如果你只是用 Core Graphics 绘制一个视图,然后每帧重新绘制它以反映粒子的运动,你会看到糟糕的性能(更多信息,请参阅this answer)。您将需要转到 OpenGL ES 或 Core Animation 以获得粒子系统动画。

我的建议是查看CAReplicatorLayer,这是在 iPhone OS 3.0 和 Snow Leopard 中添加的新核心动画层类型。我已经看到了一些令人印象深刻的粒子系统,它们仅使用这一层类型创建,而无需使用太多代码。请参阅 ReplicatorDemo 示例应用程序(适用于 Mac,但核心概念相同),或 Joe Ricioppo 的 "To 1e100f And Beyond with CAReplicatorLayer" 文章。

【讨论】:

    【解决方案3】:

    很难在没有关于您的实施的信息的情况下提供建议。根据我的经验,iPhone 的主要瓶颈之一是内存分配。因此,如果您为每个生成的粒子分配新对象,那将是您可能要修复的第一件事。 (分配对象池并重用它们。)

    【讨论】:

    • 我在所有对象的生命周期结束后重用它们。
    • 如果您确定绘图代码是性能问题的根源,那么切换到 OpenGL 是有意义的,正如 Phil 指出的那样。我只是想指出,在不重写整个绘图逻辑的情况下,可能还有优化空间。使用 OpenGL 高效渲染粒子系统并非易事……
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多