自定义着色器材质需要永久初始化?

时间:2019-01-28 19:23:53

标签: javascript graphics three.js webgl shader

我已经在Three.js中进行了raymarched项目一年多了,并且随着复杂性的增加,初始化时间也增加了。现在,在浏览器中加载项目可能需要40秒钟以上的时间,但是加载后的运行速度为+ 60fps。我已经通过性能测试找到了罪魁祸首,似乎挂在了三库中的InitMaterial函数上。是否有人对导致此挂断的原因有任何想法?我个人认为这可能是由于我们在着色器中使用的制服数量过多,因为其中有很多。

您可以找到code in question here。请注意,globalsinclude.glsl是制服列表所在的位置。

1 个答案:

答案 0 :(得分:0)

这通常是Windows上DirectX的问题。我怀疑如果您在Linux或Mac上尝试使用同一页面,或者在Windows上以--use-angle=gl启动Chrome,则会看到时间的推移。

例如,您可以try this ridiculous shader。在OpenGL上编译大约需要3秒钟,但是在DirectX中,浏览器可能会确定它花费的时间太长并重置GPU进程。

对于这个问题,浏览器无能为力,因为它主要在Microsoft法庭上进行。 Microsoft为本地游戏设计了DirectX。本机游戏可以离线编译着色器。 Web无法做到这一点,因为它们是传递给驱动程序的不透明二进制文件,并且可能充满漏洞。

已经有关于将异步着色器编译功能添加到WebGL的讨论。着色器仍将花费40秒进行编译,只是不会阻塞页面。在这一点上虽然不太可能发生。

我唯一可以建议的就是简化着色器。如果您有循环,则可以将其解开,看看是否有帮助。