【发布时间】:2014-03-30 17:13:49
【问题描述】:
为什么 LWJGL 会比 OpenGL 甚至 Ogre3D 的 Unity 实现慢得多?我将从我测试过的一些“基准”(如果你甚至称它们为)开始。
硬件:
i5 - 3570k @ 4.3GHZ
GTX 780 @ 1150 MHZ
第一次测试:在屏幕上放置 350,000 个三角形(修改后的斯坦福龙)
结果:
- GTX 780 以 37 FPS 渲染(使用 LWJGL)
- GTX 780 渲染速度约为 300 FPS(使用 UNITY3D)
- GTX 780 以 ~280 FPS 渲染(使用 OGRE3D)
第二次测试:使用纹理渲染 Crytek Sponza(我相信大约 200,000 个顶点?)
结果:
- GTX 780 以 2 FPS 渲染(使用 LWJGL)
- GTX 780 以 ~150 FPS 渲染(使用 UNITY3D)
- GTX 780 以 ~130 FPS 渲染(使用 OGRE3D)
通常我使用 Ogre3D、Unity3D 或 Panda3D 来渲染我的游戏项目,但帧速率的差异是惊人的。我知道 Unity 有像 Occlusion Culling 这样的东西,所以它通常是最快的,但即使在使用 Ogre3D 的类似调用时,我认为期望与 LWJGL 类似的结果...... Ogre3D 和 LWJGL 都只做正面剔除,但 LWJGL 没有与渲染一切相比,没有任何形式的性能提升。最后一件事,LWJGL 倾向于打破 2.5 GB 的 RAM 使用量来渲染 Sponza,但这并不能解释其他结果。
【问题讨论】:
-
LWJGL 是基于 java 的,使用 ByteBuffers 和 JNA 调用,这些本身并不便宜
-
LWJGL 不是 OpenGL 实现。 GPU 驱动程序是 OpenGL 实现。 LWJGL 是一种语言绑定,与使用 OpenGL 并在同一系统上运行的所有其他程序一样,它与相同的 OpenGL 驱动程序(=实现)接口。
标签: performance opengl unity3d lwjgl ogre3d