尽管在 WebGL 中进行了优化,但帧率仍然很低
Low framerate despite optimization in WebGL
我正在使用 Three.Js 在 WEBGL 中开发一个项目。
这个项目包括一个静态的房间几何形状和数百个复制的椅子。将所有内容放在一起并使用以下技术优化帧率后:
椅子的实例化 - 每个对象加载一次然后实例化并循环添加到场景中,使用 object.clone().
对象选择光线投射的八叉树优化。
所有静态对象的几何合并。
实例化对象的 LOD 级别。
当所有场景放在一起时,我的表现仍然很糟糕,每秒 15 帧。我正在使用两个定向灯和一个半球灯。
经过一些试验,瓶颈似乎出在几何体本身。
有没有人知道可能是什么问题?对于可接受的帧率,合理的多边形计数是多少?会不会是我使用的几何图形太重了?
有关信息,
我的房间几何结构有:
69996点,
290571个顶点,
82607 个基元
我的椅子几何结构有:
1254分,
4884个顶点,
1232 个基元
我认为问题不仅仅在于几何图形的多边形数量。我以 60 fps 渲染了更多。没有代码,很难说问题出在哪里。我认为您应该首先分析它,看看是否发现任何瓶颈。然后获取 webGL 检查器并获取 GPU 跟踪。跟踪调用 drawXXX 的次数。这比多边形计数更可能成为瓶颈。
最后,有可能三js可用的优化你都做了,还是不够快,那可能是三js的问题。众所周知,Three js 编写时并未将性能作为其主要目标之一。如果是这样,那么不幸的是你有点卡住了。
最后,WacławJasper 似乎是对的,绘制调用过多(每把椅子一个),这是导致 FPS 疯狂下降的瓶颈。
解决方案基于此:https://gamedev.stackexchange.com/questions/81570/merging-geometry-mesh-without-losing-benefits
通过进行几何合并并维护八叉树以进行交集计算,我设法复制了完全相同的系统,同时将绘图调用减少了 90%,这极大地提高了我的 FPS 率。
感谢大家的回答。
我正在使用 Three.Js 在 WEBGL 中开发一个项目。
这个项目包括一个静态的房间几何形状和数百个复制的椅子。将所有内容放在一起并使用以下技术优化帧率后:
椅子的实例化 - 每个对象加载一次然后实例化并循环添加到场景中,使用 object.clone().
对象选择光线投射的八叉树优化。
所有静态对象的几何合并。
实例化对象的 LOD 级别。
当所有场景放在一起时,我的表现仍然很糟糕,每秒 15 帧。我正在使用两个定向灯和一个半球灯。
经过一些试验,瓶颈似乎出在几何体本身。
有没有人知道可能是什么问题?对于可接受的帧率,合理的多边形计数是多少?会不会是我使用的几何图形太重了?
有关信息,
我的房间几何结构有: 69996点, 290571个顶点, 82607 个基元
我的椅子几何结构有: 1254分, 4884个顶点, 1232 个基元
我认为问题不仅仅在于几何图形的多边形数量。我以 60 fps 渲染了更多。没有代码,很难说问题出在哪里。我认为您应该首先分析它,看看是否发现任何瓶颈。然后获取 webGL 检查器并获取 GPU 跟踪。跟踪调用 drawXXX 的次数。这比多边形计数更可能成为瓶颈。
最后,有可能三js可用的优化你都做了,还是不够快,那可能是三js的问题。众所周知,Three js 编写时并未将性能作为其主要目标之一。如果是这样,那么不幸的是你有点卡住了。
最后,WacławJasper 似乎是对的,绘制调用过多(每把椅子一个),这是导致 FPS 疯狂下降的瓶颈。
解决方案基于此:https://gamedev.stackexchange.com/questions/81570/merging-geometry-mesh-without-losing-benefits
通过进行几何合并并维护八叉树以进行交集计算,我设法复制了完全相同的系统,同时将绘图调用减少了 90%,这极大地提高了我的 FPS 率。
感谢大家的回答。