【发布时间】:2011-04-15 20:24:53
【问题描述】:
我已经使用 OpenGL-ES 1.1 编写了一个应用程序,但我想知道切换到 2.0 是否可以提高速度。有没有人用大多边形数模型做过任何测试?我只想渲染具有不同颜色的三角形,没什么特别的。但是,我想为我的比较测试渲染大约 100 万个三角形。
【问题讨论】:
标签: iphone ios opengl-es opengl-es-2.0
我已经使用 OpenGL-ES 1.1 编写了一个应用程序,但我想知道切换到 2.0 是否可以提高速度。有没有人用大多边形数模型做过任何测试?我只想渲染具有不同颜色的三角形,没什么特别的。但是,我想为我的比较测试渲染大约 100 万个三角形。
【问题讨论】:
标签: iphone ios opengl-es opengl-es-2.0
OpenGL ES 1.1 和 2.0 提供了两种非常不同的 3-D 图形处理方式,所以我不知道直接比较性能是否有意义。如果您创建仅模拟 OpenGL ES 1.1 的固定功能管道的 2.0 着色器,您可能会看到使用两者的相同性能。这得到了Apple's documentation on the PowerVR SGX 的支持,上面写着:
PowerVR SGX 的图形驱动程序还实现了 OpenGL ES 1.1 通过使用着色器有效地实现固定功能管道。
对于渲染基本的纯色三角形,我建议使用 OpenGL ES 1.1,因为您需要编写的代码更少。如果您能够使用 1.1 中的内置功能,则通常更容易定位该版本。您还可以利用不支持 2.0 的硬件针对(现在)少数 iOS 设备所有者,从而拥有稍大的市场。
但是,与 1.1 相比,OpenGL ES 2.0 允许您使用其顶点和片段着色器做更多的事情,因此您可能对大量几何体所做的一些事情可以改为由着色器处理。这可以产生更好看、更快的效果。
例如,我正在使用 2.0 着色器完成对分子渲染器的更新,这将显着提高可视化结构的分辨率。我通过使用自定义着色器来为这些结构中的球体和圆柱体生成光线跟踪冒名顶替者来做到这一点。这些物体在任何放大倍率下看起来都非常圆滑。在 OpenGL ES 1.1 中使用纯几何进行此操作几乎是不可能的,因为所需的三角形数量会很荒谬(另外,广告牌不适用于我的圆柱体,并且这些形状的交集也无法正确处理这种情况)。
一百万个三角形对于这些设备来说可能有点多。在我的基准测试中,旧款 iPhone 3G 每秒大约 500,000 个三角形,第一代 iPad 大约 2,000,000 个。我还没有完全对速度更快的 iPad 2 进行基准测试,但我早期的测试显示它每秒大约 8,000,000 - 10,000,000 个三角形。即使在目前最快的设备上,在最好的设备上,在一百万个三角形的场景中,您也只能获得约 10 FPS。奇怪的是,你不需要那种大小的几何图形,所以我会先尽我所能减少它。
【讨论】:
glOrtho() 这样定义的正常的前向和后向剪裁平面吗?您可以将正交投影矩阵传递到顶点着色器中,并应用它来调整默认值 -1.0 - 1.0 的坐标空间。前向和后向裁剪的工作方式与 1.1 中的一样。可以使用片段着色器中的适当测试和discard; 操作或通过在该片段上输出具有 0.0 alpha 值的颜色来完成自定义剪辑。
ES 2.0 中的性能提升不是来自渲染单个 VBO,而是通过
1) 自定义着色器中的性能调整只执行所需的最低限度而不是更通用的固定功能
2) 渲染大量对象,由于矩阵流水线的精简和矩阵堆栈的移除以及“固定功能”,必须在状态变化时找出新的着色器,并且不需要多通道渲染一些效果。
这允许例如CPU 在单独的线程中执行所有动态矩阵转换,同时忽略静态矩阵并避免 CPU-> GPU 之间不必要的传输。无需在着色器版本中不断重做 2D 和 3D 状态变化之间的相机矩阵。
【讨论】: