我正在尝试将尽可能多的Threejs计算卸载到Web Worker。当只是想让工人创建几何时,它似乎相对可行。但是,我仍然需要创建大量的网格,这意味着主线程上有一个沉重的循环。
是否可以将网格创建卸载到Web工作者并让主线程将其添加到场景中(准备好后)?
这个想法是让工作者根据一些数据创建一个网格数组,然后将它发送到主线程。
非常感谢
答案 0 :(得分:0)
我目前愿意在我的一个项目中解决这个问题。如果您尚未开始使用,我建议您首先查看https://github.com/kripken/webgl-worker。有两个例子(一个简单,一个更复杂)可以帮助开始。
我将在稍后更新此答案,并提供有关如何将wegl-worker与three.js集成的更多详细信息,这可能需要比简单的webgl / worker实现更多的设置。
答案 1 :(得分:0)
不幸的是,THREEJS 3D对象(类)要“繁重”地用于工作程序中(即使我修补了Threejs lib以在工作程序中使用,对象也无法通过“工作程序线程”-“主线程”边界) )。
但是我成功地使用worker异步加载了相当大的对象。 为了方便起见,我使用Catiline.js。
这个想法是使用THREEJS对象的本机格式(和缓冲区几何),然后将其解析为worker内部的js对象。之后,您可以在主线程中使用THREE.ObjectLoader获取真实场景对象。这种方法的好处是将解析(大对象可能要花很长时间)移到背景中并最小化冻结。
我使用6个工作线程,随机选择一个工作线程,将数据url传递给它,并且还可以从XMLHttpRequest缓存中受益
答案 2 :(得分:0)
Threejs对象不能通过postMessage传递。
相反,我们希望通过Web套接字建立回到主页的连接。这应该让我们自由地传递任何需要的东西。
答案 3 :(得分:0)
该线程可能对您有所帮助...最近,我不得不对Three.js进行一些SSR,并且概念相似,希望您使用工作程序中的ObjectLoader解析缓冲区几何。
https://discourse.threejs.org/t/error-with-ssr-three-js-objects/8643