3D API für Webbrowser
3D API für Webbrowser
Hallo liebe ZFX'ler,
ich bin es mal wieder :geek: Und natürlich habe ich mal wieder eine Frage - Naja nicht direkt Frage, gerne würde ich einfach andere Meinungen zu diesem Thema hören.
Schon etwas länger interessiere ich mich sehr stark für 3D im Browser, da ich denke das dies eine große Zukunft haben wird - Worüber man sicher streiten kann - Aber mit der Wahl einer API tue ich mich doch sehr schwer. Denn alle haben viele Vorteile und teils gravierende Nachteile.
Bei 3D Entwicklung im Browser geht es einem natürlich darum möglichst vielen Benutzern das Spielen zu ermöglichen.
Die bekanntesten Optionen:
WebGL
WebGL hat den Ansatz Browserunabhängig als HTML5 Standard daher zu kommen, was Microsoft durch den Internet Explorer aber zu Nichte macht. Unterstützt wird es von Firefox, Opera und Chrome.
Der große Bottleneck ist hier JavaScript, denn darüber wird es programmiert und ist nur dann schnell wenn man auf dem GPU arbeitet. Dies geht aber bei Pfadfindung & co nicht immer. Sobald man solche Dinge berechnen will geht WebGL zu schnell in die Knie...große Projekte? Unmöglich....
Flash Stage 3D
Flash ist zwar ein Plugin, allerdings ist es so verbreitet das es hier nicht so von Nachteil ist wie andere Plugins die Benutzer erst installieren müssen. Der große Vorteil liegt in der Unterstützung aller Browser, der Nachteil ist das Stage3D , sofern ich das richtig verstanden habe, keine freie Entwicklung ist sondern für Meshes & co Klassen mitgibt. Man ist also nicht frei in der Entwicklung und es ist ehr eine Engine als eine API.
Native Client
Vom Ansatz die absolut beste Variante: Binärer C Code nativ im Browser. Sehr schnell und flexibel. Wird aber leider nur von Chrome unterstützt. Man munkelt aber das der neue Browser "Metro" Native Client Support bekommen soll.
Silverlight
Das Problem warum Microsoft sich gegen WebGL & co bisher wert liegt an Ihrer eigenen 3D Möglichkeit: Silverlight kann ebenso 3D Grafik rendern und hat mehr Peformance als WebGL. Aber das Plugin hat bei weitem nicht die Verbreitung von Flash.
Andere Plugins
Es gibt natürlich weitere Optionen über Unity & co die man als externes Plugin benutzen kann. Hier muss man bedenken das es User oft abschreckt etwas runterzuladen und zu installieren was Sie nicht kennen. Daher ehr ungeeignet um Masse zu erreichen.
Fazit
Habt Ihr Erfahrung mit diesen API's? Wo denkt Ihr liegt die Zukunft? Auf welche Technik sollte man setzen?
Grüße
Stimpy
ich bin es mal wieder :geek: Und natürlich habe ich mal wieder eine Frage - Naja nicht direkt Frage, gerne würde ich einfach andere Meinungen zu diesem Thema hören.
Schon etwas länger interessiere ich mich sehr stark für 3D im Browser, da ich denke das dies eine große Zukunft haben wird - Worüber man sicher streiten kann - Aber mit der Wahl einer API tue ich mich doch sehr schwer. Denn alle haben viele Vorteile und teils gravierende Nachteile.
Bei 3D Entwicklung im Browser geht es einem natürlich darum möglichst vielen Benutzern das Spielen zu ermöglichen.
Die bekanntesten Optionen:
WebGL
WebGL hat den Ansatz Browserunabhängig als HTML5 Standard daher zu kommen, was Microsoft durch den Internet Explorer aber zu Nichte macht. Unterstützt wird es von Firefox, Opera und Chrome.
Der große Bottleneck ist hier JavaScript, denn darüber wird es programmiert und ist nur dann schnell wenn man auf dem GPU arbeitet. Dies geht aber bei Pfadfindung & co nicht immer. Sobald man solche Dinge berechnen will geht WebGL zu schnell in die Knie...große Projekte? Unmöglich....
Flash Stage 3D
Flash ist zwar ein Plugin, allerdings ist es so verbreitet das es hier nicht so von Nachteil ist wie andere Plugins die Benutzer erst installieren müssen. Der große Vorteil liegt in der Unterstützung aller Browser, der Nachteil ist das Stage3D , sofern ich das richtig verstanden habe, keine freie Entwicklung ist sondern für Meshes & co Klassen mitgibt. Man ist also nicht frei in der Entwicklung und es ist ehr eine Engine als eine API.
Native Client
Vom Ansatz die absolut beste Variante: Binärer C Code nativ im Browser. Sehr schnell und flexibel. Wird aber leider nur von Chrome unterstützt. Man munkelt aber das der neue Browser "Metro" Native Client Support bekommen soll.
Silverlight
Das Problem warum Microsoft sich gegen WebGL & co bisher wert liegt an Ihrer eigenen 3D Möglichkeit: Silverlight kann ebenso 3D Grafik rendern und hat mehr Peformance als WebGL. Aber das Plugin hat bei weitem nicht die Verbreitung von Flash.
Andere Plugins
Es gibt natürlich weitere Optionen über Unity & co die man als externes Plugin benutzen kann. Hier muss man bedenken das es User oft abschreckt etwas runterzuladen und zu installieren was Sie nicht kennen. Daher ehr ungeeignet um Masse zu erreichen.
Fazit
Habt Ihr Erfahrung mit diesen API's? Wo denkt Ihr liegt die Zukunft? Auf welche Technik sollte man setzen?
Grüße
Stimpy
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
Stage3D ist da im Grunde genauso frei wie WebGL. Man hat zwar eine allg. Schnittstelle über die man je nach Verfügbarkeit DirectX/OpenGL/Software Renderer bedient, aber man kann und muss genauso Shader schreiben, Vertex Buffer und Texturen hochladen...
Ich habe neulich bei http://spieleprogrammierer.de eine kleine Unterhaltung über HTML5 vs. Flash geführt. Da ging es auch ein bisschen um WebGL vs. Stage3D (http://www.spieleprogrammierer.de/17-ga ... owsergame/):
Ich habe neulich bei http://spieleprogrammierer.de eine kleine Unterhaltung über HTML5 vs. Flash geführt. Da ging es auch ein bisschen um WebGL vs. Stage3D (http://www.spieleprogrammierer.de/17-ga ... owsergame/):
Re: 3D API für Webbrowser
Also ich habe mit Stage 3D noch nicht gearbeitet, mein Fazit beruht hier auf Artikel die ich las. Gearbeitet habe ich mit WebGL, Native Client - An beiden stört mich das es nicht überall geht und bei WebGL die Peformance. Beruflich muss ich mich bald mit Stage 3D beschäftigen.
Das was ich über Stage3D gelesen habe, war so formuliert das ich vorgegebene Objekte habe wie z.B. das Camera Objekt. Dieses bietet mir natürlich Roll,Pitch usw. usw. aber schrenkt mich doch irgendwo ein? Oder nicht? Das ich Shader schreiben muss & co ist mir durchaus klar.
Ich leide da auch ein wenig an der Programmierer-Krankheit vorgegebenes nicht zu mögen ;)
Sofern ich das richtig verstehe siehst du also in Stage die Zukunft?
Das was ich über Stage3D gelesen habe, war so formuliert das ich vorgegebene Objekte habe wie z.B. das Camera Objekt. Dieses bietet mir natürlich Roll,Pitch usw. usw. aber schrenkt mich doch irgendwo ein? Oder nicht? Das ich Shader schreiben muss & co ist mir durchaus klar.
Ich leide da auch ein wenig an der Programmierer-Krankheit vorgegebenes nicht zu mögen ;)
Sofern ich das richtig verstehe siehst du also in Stage die Zukunft?
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
Naja was heißt Zukunft, die Unreal Engine, Unity und sicher ein paar andere laufen schon/bald im Flash Player. Das machen die Entwickler sicher nicht aus Zeitvertreib.
Flash gibt eigentlich ziemlich wenig vor und auch bei Stage3D wird da sicher ein Low-Level-Ansatz gefahren. Ich würde den Artikel gerne mal lesen. Soweit ich das sehe sind das wirklich falsche Informationen. Es gibt sicher so einiges vorgefertigtes, aber das muss man ja nicht nutzen.
Schau doch einfach mal in die API Referenz:
http://help.adobe.com/en_US/FlashPlatfo ... ext3D.html
Dort sieht man doch sofort, dass man im Grunde das gleiche macht wie bei DirectX und Co. Zeug an die Grafikkarte schicken und mit Vertex- und Pixelshader verarbeiten. Eine Kamera ist doch auch nur eine Matrix... edit: Und ich habe eben mal geschaut, soweit ich das sehe gibt es kein Kamera-Objekt (nur eine Art Utility Funktion für perspektivische Projektion) in Stage3D - das muss man also selbst schreiben.
Stage3D ist im Grunde eine API wie OpenGL oder DirectX. Würde man in der Hinsicht eingeschränkt sein, wäre es doch ziemlich seltsam, wenn Unity, Unreal Engine und Co. mit Adobe Alchemy als C++ Projekte für die AVM2 relativ reibunglos kompiliert werden können und dann auch noch flüssig laufen.
Flash Anwendungen laufen so ziemlich auf allen Plattformen (bzw. lassen sich konvertieren o.Ä.), welche fehlt dir denn?
Flash gibt eigentlich ziemlich wenig vor und auch bei Stage3D wird da sicher ein Low-Level-Ansatz gefahren. Ich würde den Artikel gerne mal lesen. Soweit ich das sehe sind das wirklich falsche Informationen. Es gibt sicher so einiges vorgefertigtes, aber das muss man ja nicht nutzen.
Schau doch einfach mal in die API Referenz:
http://help.adobe.com/en_US/FlashPlatfo ... ext3D.html
Dort sieht man doch sofort, dass man im Grunde das gleiche macht wie bei DirectX und Co. Zeug an die Grafikkarte schicken und mit Vertex- und Pixelshader verarbeiten. Eine Kamera ist doch auch nur eine Matrix... edit: Und ich habe eben mal geschaut, soweit ich das sehe gibt es kein Kamera-Objekt (nur eine Art Utility Funktion für perspektivische Projektion) in Stage3D - das muss man also selbst schreiben.
Stage3D ist im Grunde eine API wie OpenGL oder DirectX. Würde man in der Hinsicht eingeschränkt sein, wäre es doch ziemlich seltsam, wenn Unity, Unreal Engine und Co. mit Adobe Alchemy als C++ Projekte für die AVM2 relativ reibunglos kompiliert werden können und dann auch noch flüssig laufen.
Flash Anwendungen laufen so ziemlich auf allen Plattformen (bzw. lassen sich konvertieren o.Ä.), welche fehlt dir denn?
Re: 3D API für Webbrowser
Wie gesagt, mein Wissen stützt sich da nur auf Artikel. Gerne würde ich dir die Links geben, aber ich habe mir diese nicht gespeichert sondern ab und an mal was gelesen. Ich Irre da auch gerne, wenn es nicht so ist wie ich es las.
Man kann also alles selber definieren und kapseln & co - Dann spricht natürlich wenig gegen Stage 3D, gerade die Ausbreitung von Flash ist da natürlich ein extrem großes Plus. Hab mir nun von Amazon mal das Buch drüber bestellt, denke danach bin ich deutlich schlauer.
Einziges was ich noch nicht verstehe ist das du meintest, dass Flash ein Renderer sucht und dann damit rendert (directX,openGL) - bekanntlich haben aber beide verschiedene Koordinatensysteme, worauf entwickelt man dann?! Sicherlich kein Argument gegen oder für Stage - Nur rein aus Interesse
Man kann also alles selber definieren und kapseln & co - Dann spricht natürlich wenig gegen Stage 3D, gerade die Ausbreitung von Flash ist da natürlich ein extrem großes Plus. Hab mir nun von Amazon mal das Buch drüber bestellt, denke danach bin ich deutlich schlauer.
Einziges was ich noch nicht verstehe ist das du meintest, dass Flash ein Renderer sucht und dann damit rendert (directX,openGL) - bekanntlich haben aber beide verschiedene Koordinatensysteme, worauf entwickelt man dann?! Sicherlich kein Argument gegen oder für Stage - Nur rein aus Interesse
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
Flash bildet da eine eigene Spezifikation ab. Du musst nur Flash bedienen, Flash leitet das ganze dann an DirectX (bei Windows), an OpenGL [ES] (bei Linux/MacOS/iOS/Android) und an den Software Renderer bei Systemen ohne GPU weiter. Es gibt eine eigene Shader Sprache , die mehr oder weniger den kleinsten gemeinsamen Nenner aller Systeme wiederspiegelt.
http://www.adobe.com/devnet/flashplayer/stage3d.html ist vielleicht auch ganz interessant für dich.
http://www.adobe.com/devnet/flashplayer/stage3d.html ist vielleicht auch ganz interessant für dich.
Re: 3D API für Webbrowser
Also ich habe mir das nun einmal genauer angeschaut und fühle mich mit den Einschränkungen doch ein wenig bestätigt. Wenn ich z.B. ein VertexBuffer erstelle, dann müssen diese als Vector3D, der vorgefertigten Klasse von Stage3D, vorliegen. Das zieht sich dann weiter über die Matrix-Klasse(setProgramConstantsFromMatrix) usw. usw. Man kann also nicht von Grund auf eine Engine schreiben sondern muss die vorhandenen Vectoren und Matrix Klassen verwenden usw....
Mir ist klar, dass dies eigentlich nichts schlimmes ist - Da die Klassen alle Funktionen die man benötigt natürlich auch unterstützen aber irgendwie mag ich es nicht wenn ich etwas benutzen muss ohne Alernativen
Mir ist klar, dass dies eigentlich nichts schlimmes ist - Da die Klassen alle Funktionen die man benötigt natürlich auch unterstützen aber irgendwie mag ich es nicht wenn ich etwas benutzen muss ohne Alernativen
Re: 3D API für Webbrowser
Eine Engine ist doch weit mehr als eine eigene Vektor-Klasse und eine eigene Matrix-Klasse. Ich würde eher sagen, wer selber eine schreibt, macht was falsch.Stimpy hat geschrieben:Man kann also nicht von Grund auf eine Engine schreiben sondern muss die vorhandenen Vectoren und Matrix Klassen verwenden usw....
(zum Beispiel schreibt bei mir die Physikengine schon die Vektor- und Matrixformate vor, also wozu groß Wrapper schreiben, nehme ich die eben gleich)
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
@Stimpy: Also Vector ist hier kein Vektor im mathematischen Sinne, sondern ein generischer Array aus Zahlen (siehe http://help.adobe.com/en_US/FlashPlatfo ... ector.html). Das hat nichts mit vorgefertigten Klassen zu tun. Bei webGL nutzt du doch auch das Float-Array von javascript. Du hast da also nicht richtig geschaut ;), du kannst dich wirklich von dem Gedanken trennen, dass du weniger Freiheit bei Stage3d hast. Und wenn du keine Matrix-Objekte einsetzen willst, dann nimm einfach setProgramConstantsFromVector (auch hier handelt es sich um einen Vector.<Number> nicht irgendein Vector3D.
Re: 3D API für Webbrowser
Ich habe mich die letzte Zeit nun noch einmal intensiv damit auseinander gesetzt und muss Chromanoid zustimmen, man ist da wirklich frei. Ich habe die Vector-Klassen falsch verstanden gehabt beim ersten ansehen.
Aber eine Sache macht mir große Kopfschmerzen, ich habe ein C++ Quellcode mit DirectX (Heightmap Rendering in mehrere Meshs) den ich portieren will in meine Flash Anwendung. Dort wird über Indizierte Triangle_Strips gerendert. Über was zum Teufel rendert denn Flash? Ich bekomme auch nur sehr sperrlich an Informationen zu dem Thema. Kann mir hier jemand auf die Sprünge helfen?
Aber eine Sache macht mir große Kopfschmerzen, ich habe ein C++ Quellcode mit DirectX (Heightmap Rendering in mehrere Meshs) den ich portieren will in meine Flash Anwendung. Dort wird über Indizierte Triangle_Strips gerendert. Über was zum Teufel rendert denn Flash? Ich bekomme auch nur sehr sperrlich an Informationen zu dem Thema. Kann mir hier jemand auf die Sprünge helfen?
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
Ich fürchte sowas gibts für stage3d nicht. Du musst das also mithilfe des indexbuffers "emulieren". Soweit ich das sehe gibts nur einfache Dreiecke keine anderen Dreieck-Modi. Ich schätze die haben das weggelassen, um es bei den unterschiedlichen Implementierungen (DirectX, OpenGL, OpenGL ES, Software...) leichter zu haben.
Re: 3D API für Webbrowser
Okay, das habe ich nun zurecht gefrickelt. Ich komme aber mit dem Frustum Culling überhaupt nicht klar , hast du da schon einmal Erfahrung mit gemacht zufällig?
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: 3D API für Webbrowser
Das ist eben das Problem wenn man alles selbst machen will ;) habe ich noch nicht gemacht, aber hier findest du ein augenscheinlich brauchbares Tutorial: http://jacksondunstan.com/articles/1811
Re: 3D API für Webbrowser
Hi Danke für den Tutorial Tipp...leider scheint der Algo nicht zu funktionieren....jedenfalls sagt er mir klar das das Object nciht sichtbar ist, obwohl es das nachweisbar ist :D Ich bin so frustriert.... :oops:
EDIT: Habe es im Laufe des Tages tatsächlich noch hinbekommen, aber die vorhandenen How-To's scheinen wirklich Fehler zu haben....ich hab das dann nur durch eine OpenGL Portierung noch hinbekommen....naja...nun bin ich total Happy das ich Frustum Culling habe :)
EDIT: Habe es im Laufe des Tages tatsächlich noch hinbekommen, aber die vorhandenen How-To's scheinen wirklich Fehler zu haben....ich hab das dann nur durch eine OpenGL Portierung noch hinbekommen....naja...nun bin ich total Happy das ich Frustum Culling habe :)