2013-08-25 10 views
11

Recentemente ho iniziato a fare alcune ricerche su ASM e ho giocato con alcune delle demo online. Devo dire che la demo di Unreal è stata davvero impressionante ... Ho sviluppato un'app che utilizza Three per un gran numero di mesi. Funziona magnificamente su macchine veloci, ma su quelle di fascia bassa tende a lottare. Quando ho eseguito la demo irreale sulle mie macchine di fascia bassa, la demo ha funzionato come un sogno. La mia domanda è: quale posto potrebbe avere ASM con Tre - potrebbe velocizzare enormemente il motore? Vale la pena indagare o sviluppare una soluzione che utilizza entrambi e passa da uno all'altro in base al browser? Inoltre, ci sarebbero piani per tre per trarne vantaggio in futuro?Three and ASMjs

Provengo da uno sfondo C++, e sarei abbastanza interessato alla prospettiva di sviluppare qualcosa. Ma allo stesso tempo significherebbe dover ri-imparare la lingua e ancor più problematica potrebbe essere la grande quantità di tempo che impiegherebbe per arrivare a un punto utilizzabile.

Quali sono i tuoi pensieri?

risposta

14

Questo è il mio parere:

In primo luogo, asm.js non è veramente destinata a essere scritto a mano. Anche se dico che è certamente possibile scriverlo perché ha un validatore. La demo irreale è qualcosa che è stato compilato in asm.js con emscripten. Inoltre non ha bisogno di interagire con altri codici al di fuori del codice che viene compilato. Quindi genera codice altamente ottimizzato a causa del fatto che la demo irreale è già un codice altamente ottimizzato in C++, viene ottimizzata da un compilatore e quindi ottiene un'altra serie di ottimizzazioni attraverso asm.js.

In secondo luogo, asm.js è attualmente supportato solo da firefox. Anche se tutti gli altri browser possono eseguirlo, ma nella maggior parte dei casi incorre in una penalizzazione delle prestazioni. Questa penalità è se si confronta il codice asm.js che fa lo stesso del normale codice javascript. Basta cercare jsperf.com per alcuni esempi.

Ok, questo è alcune linee guida generali su asm.js. Ora parliamo di Three.js.

Innanzitutto, poiché THREE.js deve interagire con il codice utente, non è facile scrivere una libreria asm.js a causa delle numerose restrizioni (nessun oggetto).

In secondo luogo, Three.js non otterrà molte prestazioni in termini di prestazioni per i calcoli in cui asm.js è forte. Ma otterrà di più dai futuri aggiornamenti dai browser. (ad esempio, la creazione di typedarrays in chrome che ora è un punto dolente in THREE.js è in arrivo presto V8 issue)

In terzo luogo, il codice in asm.js deve gestire la propria memoria. Il che significa che THREE.js deve trovare un modo per far funzionare app di grandi dimensioni con memoria limitata. O rendere ogni applicazione molto affamata di memoria.

In quarto luogo, confrontando la demo irreale con three.js è un po 'ingiusto perché three.js tenta di consentire a tutti di scrivere app 3D mentre il motore irreale è un motore altamente ottimizzato per i giochi 3D.

Come hai notato, sono principalmente contro asm.js in three.js. Ma è perché è troppo presto per dire qual è il modo migliore per andare. C'è un'alta probabilità che asm.js possa ottenere un posto in three.js alla fine ma per un uso più limitato come renderer-only per esempio. Ma per ora ci sono ancora troppe domande irrisolte su asm.js.

Ma se si desidera utilizzare asm.js e utilizzare C++, quindi si consiglia di emscripten che è stato utilizzato per costruire la demo irreale.

Questa è ovviamente la mia opinione.Ma penso che rappresenti in qualche modo ciò che @ Mrdoob e @WestLangley avevano in mente. E mi dispiace per il lungo post.

+3

Grazie Gero3, è esattamente quello che stavo cercando. In realtà hai confermato molto di ciò che pensavo e speravo. Ero un po 'confuso su Chrome. Quando ho provato nella v22, la demo irreale ha rotto l'intero browser, ma a Canary ha funzionato. Ho cercato su Google per vedere se fosse stato incluso e sentito parlare di esso - quindi ho pensato che fosse stato aggiunto. Ma dopo aver guardato di nuovo, posso vedere che non ha il supporto. Inoltre, esprimo il tuo punto di vista su Unreal v Three. Tre è davvero una grande libreria e volevo solo vedere quali erano gli altri pensieri su ASM e tre usando la demo di Unreal come mio punto di discussione. Grazie ancora! – Mat

0

Il modo migliore per scoprirlo è scrivere una piccola demo in C (a mano) quindi compilare asm.js ed eseguirlo, quindi scrivere la stessa piccola demo in JS con Three.js (a mano) quindi eseguire e confrontare le differenze tra l'esperienza degli sviluppatori e le prestazioni.