verrückte Ideen für einen Editor

Grafik, Musik, Sound, Spieledesign, Spielmechanik, Story Writing und sonstiger kreativer Kram, der nichts mit Programmieren zu tun hat.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: verrückte Ideen für einen Editor

Beitrag von Schrompf »

BlueShark hat geschrieben: Also ich hab für meine 3D-Engine ein Interface geschrieben, dazu gibt es dlls, einmal für DirectX9 und OpenGL, die Funktion Draw() macht in beiden Fällen das selbe, die Umsetzung ist jedoch verschieden. Es ist also gar nicht nötig, dass die Editorengine die selbe sein muss, oder zumindestens sehr ähnlich, wie die, die man in seinem Spiel verwendet.
Das ist nach meinem Verständnis keine Engine, sondern bestenfalls ein API-Wrapper. Der ist im besten Fall tatsächlich austauschbar, da hast Du Recht.
Ich bearabeite im Editor ein Level, eine kleines Dorf zum Beispiel. Nun habe ich, sagen wir 10 Modelle für die Häuser und dazu nochmal 100 Texturen für alles, das Ganze ist dann in einem BSP-Tree verpackt. Nun speicher ich das ganze in einer Datei, wo dann folgendes steht:
Wie man hier sieht, sind die Daten nicht 3D-Engine abhängig, soll heißen dass jede beliebige 3D-Engine in der Lage sein müsste dies Daten zu verarbeiten.
Da gehen die Meinungen auseinander. Ein BSP-Tree z.B. ist schon eine reichlich spezifische Organisationsstruktur für statische Geometrie, und noch dazu eine, die vor 5 Jahren den Zenit ihrer Nützlichkeit überschritten hat und seitdem mehr Performance kostet, als sie bringt. Für's Rendern. Für Kollisionstest z.b. wäre wieder eine andere Beschleunigungsstruktur nötig.
Die Daten müssten beim Laden in das Engine freundliche Format gebracht werden, aber das war es dann auch schon.
Naja, das kann ordentlich Rechenzeit brauchen, das sollte man nach Möglichkeit bereits vorher getan haben... z.B. in einem Editor :-) Bei uns zählen zur Vorab-Aufbereitung zum Beispiel Kollisionsmesh-Vorkompilierung, Bewuchsverteilung, LOD-Berechnung, statische Spiegelungen, globale Konsistenzprüfungen und nicht zuletzt die Umgebungslicht-Berechnung dazu - allein letztere braucht mehrere Stunden für eine mittelgroße Welt.
Das Problem wird jedoch sein, dass das ein extrem simples Beispiel ist. Schließlich will man in seinem Editor mehr machen als nur Level auf Polygonbasis zu kreieren, sondern auch Skripten können. Und das wäre nur ein Punkt, dazu kommt noch sehr viel mehr.
Ja, mir fällt da zum Beispiel die Ausleuchtung ein: der Leveldesigner verteilt und konfiguriert Lichtquellen, um bestimmte Stimmungen in bestimmten Bereichen des Levels zu erreichen. Das z.B. schreit geradezu danach, im Editor die selbe Engine zu nehmen wie im Spiel, damit der Designer das Endergebnis sofort sieht. Gleichzeitig ist aber z.B. die ganze Render-Pipeline mit Beleuchtungsmodell und Lichtorganisation eine meiner Meinung nach sehr individuelle Geschichte, für die sich nicht so einfach eine wiederverwendbare Schnittstelle finden lassen dürfte.
Aber mal so ganz am Rande, was spricht dagegen, dass man für sein Spiel die 3D-Engine des Editors verwendet?
Nichts, das ist ja der Standardweg. Bzw. andersrum: man benutzt die Spielengine auch für den Editor. Im Spiel muss es ja gut aussehen, und im Editor muss es möglichst wie im Spiel aussehen, damit die Designer nicht blind arbeiten müssen.

Was ich aber an der Idee für das problematischste halte, sind die Konflikte, die bei der gemeinsamen Bearbeitung ganz automatisch entstehen. Die gängigen Versionsverwaltungen lösen das auf Textzeilen- oder Byte-Ebene. In einem komplexen Szeneneditor würde man dagegen eine Lösung benötigen, die sehr viel mehr Wissen von den zu bearbeitenden Datensätzen benötigt.. ein Merge für ein Model sieht z.B. ganz anders aus als ein Merge für Objektplatzierungen oder eins für Physik-Geometrie. Hier könnte man wahrscheinlich erstmal auf Basis einer kleinsten Einheit (z.B. einem Szenegraph-Node) arbeiten und alle Änderungen verschiedener Leute, die die selbe kleinste Einheit betreffen, dem Nutzer zur Auflösung hinhalten. Das "Mergen" wäre dann eine Übertragung aller Fern-Änderungen auf die lokale Arbeitskopie, solange die betroffenen Einheiten nicht auch lokal verändert wurden. Und die Konfliktauflösung würde sich auf "Schau's Dir an, so sieht Deine aus, so die geänderte aus dem Repos. Welche willst Du?" beschränken.

Geht natürlich nicht für die ganzen globalen Daten wie Wesen-Vorlagen, Gegenstände, Skripts, Tag/Nacht-Einstellungen, Quests, Dialoge, Story, usw... aber es wäre ein Anfang.

Bye, Thomas
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
BlueShark
Beiträge: 79
Registriert: 28.02.2009, 18:55
Alter Benutzername: BlueShark

Re: verrückte Ideen für einen Editor

Beitrag von BlueShark »

Hallo und Entschuldigung, dass ich mich erst jetzt wieder melde^^.
Schrompf hat geschrieben:
BlueShark hat geschrieben:Die Daten müssten beim Laden in das Engine freundliche Format gebracht werden, aber das war es dann auch schon.
Naja, das kann ordentlich Rechenzeit brauchen, das sollte man nach Möglichkeit bereits vorher getan haben... z.B. in einem Editor :-) Bei uns zählen zur Vorab-Aufbereitung zum Beispiel Kollisionsmesh-Vorkompilierung, Bewuchsverteilung, LOD-Berechnung, statische Spiegelungen, globale Konsistenzprüfungen und nicht zuletzt die Umgebungslicht-Berechnung dazu - allein letztere braucht mehrere Stunden für eine mittelgroße Welt.
Aber könnte man diese Dinge nicht verallgemeinern? Sozusagen als Option für den Editor aktivierbar machen? Vielleicht kann man diese Vorabberechnungen in ein allgemeines Format bringen.
Schrompf hat geschrieben:Da gehen die Meinungen auseinander. Ein BSP-Tree z.B. ist schon eine reichlich spezifische Organisationsstruktur für statische Geometrie, und noch dazu eine, die vor 5 Jahren den Zenit ihrer Nützlichkeit überschritten hat und seitdem mehr Performance kostet, als sie bringt. Für's Rendern. Für Kollisionstest z.b. wäre wieder eine andere Beschleunigungsstruktur nötig.
Muss ja nicht unbedingt ein BSP-Tree sein. Assimp liefert ja zum Beispiel nen Szenegraph oder???(Wage mich jedenfalls irgendwo sowas in der Richtung gelesen zu haben, bin mir aber nicht ganz sicher)
Schrompf hat geschrieben:In einem komplexen Szeneneditor würde man dagegen eine Lösung benötigen, die sehr viel mehr Wissen von den zu bearbeitenden Datensätzen benötigt.. ein Merge für ein Model sieht z.B. ganz anders aus als ein Merge für Objektplatzierungen oder eins für Physik-Geometrie. Hier könnte man wahrscheinlich erstmal auf Basis einer kleinsten Einheit (z.B. einem Szenegraph-Node) arbeiten und alle Änderungen verschiedener Leute, die die selbe kleinste Einheit betreffen, dem Nutzer zur Auflösung hinhalten. Das "Mergen" wäre dann eine Übertragung aller Fern-Änderungen auf die lokale Arbeitskopie, solange die betroffenen Einheiten nicht auch lokal verändert wurden. Und die Konfliktauflösung würde sich auf "Schau's Dir an, so sieht Deine aus, so die geänderte aus dem Repos. Welche willst Du?" beschränken.
Ich würde in diesem Fall auch nicht unbedingt an ein "Merge" denken, wie wir es bei SVN haben. Ich habe mir eigentlich folgendes gedacht:

Wir haben in unserem Editor ja einen Haufen Kleinigkeiten, die wir für den Bau eines Levels brauchen.(Modelle, Texturen, Skripts, usw) Nun dachte ich, dass, wenn man einen Teil bearbeiten möchte, dieser Arbeitsbereich vor Zugriffen geschützt wird. Andere Benutzer können dann diesen Bereich nicht bearbeiten aber die Änderungen sehen. Nachdem die Blockkade wieder aufgehoben wird, wird dann dieser neue Bereich für alle anderen Benutzer zugreifbar.

Bei einem Modell läuft es ähnlich, das Modell wird geschützt, trotzdem kann es im Editor platziert werden, und kann nur von einem bearbeitet werden. Selbst beim Skripting könnte man das einführen.
Schrompf hat geschrieben:Ja, mir fällt da zum Beispiel die Ausleuchtung ein: der Leveldesigner verteilt und konfiguriert Lichtquellen, um bestimmte Stimmungen in bestimmten Bereichen des Levels zu erreichen. Das z.B. schreit geradezu danach, im Editor die selbe Engine zu nehmen wie im Spiel, damit der Designer das Endergebnis sofort sieht. Gleichzeitig ist aber z.B. die ganze Render-Pipeline mit Beleuchtungsmodell und Lichtorganisation eine meiner Meinung nach sehr individuelle Geschichte, für die sich nicht so einfach eine wiederverwendbare Schnittstelle finden lassen dürfte.
Jepp, gerade Schnittstellen zu finden ist hier glaube ich das Hauptproblem, oder vielmehr das einzige Problem.
Schrompf hat geschrieben:
BlueShark hat geschrieben:Aber mal so ganz am Rande, was spricht dagegen, dass man für sein Spiel die 3D-Engine des Editors verwendet?
Nichts, das ist ja der Standardweg. Bzw. andersrum: man benutzt die Spielengine auch für den Editor. Im Spiel muss es ja gut aussehen, und im Editor muss es möglichst wie im Spiel aussehen, damit die Designer nicht blind arbeiten müssen.
Ich meine aber genau das, eine frei verfügbare Engine, zu der man einen Editor mit dazugeliefert bekommt und "nur" noch alles zusammenbasteln muss. Und selbst Shader könnte man über den Editor bauen. Es ist dann natürlich keine Eierlegende Wollmilchsau, aber es würde die Arbeit der Leute sicherlich erleichtern, weil man sich dann wirklich nur noch um die Entwicklung und nicht oder nur noch wenig um die Verwaltung kümmern muss.

Mfg
BS
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: verrückte Ideen für einen Editor

Beitrag von Zudomon »

Ich finde einen Editor, der im Netzwerk/Internet arbeitet, gut. Das ganze steht schon seit Jahren auf meiner ToDo-Liste. Gedacht hatte ich mir das auch wie BlueShark, das man Bereiche sichert, und die dann bearbeiten kann. Das ganze mit Account-Verwaltung und Zugriffsrechten.
Um sich mit den Datensätzen nicht ins Gehege zu kommen, sollte man statt Namen und Dateien lieber auf GUIDs und Kataloge setzen. Ein wahnsinniger Vorteil ist, wenn man das ganze soweit realisiert hat, dass man auch Berechnungen direkt im Cluster auslagern kann, um so z.B. die Lightmaps zu berechnen.

Zu dem Thema fällt mir auch noch Second Live ein. Das ist ja quasi ein gigantischer Netzwerk-Editor.

Gruß
Zudo
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

Re: verrückte Ideen für einen Editor

Beitrag von Lord Delvin »

Warum nimmst du nicht nen ganz normalen Editor und itegrierst SVN? Dann müsstest du dein zu editierendes Objekt halt dynamisch in mehrere Files unterteilen können, aber so schlimm ist das doch nicht, oder?
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: verrückte Ideen für einen Editor

Beitrag von Zudomon »

Meinst du mich?

Falls ja:
Den Editor bau ich ja eh selbst und versuche, da wirklich die komplette Kontent-Pipeline drin zu halten.
Was eine Engine angeht, gehören einzelne Dateien für mich eher der Vergangenheit an. Es geht darum, Informationen abzulegen und zu laden, darum sollte sich die Engine kümmern und nicht der User. Die Idee dazu kam mir durch folgende Problemstellung: Man nehme zwei Entwickler, die sich ein eigenes Level bauen und jeweils zufälligerweise eine Textur ein bringen, die den gleichen Pfad und Namen hat. Wenn man nun die beide Levels in das Engineverzeichnis kopiert, dann überschreibt die eine Textur die andere. Um solche Dinge zu vermeiden bin ich dazu übergangen, grundlegend für jedes Objekt GUIDs zu benutzen. So ist es unwahrscheinlich, dass da jemals Konflikte auftreten.

Bzgl. des SVN: Man könnte mal schauen, wenn man im Netzwerk arbeitet, ob es nicht auch möglich ist, dass beide zur selben Zeit am gleichen Objekt rumarbeiten. Dazu würde mir dann folgendes einfallen: Alles was auf ein Objekt angewendet wird, sind modulare Operationen. Man behält sich, zumindest für eine gewisse Zeit die Basis. Beide Clients besitzen diese, sie ist also Synchronisiert. Nun werden die modularen Operationen darauf angewendet, wie ein Modifikatorstack. Durch einen Zeitstempel lässt sich einfach sagen, wann welche Operation durchgeführt wird. So sollten keine Konflikte oder Inkonsistenzen entstehen.
Antworten