尽管在WebGL中进行了优化,但帧速率较低

Low framerate despite optimization in WebGL

本文关键字:优化 帧速率 WebGL      更新时间:2023-09-26

我正在使用Three.Js.在WEBGL中开发一个项目

这个项目包括一个静态的几何房间和数百把复制的椅子。在将整个事情放在一起并使用以下技术优化帧速率后:

  • 椅子的实例化-每个对象都加载一次,然后在一个循环中实例化并添加到场景中,使用object.clone().

  • 对象选择光线投射的八叉树优化。

  • 所有静态对象的几何体合并。

  • 实例化对象的LOD级别。

我仍然有一个糟糕的表现,当所有的场景放在一起时,每秒15帧。我使用两个平行光和一个半球光。

经过一点实验,瓶颈似乎在几何体本身。

有人知道可能是什么问题吗?对于可接受的帧速率,什么是合理的多边形计数?可能是我使用的几何体太重了吗?

供参考,

我的房间几何图形具有:69996分,290571个顶点,82607基元

我的椅子几何图形有:1254点,4884个顶点,1232基元

我不认为问题仅仅在于几何体的多边形数。我以每秒60帧的速度渲染了更多。如果没有代码,很难说问题出在哪里。我认为你应该先对它进行分析,看看是否发现了任何瓶颈。然后获取webGL检查器并获取GPU跟踪。记录drawXXX被调用的次数。这比poly计数更有可能成为瓶颈。

最后,如果你已经完成了Three-js的所有优化,但仍然不够快,那么这可能是一个Three js问题。众所周知,Three-js的编写并没有将性能作为其主要目标之一。如果是这样的话,那么不幸的是你有点被卡住了。

最后,WacławJasper似乎是对的,平局调用过多(每把椅子一个),这就是导致FPS疯狂下降的瓶颈。

解决方案基于此:https://gamedev.stackexchange.com/questions/81570/merging-geometry-mesh-without-losing-benefits

通过进行几何合并,并维护八叉树进行交叉计算,我成功地复制了完全相同的系统,同时将drawcalls减少了90%,这大大提高了我的FPS率。

谢谢你的回答。