【问题标题】:Distributing high resolution rendering on server of many computers在多台计算机的服务器上分发高分辨率渲染
【发布时间】:2022-03-17 00:34:23
【问题描述】:

我有一个显示器网格(12*2=24 显示器)作为一个大显示器(大墙大小的显示器)运行。

我使用 three.js 构建了一个可视化,具有超过 10 000 000 个数据点和 12690 x 3840 分辨率。因此,这种可视化使用了 GPU 的全部功能,并且与可视化的交互变得缓慢。

我想通过一个服务器将渲染分布在 12 台计算机上以获得更好的性能,能够添加更多的数据点并进行流畅的交互。

我该如何实现?

【问题讨论】:

  • 多少个核心?根据数据处理的相互依赖关系,机器可能已经有处理数据处理需求的咕噜声(webWorkers)。用于取决于 GPU 负载的渲染。如果完全渲染像素,工作人员将无济于事。但是,如果 GPU 有空闲时间等待数据,那么工作人员可能会有所帮助。但是有了 JS,你就没有手瞎了,可以平稳地跑,然后随机爬行。您需要从 janky 浏览器应用程序转为原生 (C++) 到流畅且快速的原生应用程序。 BTW 12690 很奇怪,我想你的意思是 12960
  • 我们可以使用工人的 GPU 吗?顺便说一句,是的,它是 12960=1080*12
  • 是的,您可以使用OffscreenCanvas API 在工作人员中访问WebGL。但是,只有一个 GPU 和多个内核,您必须非常小心。跨线程同步 GPU 调用很棘手 一次只有一个工作人员可以访问 GPU,并且由于 JS 阻止等待绘制调用的工作人员将拒绝其他工作人员访问。最好是一个线程来处理 GPU 将非渲染处理加载到线程。

标签: three.js webgl distributed-computing


【解决方案1】:

有一个例子herehere

这个答案:display three.js scene across multiple screens

还有this non-three.js example,但它确实显示了解决方案 和this three.js one that runs across machines

基本上,您设置了一个服务器来在机器之间中继 websocket 消息。这听起来可能很吓人,但使用 node.js 并没有那么多代码(我相信其他语言也有简单的解决方案)。

每台机器都需要知道要显示场景的哪个部分,并且需要具有相同的场景(或机器将显示的场景部分)。机器上的动画应该直接与时钟相关联。作为开始,您可以使用Date.now()。一旦它开始工作,您就可以使用 websockets 来保持机器之间的时钟同步。否则,如果有交互式相机控件或其他设置,只要它们是全局的,您就可以通过 websockets 将它们广播到所有机器。

如果有更多的交互,那么您可以在机器之间传递输入或其他数据,但理想情况下,您需要使其不需要同步,因此模拟是确定性的,因此给定相同的状态(时间 + 设置)每台机器都会产生相同的显示状态。

【讨论】:

  • 可视化已同步。我不想分发可视化,而只是分发渲染。 12690 x 3840 分辨率在一台计算机上运行,​​但我想将渲染分布在其他 GPU 计算机上作为网络的一部分以提高性能。你得到我的关心了吗?
  • 我不明白你在可视化和渲染之间的区别。上面发布的示例,例如水族馆正在绘制 8640x1920。它将在 108000x1920(100 台机器,100 台显示器)上以相同的速度 (60fps) 运行,因为每台机器只渲染 1920x1080
  • 不同之处在于我的情况:我只有一个浏览器在 Windows 机器上运行,分辨率为 12690 x 3840(所有 24 台显示器都运行一个操作系统)。如何使用远程服务器的其他计算机的 GPU 来提高我们的可视化性能?在您提到的示例中,每个显示器都在一台计算机和一个浏览器下运行,这使得 24 个浏览器在 24 个显示器上运行。但是我们只有一个浏览器在 Windows 上运行,分辨率为 12690 x 3840。
  • 我还是不明白你的问题。如果您只关心加快模拟速度,那么您的问题与 24 台显示器完全无关,并且您的多显示器和高分辨率标签与您的问题无关。如果是这样,请删除这些标签以及有关多个监视器的所有内容,因为它们与分配计算无关。
  • 是的,唯一需要考虑的是使用计算机网络加速模拟。高分辨率是我想使用机器网络的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多