2012-12-23 8 views
6

Gibt es eine Möglichkeit, three.js serverseitig auf einem kopflosen Server (Standalone-Server, Amazon AWS oder ähnliches) laufen zu lassen?serverseitige Fallback-Rendering

Momentan stürze ich mich auf Canvas-Rendering (Drahtgitter nur aus Leistungsgründen), wenn der Browser des Benutzers WebGL nicht unterstützt. Das ist gut genug für Echtzeit-Interaktionen, aber damit die App Sinn ergibt, müssten Benutzer wirklich in der Lage sein, eine korrekt gerenderte Version mit Lichtern, Schatten, Nachbearbeitung usw. zu sehen, selbst wenn sie eine große Latenzzeit haben.

Also ... wäre es möglich, einen serverseitigen Dienst mit der funktionalen three.js-Instanz zu erstellen? Der Client würde immer noch das Rendering von tree.js-Canvas-Wireframes verwenden, aber nach einer Inaktivität von einer Sekunde würde er über AJAX eine vollständige Wiedergabe vom serverseitigen Dienst anfordern und sie einfach als Bild überlagern.

Gibt es zur Zeit irgendwelche Anwendungen, Bibliotheken oder irgendetwas, das so etwas erlauben würde (funktionales JavaScript + webgl + three.js auf einem kopflosen, vorzugsweise Linux-Server und GPU-weniger dazu)?

PhantomJS in den Sinn kommt, aber anscheinend ist es noch nicht WebGL unterstützen: http://code.google.com/p/phantomjs/issues/detail?id=273

Oder jede alternative Ansätze für das Problem? Den Weg der programmgesteuerten Steuerung eines vollständigen Desktop-Rechners mit einer GPU und einer standardmäßigen chrome/firefox-Instanz zu gehen, ist zwar möglich, aber fragil, und ich würde wirklich nicht dorthin gehen wollen, wenn es nur Software-Lösungen gibt.

Antwort

9

In ihrer QA-Infrastruktur, Google Chromium Test Mesa mit ausführen kann (siehe Ausgabe 97675, über den Schalter --use-gl=osmesa). Der Software-Rasterizer in der neuesten Version von Mesa ist ziemlich fortgeschritten. Er beinhaltet die Verwendung von LLVM, um die Shader zu konvertieren und die Ausführung auf der CPU zu emulieren. Dein erstes Abenteuer könnte sein, Mesa zu bauen, Chromium zu bauen und dann zu versuchen, sie zusammen zu binden. Als Nebenbemerkung ist dies auch, was ich (in naher Zukunft) für PhantomJS selbst plane, insbesondere da sich Qt ebenfalls in diese Richtung bewegt, d. H. Mit Mesa/LLVMpipe anstelle einer eigenen Raster-Engine. The numbers sieht eigentlich gut aus. Noch besser, für eine offline, nicht animierte Single-Shot-Aufnahme wäre die Performance mehr als zufriedenstellend.

+0

Dies ist genau das, was ich suche (nun, in Ermangelung von leichter verfügbaren Optionen). Mir war die Chromium-Unterstützung für den Mesa-Renderer nicht bekannt. Hoffentlich werde ich damit Erfolg haben, oder besser noch, wenn du es zuerst in PhantomJS funktionierst :) – yaku

+0

@yaku konntest du Chromium mit Mesa Renderer ausführen? – frank

+0

@frank Nein, tat ich nicht. Nicht zu sagen, dass es nicht gemacht werden kann, nur dass ich nicht viel Erfahrung darin habe, riesige Software-Stücke zu bauen und zu optimieren. Ich freue mich immer noch darauf, es irgendwann erneut zu versuchen, oder wenn PhantomJS oder andere bestehende Lösungen WebGL unterstützen. – yaku

1

einige Eingaben zu diesem Thema: https://github.com/mrdoob/three.js/issues/2182

Insbesondere diese demo zeigen, wie einige Bilder auf Server-Seite erzeugen NodeJS verwenden.

Danke, Nico

+1

Leider sieht es aus wie es ist nur CanvasRenderer. Ich suche nach vollen WebGLRenderer-Fähigkeiten, auch wenn sie nicht beschleunigt und in Software gerendert wurden (ca. 1 FPS sollte für diesen Zweck ausreichen). Irgendwie macht es node.js (oder phantomjs), mit einem Software-OpenGL-Renderer wie osmesa oder llvmpipe (?) Zu arbeiten, der Weg zu gehen, aber das ist ... ich weiß nicht, wo ich damit anfangen soll. – yaku