2012-12-23 162 views
6

有没有办法让无服务器上的服务器端运行three.js(独立服务器,Amazon AWS或类似服务器)?服务器端回退渲染

当用户的浏览器不支持WebGL时,目前我回退到画布渲染(线框仅出于性能原因)。这对于实时交互来说已经足够了,但是为了让应用更有意义,用户确实需要以某种方式能够看到正确渲染的版本,包括灯光,阴影,后期处理等,即使它有很大的延迟。

所以......有可能创建一个具有功能three.js实例的服务器端服务?客户端仍然会使用tree.js画布线框渲染,但是说了一秒之后,它会通过AJAX从服务器端服务请求完整的渲染,并将其作为图像进行叠加。

目前是否有任何应用程序,库或任何可以允许这样的事情的东西(在无头,最好是linux服务器上的功能性JavaScript + webgl + three.js,以及无GPU的)?

PhantomJS想到,但显然它还不支持WebGL:http://code.google.com/p/phantomjs/issues/detail?id=273

或者任何替代方法的问题?使用GPU和标准Chrome/Firefox实例以编程方式控制完整桌面计算机的过程感觉是可能的,同时也很脆弱,如果有任何纯软件解决方案,我真的不想去那里。

回答

9

在其QA基础设施,谷歌可以利用梅萨运行的Chromium测试(见问题97675,通过开关--use-gl=osmesa)。最新版本的Mesa中的软件光栅化程序非常先进,包括使用LLVM转换着色器并模拟CPU上的执行。你的第一次冒险可能是建造Mesa,建造Chromium,然后尝试将它们绑在一起。作为一个侧面说明,这也是我为PhantomJS本身计划(特别是在不久的将来),特别是因为Qt也朝着这个方向发展,即使用Mesa/LLVMpipe而不是它自己的光栅引擎。 The numbers实际上看起来不错。更好的是,对于离线的非动画单拍捕捉,性能会更令人满意。

+0

这正是我正在寻找的东西(当然,如果没有更多现成的选项)。我没有意识到对Mesa渲染器的Chromium支持。希望我能成功,或者更好,如果你先在PhantomJS中工作:) – yaku

+0

@yaku你能用Mesa渲染器运行Chromium吗? – frank

+0

@frank不,我没有。并不是说它不能完成,只是因为我没有太多经验来构建和调整大量的软件。仍然期待再次尝试,或者PhantomJS或其他现有解决方案支持WebGL。 – yaku

1

在这个线程一些投入:https://github.com/mrdoob/three.js/issues/2182

这尤其demo展示了如何使用生成的NodeJS服务器端的一些图像。

感谢, 尼科

+1

不幸的是,它看起来像它仅仅是CanvasRenderer。我正在寻找完整的WebGLRenderer功能,即使它们未经过加速并以软件呈现(大约1 FPS应足以达到此目的)。不知怎的,使node.js(或phantomjs)与像osmesa或llvmpipe(?)这样的软件OpenGL渲染器一起工作可能是一条路,但那是......我不知道从哪里开始。 – yaku