这是我的第一个问题,因此我希望它符合指导原则。还请原谅我的英语不好。
我目前正在开发基于three.js的WebGL应用程序,该应用程序显示了数千个多维数据集以及这些多维数据集之间的线。我遇到几个性能问题,因此我决定将所有多维数据集合并为一个几何。这虽然有所帮助,但实际上由于数千行(全部都有自己的几何图形(基于Three.js的NURBSCurve示例)和着色器材质(着色器从行的开始到末尾混合两种颜色)而降低了性能并控制不透明度)。我的最大数据包括9000多个行和5000多个多维数据集。如果没有这些行,则FPS速率介于45-50(DirectX)或20 FPS(OpenGL)之间,但随着这些行,性能会下降到5 FPS。拥有Intel HD Graphics(第5代)图形卡,因此最大FPS似乎限制为60 FPS,但是就我而言,这已经足够了。正如我之前所说,这些线是NURBS曲线,范围从短曲线到长而复杂的曲线。另一个要求(这让我有些头痛;-))是每行的宽度不同,因此我实际上必须使用OpenGL,这在我的情况下比较慢,还会引起其他一些问题。
无论如何,我已经尝试了几种方法,但是没有一种方法能够真正帮助我解决问题。
1)为每条线创建管道并合并几何。->这将场景的创建速度从1秒减慢到了几分钟。此外,FPS率无法提高。实际上,由于此方法产生的顶点和面的数量很大,因此这是可以预期的。
2)减少曲线点。->从200点降低到50点,这有助于稍微提高FPS。降低到25分并没有带来更多改善。我当时在想写一种减少不需要的点的方法(例如在直线曲线中,用2点代替50点就足够了),但是我不知道如何实现这一点,因此我首先考虑了其他方法。也许我会回到这一点。
3)使用BufferGeometry。->似乎BufferGeometry无法与着色器材质一起使用。至少在我的情况下,我没有使它起作用,所以我的尝试都没有显示任何东西。顺便说一下,我使用THREE.BufferGeometryUtils从我的NURBS曲线创建了缓冲区几何。我试图将THREE.VertexColors设置为几何中函数的函数和colorsNeedUpdate的参数,但仍然没有显示。实际上,我还尝试了使用遏制几何图形进行缓冲几何处理,但性能并未得到任何改善。
4)使用样条曲线代替NURBS曲线。->曲线的路径不像我希望的那样,并且没有任何改善。
5)使用THREE.LinePieces将行合并为一行。->好吧,尽管我不得不将顶点数量加倍,但这实际上起了很大的作用。在DirectX的情况下,性能从5 FPS提高到25 FPS(OpenGL仍为4 FPS),但是这种解决方案不适用于我的情况。原因是行的宽度不能不同,在DirectX始终限制为1的情况下。我想知道其他人如何解决线宽限制问题,发现有些人通过Geometry Shader创建了较粗的线。所以我的新希望是这款几何着色器。但是后来我发现WebGL不支持几何着色器。
到目前为止,对于我的方法的长期解释很抱歉。在尝试了所有这些之后,我无法提出任何新想法。现在,我想从专家那里了解是否应该忍受FPS下降,还是还有其他方法可以尝试?
我想到了按宽度捆绑线,然后使用合并这些捆绑的想法THREE.LinePieces
。在最佳情况下,我可以将大约860行减少到仅2行。当然,此解决方案的有效性取决于数据。此外,我仍然存在DirectX比OpenGL快得多的问题(例如50 FPS而不是8 FPS),但是我需要后者才能支持更粗的线。因此,如果有人为支持DirectX的问题提出解决方案,我将不胜感激:-)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句