我正在使用 OpenGL ES 2.0 中的 Android 上的每像素照明绘制 3D 场景。当我只渲染几个小物体时,我得到了 60 FPS,但如果我尝试使用风景来放置物体,帧率会大幅下降,大约为 15 帧。我猜这是因为它必须计算景观中所有像素的光照。有什么办法可以优化这个吗?我不想单独在景观上使用每个顶点照明,因为我想在上面投射阴影。
问问题
510 次
2 回答
1
从上面的评论中,我看到您认为着色器的代码不能比现在快,并且您陷入了 GPU 填充率限制。
在这种情况下,您可以通过明智地剔除对象来提高性能:首先绘制最近的对象,这些对象使用快速简单的着色器并遮挡您的景观对象(它使用复杂的着色器进行逐像素照明)。这样 GPU 将只绘制景观的可见部分,在景观着色器中执行较少的繁重计算。在我的情况下,我能够通过重新排序对象以更有效地相互遮挡来获得额外的 3 fps。
但是,如果性能下降真的那么大,您可以发布着色器的代码,也许也有一些方法可以提高着色器的性能。
于 2012-11-05T12:07:42.063 回答
0
我建议你根据到相机的距离来划分你的风景。对于最近的分区,您可以按像素绘制,还可以添加更多对象和细节。对于远分区使用顶点照明。还对非常远的物体使用冒名顶替者。当你划分你的风景时,你需要在你的模型中考虑到近处风景有多少区域被投射到屏幕空间中,因为如果你靠近地面并且让玩家向下看,你的所有屏幕都需要渲染器像素照明,并且会受到速率下降的影响。
于 2012-12-04T19:16:45.753 回答