我是在OpenGL ES 2.0中使用Android上的每个像素照明在3D中绘制场景。当我只渲染几个小物体时,我会得到60 fps,但是如果我尝试使用景观将对象放在上面,则帧速率将大量下降到约15帧。我想这是因为它必须计算出景观中所有这些像素的照明。有什么方法可以优化?我不想仅在景观上使用每个顶点照明,因为我想在上面投射阴影。
从上面的注释中我看到,您认为着色器的代码不能比它更快,并且您被卡住了GPU填充率限制。
在这种情况下,您可以通过明智的对象剔除来提高性能:首先绘制使用快速和简单的着色器的最近对象,并阻止您的景观对象(使用复杂的着色器来进行每个像素照明)。这样,GPU将仅绘制景观的可见部分,在景观着色器中进行较少的计算。就我而言,我能够通过重新排序对象更有效地遮挡额外的3 fps。
但是,如果性能下降确实如此之大,您可以邮寄着着色器的代码,也许有一些方法可以提高着色器的性能。
我建议您根据相机的距离对景观进行分区。对于最近的分区,您可以绘制每个像素,还可以添加更多对象和细节。对于远处的分区,请使用顶点照明。还将冒名顶替者用于真正远的对象。当您对景观进行划分时,您需要进入模型,将近景观的数量投射到屏幕空间中,因为如果您在地面附近并让玩家看见,所有的屏幕都需要在像素照明并将因速率下降。