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