Welche Vorteile bietet OpenGL gegenüber Frameworks / Engines für kleine Entwickler? [geschlossen]

16

Ich habe einen Trend festgestellt, bei dem Indie-Entwickler sich von Frameworks und Engines abwenden und dazu übergehen, nacktes OpenGL oder SDL / SFML2 zu verwenden. Als Indie-Entwickler kann ich nicht erkennen, was OpenGL auf niedriger Ebene über separate Engines oder Frameworks anbieten kann.

Die meisten anständigen Engines und Frameworks bieten die Funktionalität, die Sie benötigen, und stehen Ihnen nie im Weg. Sie könnten auch die Option eröffnen, sich direkt mit OpenGL zu befassen. Einige bieten sogar die Funktionalität, plattformübergreifend zu kompilieren!

Ich verstehe das Bestreben zu erfahren, was unter der Haube passiert, aber ich sehe keine Vorteile, die OpenGL für Indie-Entwickler in Bezug auf Engines oder Frameworks bieten könnte .

Können Sie erklären, warum Spiele mit OpenGL von Grund auf neu erstellt wurden?

Frank
quelle
Als Doktorand in Spiel- und Grafikprogrammierung kann ich die Komplexität des Lernens von OpenGL von Grund auf belegen. Wenn ich heute ein Indy-Spiel machen würde, würde ich auf jeden Fall SDL oder eine andere Bibliothek verwenden. Aber ich verstehe heute auch viel mehr über Grafik als zu Beginn meines Studiums. Das Erlernen einer API hat mir einiges geholfen, die Funktionsweise von GPUs im Allgemeinen und das Zusammenspiel von Hardware und Software zu verstehen. Aber um ein kommerzielles Produkt herzustellen, würde ich an dieser Stelle unbedingt eine Drittanbieter-Bibliothek verwenden.
Philip

Antworten:

23

Dies ist größtenteils eine meinungsbasierte Frage / Antwort, daher ist es nicht unbedingt ideal für diese Plattform, aber trotzdem:

Warum kein Framework / Engine als Indie? Hier sind meine zwei Cent:

  • Budgetmangel: Dies ist wahrscheinlich der größte Punkt für die meisten kleinen / Indie-Entwickler. Viele Frameworks oder Engines erlauben es Ihnen nicht, Ihr Produkt zu veröffentlichen, ohne entweder eine teurere Version zu kaufen (vorausgesetzt, es gibt eine billige oder kostenlose Version) und / oder Lizenzgebühren zu zahlen, was Sie bei kleinen Projekten immer berücksichtigen müssen. Manchmal muss man sogar einmal pro Plattform bezahlen.
  • Komplexität: Die meisten Motoren oder Frameworks fallen in eine von zwei Kategorien:
    • Sie sind entweder für ein bestimmtes Genre sehr begrenzt ( RPG Maker ist ein typisches Beispiel).
    • Oder es ist einfach zu allgemein mit vielen Dingen, die Sie wahrscheinlich sowieso nicht verwenden werden (wie Unity ).
  • Proprietärer Code: Die meisten Engines sind keine Open Source-Engines. Um die eigentliche Quelle zu erhalten, müssen Sie sogar noch mehr bezahlen (sofern verfügbar). Ohne den eigentlichen Quellcode kann die Portierung auf andere Plattformen schwierig oder sogar unmöglich sein (auch hier wäre RPG Maker ein perfektes Beispiel).
  • Clunkyness: Dies ist meine persönliche Meinung, aber zumindest für mich ist dies oft eine ziemlich große Enttäuschung, wenn man vorgefertigte Engines und Frameworks in Betracht zieht, besonders wenn man nur ein kleines Spiel baut. Wer möchte ein kleines Break-Spiel spielen, das etwa 200 KB groß ist, aber eine Laufzeit von 50 MB mit sich bringt?
  • Sprachauswahl: Einige Engines und Frameworks bieten keine Bibliotheken zur Verwendung in Ihrem eigenen Code. Stattdessen bieten sie ein Framework oder eine Laufzeitumgebung, die eine eigene Skriptsprache oder eine festgelegte Sprache (wie Javascript oder C #) verwendet. Wenn Sie Ihre eigene benutzerdefinierte Engine schreiben, können Sie die von Ihnen gewählte Sprache verwenden.
  • Schutz Ihrer Arbeit: Wenn Sie eine vorgefertigte Engine oder ein vorgefertigtes Framework verwenden, ist die Wahrscheinlichkeit groß, dass andere möglicherweise viel einfacher in der Lage sind, Ihren Code oder Ihre Assets zu ändern oder zu dekompilieren sauber). Die Bearbeitung von benutzerdefiniertem Code und Assets stellt eine weitaus größere Hürde dar, insbesondere wenn sie in nativen Code kompiliert werden.
  • Branding: Dies mag für viele unbedeutend sein, aber einige Engines und Frameworks zwingen Sie dazu, ihr Logo oder vielleicht sogar Anzeigen zu zeigen, wobei Sie im Wesentlichen die Freiheit haben, zu entscheiden, für wen / was Sie werben möchten. Dies hängt natürlich häufig von der tatsächlichen Lizenz, den Lizenzgebühren usw. ab.
  • Inkompatibilität mit Lizenzen: Dies ist etwas, das viele nicht einmal bei der Auswahl eines Motors berücksichtigen, aber je nachdem, was Sie tun möchten, kann dies ein wichtiger Faktor sein. Selbst wenn Sie einen Motor kaufen, können Sie möglicherweise keine Quellen oder verwandte Materialien preisgeben. So etwas könnte das Modden unmöglich machen, selbst wenn Sie möchten, dass Benutzer dies können. Nehmen Sie als Beispiel die Source- Engine von Valve ( Half-Life 2 , Team Fortress 2 usw.): Sie ermöglichen Moddern, ihre Engine für ihre eigenen Projekte zu verwenden. Wenn diese Spiele (zum Beispiel) auf Unreal Engine basieren würden, wäre dies aufgrund der durch die Lizenzbestimmungen implizierten Einschränkungen nicht möglich.
Mario
quelle
11
Und noch eins: Wenn Sie einmal openGL gelernt haben, wissen Sie es. Sie müssen es nicht in jeder Sprache neu lernen oder lernen, wie ein bestimmtes Framework / eine bestimmte Engine es für jedes neue Framework / jede neue Engine implementieren soll. Dies führt auch zu einer größeren Portabilität
wes
Obwohl dies nicht das häufigste Problem ist, ist es möglich, dass in der Engine oder im Framework die Idee einfach nicht realisierbar ist oder zu kompliziert wäre (z.
B .
@akaltar: Stimmt, aber gleichzeitig würde ich erwarten, dass jemand einen Motor auswählt, der zum beabsichtigten Ziel passt. Verwenden Sie beispielsweise keine 3D-Engine für ein 2D-Spiel und umgekehrt.
Mario
9

Die meisten anständigen Engines und Frameworks bieten die Funktionalität, die Sie benötigen, und stehen Ihnen nie im Weg.

Tun sie? Das hängt vielmehr genau davon ab, was Sie grafisch tun.

Für viele Arten von Spielen gibt es Standardantworten für grafische Fragen. Zum Beispiel kann ein durchschnittliches 2D-Spiel mit den 2D-Fähigkeiten von zum Beispiel XNA / MonoGame problemlos gemeistert werden. Es sind nur Sprites, die in Gruppen für das Gelände verfügbar sind, die gedreht werden können und so weiter.

Aber was ist, wenn Ihr Spiel früher ein durchschnittliches 2D-Spiel war? Dann lesen Sie etwas über coole Techniken, wie die Verwendung einer Höhenkarte, um einen Betrüger zu bauen, der im Verhältnis zum Bildschirm den Eindruck von Tiefe erweckt. Und das willst du tun.

Jetzt verwenden Sie normales Mapping und möglicherweise sogar Parallaxen-Mapping. Alles im selben Kontext wie "Rendern von Sprites", jedoch mit mehr als vielen reinen 2D-Engines. Insbesondere erfordert es das multitexturierte "Sprite Blitting", was viele 2D-Engines nicht können.

Was machen Sie, wenn sich Ihr Motor nicht an Sie anpassen kann? Das bedeutet, dass Sie mehrere Durchgänge durchführen müssen, einen für die Farbe und einen für die Beleuchtung über eine normale Karte. Dies funktioniert jedoch nicht, da Sie das Höhenfeld der normalen Karte benötigen, um die Parallaxen-Zuordnung für die Farbsuche zu verwenden. Also ... was jetzt? Sie brauchen das Alpha, um Transparenz zu schaffen, damit Sie das Alpha nicht stehlen können. Und die Engine unterstützt keine Multitexturen.

Sie müssen also eine der folgenden Optionen auswählen:

  1. Gib die Idee auf. Dies bedeutet, dass Ihr Spiel durch Ihre Engine funktional eingeschränkt ist.
  2. Hacke die Engine, um Multitexture zu haben. Angenommen, Sie haben Zugriff auf den Quellcode, nehmen Sie es jetzt selbst in die Hand, um den Code einer anderen Person zu durchsuchen. Dies bedeutet auch, dass Sie es warten müssen und es nicht brechen müssen, wenn Sie herumstolpern.
  3. Tun Sie das Beste, was Sie können, innerhalb der Grenzen des Motors. Sie können also Parallaxe auf den normalen Karten erhalten, aber nicht auf den Farben. Es ist vielleicht nicht genau das, was Sie wollten, aber es ist besser als nichts.

Nehmen wir als Beispiel Geometry Wars. Die meisten 2D-Engines würden diese Art von Grafik nicht akzeptieren, da sich die meisten um das Zeichnen von Sprites und nicht um Linien drehen. Das ist ein Spiel, das eine sehr spezielle Art von Renderer benötigt.

Am Ende des Tages müssen Sie die Verantwortung für die Elemente Ihres Spiels übernehmen, die für die Anforderungen Ihres Spiels wichtig sind . Wenn das visuelle Erscheinungsbild Ihres Spiels in erster Linie vom Kunststil der von Ihnen verwendeten Bilder und Modelle und nicht von bestimmten Effekten abhängt, ist die Verwendung einer vorgefertigten Lösung in Ordnung. Wenn der visuelle Stil Ihres Spiels jedoch maßgeblich vom benutzerdefinierten Rendering-Code abhängt, ist die Wahrscheinlichkeit groß, dass eine Standard-Engine zu einer ernsthaften Einschränkung wird, wenn Sie Dinge tun, die außerhalb des Rahmens liegen.

Darüber hinaus gibt es ein sehr praktisches Problem: Nicht alle Spiele-Engines sind gleichermaßen portabel.

Mit dem Aufkommen mobiler Plattformen ist der Marktplatz für Spiele auf zahlreiche Betriebssysteme und Benutzeroberflächengeräte verteilt. Nicht alle Motoren funktionieren auf allen Geräten. Und wenn Ihr Motor auf einer Plattform nicht funktioniert, werden Sie sich mit Sicherheit nicht die Zeit nehmen, um ihn auf einer Plattform zum Laufen zu bringen . Immerhin ist das , warum Sie einen Motor in erster Linie verwendet, nicht wahr?

Wenn es Ihnen wichtig ist, dass Ihr Spiel auf einer bestimmten Plattform funktioniert, müssen Sie erneut die Verantwortung dafür übernehmen. Und der "einfachste" Weg, um damit Erfolg zu haben, ist es , es selbst zu tun. Erstellen einer Engine, die plattformübergreifend funktioniert, wobei möglicherweise einfachere plattformspezifische Frameworks verwendet werden, um einige Details auf niedriger Ebene zu verarbeiten. Auf diese Weise ist es Ihr Code, wenn es kaputt geht. Sie sind die beste Person, um das Problem zu beheben.

Nicol Bolas
quelle
Ihre Antwort gefällt mir, aber ich finde es sehr merkwürdig, dass Sie sich für XNA als Beispiel entschieden haben. Es leidet nicht an den von Ihnen genannten Nachteilen, außer möglicherweise an der Portabilität.
Seth Battin