2013-08-25 8 views
11

Niedawno zacząłem prowadzić pewne dochodzenia w sprawie ASM i grałem z kilkoma demami online. Muszę powiedzieć, że demo Unreal było imponujące ... Rozwijam aplikację za pomocą Trzech od wielu miesięcy. Działa pięknie na szybkich maszynach, ale na niższych końcach ma tendencję do walki. Kiedy przeprowadzałem nierealne demo na moich maszynach niższego końca, demo działało jak marzenie. Moje pytanie brzmi, jakie miejsce może mieć ASM z Trzema - czy może to znacznie przyspieszyć silnik? Czy warto analizować lub opracowywać rozwiązania, które wykorzystują i przełączają się między nimi w oparciu o przeglądarkę? Czy byłyby też plany, żeby Three skorzystał z tego w przyszłości?Trzy i ASMjs

Pochodzę z tła w C++ i byłbym bardzo zainteresowany perspektywą rozwoju czegoś. Ale jednocześnie oznaczałoby to konieczność ponownego uczenia się języka, a jeszcze bardziej problematyczny może być długi czas potrzebny do uzyskania użytecznego punktu.

Jakie są Twoje myśli?

Odpowiedz

14

To jest moja opinia:

Przede wszystkim asm.js nie ma naprawdę być napisane ręcznie. Mimo to mówię, że z pewnością można to napisać, ponieważ ma walidator. Nierealne demo to coś, co zostało skompilowane do pliku asm.js z emscripten. Nie wymaga również interakcji z innym kodem poza kodem, który jest kompilowany. Generuje więc wysoce zoptymalizowany kod ze względu na fakt, że nierealne demo jest już wysoce zoptymalizowanym kodem w C++, zostaje zoptymalizowane przez kompilator, a następnie dostaje kolejny przebieg optymalizacji poprzez asm.js.

Po drugie, asm.js jest obsługiwany tylko przez firefox. Mimo że wszystkie inne przeglądarki mogą go wykonywać, ale na większości nadal powoduje to obniżenie wydajności. Kara ta dotyczy porównania kodu asm.js, który działa tak samo, jak normalny kod javascript. Wystarczy wyszukać jsperf.com na przykładach.

Okay, Oto kilka ogólnych wskazówek dotyczących asm.js. Porozmawiajmy teraz o Three.js.

Po pierwsze, ponieważ THREE.js musi wchodzić w interakcje z kodem użytkownika, nie jest łatwo napisać bibliotekę asm.js z powodu wielu ograniczeń (brak obiektów).

Po drugie, Three.js nie zyska dużej wydajności w obliczeniach, w których silny jest asm.js, ale zyska więcej dzięki przyszłym aktualizacjom z przeglądarek. (na przykład wkrótce pojawi się tworzenie czcionek w chrome, które jest teraz punktem krytycznym w THREE.js, V8 issue)

Po trzecie, kod w pliku asm.js musi zarządzać własną pamięcią. Co oznaczałoby, że THREE.js musi znaleźć sposób, aby duże aplikacje działały z ograniczoną pamięcią. Lub spraw, aby każda aplikacja była bardzo głodna.

Po czwarte, porównanie nierealnej wersji demonstracyjnej z plikiem three.js jest nieco niesprawiedliwe, ponieważ trojan próbuje zezwolić wszystkim na pisanie aplikacji 3D, podczas gdy nierzeczywisty silnik jest wysoce zoptymalizowanym silnikiem do gier 3D.

Jak zauważyłeś, jestem głównie przeciwko asm.js w three.js. Ale to dlatego, że jest za wcześnie, by powiedzieć, co najlepiej zrobić. Istnieje duże prawdopodobieństwo, że program asm.js dostanie miejsce w pliku three.js, ale na przykład w bardziej ograniczonym zakresie jako renderer-only. Ale na razie wciąż jest zbyt wiele nierozwiązanych pytań wokół asm.js.

Ale jeśli chcesz używać asm.js i używać C++, to polecam emscripten, który został użyty do zbudowania nierzeczywistej wersji demo.

To jest oczywiście moja opinia.Ale myślę, że w pewnym stopniu odzwierciedla to, co mieli na myśli @ Mr.doob i @WestLangley. I przepraszam za długi post.

+3

Dzięki Gero3, właśnie tego szukałem. Naprawdę potwierdziłeś wiele z tego, co myślałem i miałem nadzieję. Byłem nieco zdezorientowany z powodu chromu. Kiedy testowałem w wersji 22, nierzeczywiste demo zepsuło całą przeglądarkę, ale w kanarku zadziałało. Przeszukałem go, aby zobaczyć, czy został uwzględniony i usłyszałam o nim wzmiankę - więc założyłem, że zostało dodane. Ale po ponownym spojrzeniu widzę, że nie ma wsparcia. Całkowicie biorę też pod uwagę Unreal v Three. Trzy to rzeczywiście świetna biblioteka i chciałem tylko zobaczyć, co inni myślą na temat ASM, a trzech użyć demo Unreal jako mojego gadającego punktu. Jeszcze raz dziękuję! – Mat

0

Najlepszym sposobem, aby się przekonać, jest napisanie małego dema w C (ręcznie), a następnie kompilacja do asm.js i uruchomienie go, a następnie napisanie tego samego małego dema w JS z Three.js (ręcznie), a następnie uruchomienie i porównać różnice zarówno pod względem doświadczenia programistów, jak i wydajności.