三和ASMjs

Mat*_*Mat 11 three.js

我最近开始对ASM进行一些调查,我在网上玩了一些演示.我必须说Unreal演示非常令人印象深刻......我现在已经开发了一个使用Three的应用程序了很多个月.它在快速机器上运行得很漂亮,但在低端机器上,它往往会很挣扎.当我在低端机器上运行虚幻演示时,演示就像一个梦想.我的问题是,ASM与Three有什么关系 - 它可以大大加快发动机的速度吗?在调查或开发利用两者并基于浏览器在它们之间切换的解决方案时是否值得?还有什么计划让Three在将来利用它?

我来自C++背景,并且对开发某些东西的前景非常感兴趣.但与此同时,它意味着必须重新学习语言,甚至更多的问题可能是将它变为可用点所需的大量时间.

你的想法是什么?

Ger*_*ro3 14

这是我的意见:

首先,asm.js并非真正意味着手工编写.尽管如此,我说它有可能写它,因为它有一个验证器.虚幻的演示是用emscripten编译成asm.js的东西.它也不需要与编译后的代码之外的其他代码进行交互.所以它生成高度优化的代码,因为虚幻的演示已经是C++中高度优化的代码,它由编译器优化,然后通过asm.js进行另一次优化运行.

其次,asm.js实际上只有firefox支持.所有其他浏览器都可以执行它,但在大多数情况下它仍然会导致性能下降.如果您比较与普通javascript代码相同的asm.js代码,则会受到此处罚.只需搜索jsperf.com以获取此示例.

好的,这是关于asm.js的一些一般指导方针.现在让我们谈谈Three.js.

首先,因为THREE.js必须与用户代码交互,所以编写asm.js库并不容易,因为它有很多限制(没有对象).

其次,对于asm.js强大的计算,Three.js在性能方面不会获得太多性能.但是从浏览器的未来更新中获得更多.(例如,在chrome中创建typedarrays现在是THREE.js中的一个痛点.很快就会出现.V8 问题)

第三,asm.js中的代码需要管理自己的内存.这意味着THREE.js必须找到一种方法来使大型应用程序在有限的内存中工作.或者让每个应用程序都非常耗费内存.

第四,将虚幻演示与three.js进行比较有点不公平,因为three.js试图允许每个人编写3D应用程序,而虚幻引擎是3D游戏的高度优化引擎.

正如你所注意到的那样,我主要反对在three.js中的asm.js.但是,这就是说现在最好的方法是现在还为时过早.asm.js很可能最终会在three.js中获得一个位置,但更多的是仅限于渲染器 - 例如.但就目前而言,围绕asm.js仍有太多未解决的问题.

但是如果你想使用asm.js并使用C++,那么我推荐用于构建虚幻演示的emscripten.

这当然是我的意见.但我认为这有点代表@ Mr.doob和@WestLangley的想法.对于长篇文章感到抱歉.

  • 谢谢Gero3,这正是我想要的.你已经确认了很多我的想法和希望.我对铬有点困惑.当我在v22中测试时,虚幻的演示打破了整个浏览器,但在金丝雀中它起作用了.我用Google搜索,看看是否已被包含并听到提及它 - 所以我认为它已被添加.但是再看一遍,我发现它没有得到支持.我也完全接受了Unreal v Three的观点.三个确实是一个很棒的图书馆,我只想看看ASM上有什么想法,还有三个使用虚幻演示作为我的谈话要点.再次感谢! (3认同)