【问题标题】:Three and ASMjs三和 ASMjs
【发布时间】:2013-08-27 23:30:39
【问题描述】:

我最近开始对 ASM 进行一些调查,并且玩过一些在线演示。我必须说,虚幻的演示非常令人印象深刻……我已经使用 Three 开发了一个应用程序已有好几个月了。它在快速机器上运行良好,但在低端机器上往往会遇到困难。当我在我的低端机器上运行虚幻演示时,演示就像做梦一样。我的问题是,ASM 与 Three 有什么关系——它能大大加快引擎的速度吗?是否值得研究或开发一种利用两者并基于浏览器在它们之间切换的解决方案?三号将来有没有利用它的计划?

我来自 C++ 背景,并且对开发某些东西的前景非常感兴趣。但与此同时,这意味着必须重新学习该语言,而且更成问题的可能是需要大量时间才能使其达到可用点。

你有什么想法?

【问题讨论】:

    标签: three.js


    【解决方案1】:

    这是我的看法:

    首先,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 issue

    第三,asm.js中的代码需要自己管理内存。这意味着 THREE.js 必须想办法让大型应用程序在有限的内存下工作。或者让每个应用程序都非常消耗内存。

    第四,将 unreal demo 与 three.js 进行比较有点不公平,因为 three.js 试图让每个人都可以编写 3D 应用程序,而 unreal 引擎是针对 3D 游戏的高度优化引擎。

    正如您所注意到的,我主要反对 three.js 中的 asm.js。但这是因为现在说最好的方法是什么还为时过早。 asm.js 很有可能最终会在 three.js 中占有一席之地,但更有限地用作渲染器,例如。但就目前而言,围绕 asm.js 仍有太多未解决的问题。

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

    这当然是我的意见。但我认为它在某种程度上代表了@Mr.doob 和@WestLangley 的想法。很抱歉这篇长文。

    【讨论】:

    • 感谢 Gero3,这正是我想要的。你实际上已经证实了我的很多想法和希望。我对铬有点困惑。当我在 v22 中测试时,虚幻演示破坏了整个浏览器,但在金丝雀中它可以工作。我用谷歌搜索看看是否被包括在内,并听到有人提到它——所以我认为它是被添加的。但是再看一遍我可以看到它没有支持。我也完全同意你关于 Unreal v Three 的观点。 Three 确实是一个很棒的库,我只是想看看其他人对 ASM 的看法,以及三个使用 Unreal 演示作为我的谈话要点。再次感谢!
    【解决方案2】:

    最好的方法是用 C 编写一个小演示(手动)然后编译为 asm.js 并运行它,然后用 Three.js 用 JS 编写相同的小演示(手动)然后运行它,并比较开发人员体验和性能方面的差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多