2013-08-25 2 views
11

Ich habe vor kurzem begonnen, einige Untersuchungen in ASM und ich habe mit einigen der Demos online gespielt. Ich muss sagen, dass die Unreal-Demo ziemlich beeindruckend war ... Ich habe seit vielen Monaten eine App mit Three entwickelt. Es funktioniert wunderbar auf schnellen Maschinen, aber auf niedrigeren Maschinen neigt es dazu, zu kämpfen. Als ich das unwirkliche Demo auf meinen unteren Maschinen lief, funktionierte das Demo wie ein Traum. Meine Frage ist, welchen Platz ASM mit Drei haben könnte - könnte es den Motor erheblich beschleunigen? Lohnt es sich, eine Lösung zu suchen oder zu entwickeln, die beides nutzt und basierend auf dem Browser zwischen ihnen wechselt? Gab es auch Pläne, dass Drei in Zukunft davon profitieren?Drei und ASMjs

Ich kam aus einem C++ - Hintergrund, und wäre ziemlich interessiert an der Aussicht, etwas zu entwickeln. Gleichzeitig würde es aber bedeuten, die Sprache neu lernen zu müssen, und noch problematischer könnte die große Zeit sein, die es braucht, um sie zu einem brauchbaren Punkt zu machen.

Was sind Ihre Gedanken?

Antwort

14

Das ist meine Meinung:

In erster Linie ist asm.js nicht wirklich gemeint mit der Hand geschrieben werden. Obwohl ich sage, dass es sicherlich möglich ist, es zu schreiben, da es einen Validator hat. Die unwirkliche Demo ist etwas, das in asm.js mit emscripten zusammengestellt wurde. Es muss auch nicht mit anderem Code außerhalb des kompilierten Codes interagieren. Es erzeugt also hochoptimierten Code, weil die unrealistische Demo bereits in C++ hoch optimierten Code ist. Er wird von einem Compiler optimiert und erhält dann einen weiteren Durchlauf von Optimierungen durch asm.js.

Zweitens, asm.js wird eigentlich nur von Firefox unterstützt. Obwohl alle anderen Browser es ausführen können, verursacht es immer noch eine Leistungseinbuße. Diese Strafe ist, wenn Sie asm.js Code vergleichen, der dasselbe wie normaler Javascript-Code tut. Suchen Sie einfach nach jsperf.com für Beispiele.

Okay, Dies sind einige allgemeine Richtlinien zu asm.js. Jetzt reden wir über Three.js.

Erstens, weil THREE.js mit Benutzercode interagieren muss, ist es nicht einfach, eine asm.js-Bibliothek zu schreiben, da es viele Einschränkungen (keine Objekte) gibt.

Zweitens, Three.js wird nicht viel Leistung eine ganze Menge in der Leistung für Berechnungen, wo asm.js ist stark zu gewinnen. Aber wird mehr von zukünftigen Updates von den Browsern gewinnen. (Zum Beispiel, die Erstellung von typeDarrays in Chrom, die jetzt ein Schmerzpunkt in THREE.Js ist, kommt bald. V8 issue)

Drittens, der Code in asm.js muss seinen eigenen Speicher verwalten. Das würde bedeuten, dass THREE.js einen Weg finden muss, große Apps mit begrenztem Speicher arbeiten zu lassen. Oder machen Sie jede Anwendung sehr speicherhungrig. Das Vergleichen der unwirklichen Demo mit three.js ist ein bisschen unfair, da three.js jedem erlaubt, 3D-Apps zu schreiben, während die unreale Engine eine hoch optimierte Engine für 3D-Spiele ist.

Wie Sie bemerkt haben, bin ich meistens gegen asm.js in three.js. Aber es ist zu früh, um zu sagen, was der beste Weg ist zu gehen. Es gibt eine hohe Wahrscheinlichkeit, dass asm.js schließlich einen Platz in three.js bekommt, aber für eine eingeschränkte Verwendung als Renderer-only zum Beispiel. Aber für asm.js gibt es noch zu viele ungelöste Fragen.

Aber wenn Sie asm.js verwenden und C++ verwenden möchten, dann empfehle ich emscripten, die verwendet wurde, um die irreale Demo zu erstellen.

Das ist natürlich meine Meinung.Aber ich denke, dass es etwas darstellt, was @ Mrdoob und @WestLangley im Sinn hatten. Und tut mir leid wegen der langen Post.

+3

Dank Gero3, das ist genau das, was ich gesucht habe. Du hast tatsächlich vieles bestätigt, was ich dachte und erhoffte. Ich war etwas verwirrt wegen Chrom. Als ich in v22 getestet habe, hat das unwirkliche Demo den ganzen Browser kaputt gemacht, aber in Canary hat es funktioniert. Ich googelte, um zu sehen, ob es aufgenommen wurde und hörte eine Erwähnung davon - also nahm ich an, dass es hinzugefügt wurde. Aber wenn ich wieder nachgesehen habe, kann ich sehen, dass es nicht die Unterstützung hat. Ich nehme auch deinen Standpunkt zu Unreal v Three vollkommen zur Kenntnis. Drei ist in der Tat eine großartige Bibliothek und ich wollte nur sehen, was andere Gedanken über ASM und drei mit der Unreal Demo als mein Gesprächsthema waren. Danke nochmal! – Mat

0

Der beste Weg, um herauszufinden, ist eine kleine Demo in C (von Hand) zu schreiben, dann kompilieren zu asm.js und starten Sie es, dann schreiben Sie die gleiche kleine Demo in JS mit Three.js (von Hand) und dann laufen und vergleichen Sie die Unterschiede sowohl in der Entwicklererfahrung als auch in der Leistung.