Procedural in Game

  • Hi zusammen.


    Ich möchte mich in meinem nächsten Teilabschnitt des Erlernens der Unreal Engine mal ein wenig mit der Möglichkeit beschäftigen, dass der Spieler die Möglichkeit erhält in dem Spiel etwas zu setzen, bzw. zu bauen, und dieses dann auch Prozedural je nachdem was er baut umzusetzen.


    Ich weiß noch gar nicht, was sich da als Lernobjekt gut eignet. Aber nehmen wir mal Schienen als Beispiel, so mit Kurven, wenn er von der Seite anbaut, entsteht halt eine Weiche, oder was auch immer. Also ohne, dass er jetzt eine Weiche im Inventar haben muss oder so, sondern halt je nachdem wie er was baut.


    Mir geht es dabei noch gar nicht mal so um die Programmierumsetzung, viel mehr würde ich gerne mal wissen, wie man das bei den Modellen in Blender gut umsetzen kann. Man muss ja schließlich alles berücksichtigen, also Kurve rechts, Kurve links, Weiche rechts, Weiche links, keine Ahnung, was es sonst noch an Schienen geben könnte.


    Deswegen würde ich gerne ein paar Punkte wissen, wie man da am besten vorgeht. Zum einen müssen die Teile ja alle gut zusammenpassen, zum anderen muss es natürlich auch erweiterbar sein, falls mir irgendetwas einfällt, was ich vergessen habe.


    Gibt es da irgendwie eine goldene Regel bei der Vorgehensweise?


    Danke schon einmal im Voraus.

    • Offizieller Beitrag

    Ein Modulares System ist schwieriger als man zunächst denkt. Bei einem einfachen Boden + Wand + Decke ist das kein Problem.


    Mal angenommen du hast 2 Meter Wände. Nun kommt zu deinem System eine 1 Meter Wand dazu.

    Wenn du jetzt in einem Raum nur eine 1 Meter Wand hinzufügst, kommst du nicht man auf deinen Ausgangspunkt. (Kannst den Raum nicht schließen)

    Baust du Vertikal und horizontal eine 1 Meterwand ein, wird es noch schwieriger zum Anfang zu kommen.


    Kommen jetzt noch unterschiedliche Höhen ins Spiel, dann wird`s nochmal komplizierter.


    Was du brauchst ist nicht nur das reine Modulare System sondern auch Adapter Möglichkeiten womit der Erbauer bestimmte Probleme lösen kann und zb Höhenunterschiede ausgleichen kann oder Löcher zu stopfen.

    Diese Probleme bemerkst du wenn du dein System testest und Teile nicht zu zusammenpassen.


    Ein ding welches du berücksichtigen solltest dürfe auch die Performance sein. Wenn jemand nur 1 Meter Wänder verbaut, könnte es schnell zu Performance Probleme führen. Überleg dir, ob du wenn zb jemand 2 mal 1 Meter Wände aufeinander setzt du daraus ein Mesh machst. Die 2 Wände gegen eine Hohe wand austauscht. Baut er daneben nochmal 2 mal 1 Meter Wände könntest du daraus eine 2 * 2 Meter Wand machen. (Die 4 mal 1 Meter Wande gegen eine 1 mal 2m * 2m Wande auszutauschen) Somit hast du auf jedenfalls weniger Drawcalls.

    Die Wände kannst du dir einer Variable speichern wenn er Erbauer die obere reihe wieder löschen möchte, dass du die Wände wieder zurück in 1m Wände verwandelt. Das könnte zb passieren wenn der Erbauer Löschen aktiviert und mit der Maus über die großen Meshes hovert.


    Ich hab des des öfteren Schon Scify Level gebaut und dabei auch alles Modular aufgebaut und auch schon derartige Probleme gehabt obwohl es relativ wenige Teile waren.


    Am wichtigsten ist, dass du während der Entwicklung dein Modulares System ausgibig testest.

    Eine goldene Formel gibt es da wohl leider nicht.


    Du könntest dir auch überlegen ob du zb bei einer Treppe nur den Steher als Mesh setzt und die Trittstufen berechnst je nach Höhe die überbrückt werden soll.


    Bei Statisfactory ist es ja zb so, dass die Ausrichtung der Bauteile vom ersten Stück abhängt. Alles snapt an dein erstes Bauteil dass du im Level gesetzt hast. Man kann zwar auch wo anderst im Level eine neue Basis anfangen aber die wird dann die mit der ersten Basis zusammenpassen.

    Das ist eine Möglichkeit.

    Was vielleicht auch cool ist, wäre globales 3D Grid was für das ganze Level gilt welches man auch deaktiveren kann. Das hab ich vielen spielen vermisst.

    Bei Fallout4 war das immer ein richtiger Krampf bis alles zusammengepasst hat. X/

  • Ja, an das Fallout 4 Fiasko kann ich mich noch gut erinnern. Da war es ja schon ein Krampf, überhaupt irgendetwas zu platzieren, sogar auf flachem Boden.


    Wie gesagt, mit der Umsetzung im Programm habe ich mich noch gar nicht so extrem beschäftigt, ich muss ja erstmal die Modelle basteln.


    Die Drawcalls dürften jetzt auch nicht so schlimm werden. Ich meine, ein Teil einer Wand hat 6 Seiten, was 12 Tris entspricht. Das ist jetzt nicht gerade ein Monster an Rechenleistung. Selbst wenn es jetzt irgendwie eine Wand sagen wir aus Baumstämmen ist, das wird jetzt kein Monster aus Tris werden. Und wenn ich die Wände quasi norme, sagen wir mal Ecken, Wände alle 1 x 2,5 Meter und vielleicht noch ein Bauteil, welches Lücken bei Türen automatisch schließt, weil Türen sind in der Regel ja nicht 1 Meter breit, dann bin ich, denke, ich mal gut bedient. Dann noch Teile für Fenster, also niedrige Wände plus Wand über dem Fenster, dann sollte ich damit schon einiges abgedeckt haben. Ich will den Spieler ja auch nicht überfordern mit einer Überzahl an Möglichkeiten. Wahlweise könnte ich ja auch 1 x 0,1 x 1 Meter Blöcke nehmen, sodass man sich daraus eine Wand basteln kann. Theoretisch könnte ich ja auch ein Teil als Ecke machen, 0,1 x 0,1 x 1 Meter als Ecke, und wenn etwas daneben gesetzt wird, wird halt die Wand mit 1 x 0,1 x 1 Meter draus. Ich glaube, so werde ich es sogar machen. Bei einer Ecke muss ich da nur aufpassen, dass sich da nicht zwei Modelle überschneiden.


    Was ich aber vielmehr wissen wollte ist, wie gehe ich da bei Blender vor? Die Teile müssen ja alle zusammenpassen. Erstellt man dann da etwas mit allen Möglichkeiten in einem Projekt zusammen, wie sieht das dann mit vergessenen Erweiterungen aus? Oder geht man da ganz diszipliniert in Einzelobjekten voran?


    Und welche Teile vereinzelt man. Ich gehe da mal zurück auf die Schienen. Ergibt es da eher Sinn nur einen Schweller zu bauen, und dann halt, den man dann unter den Oberbau automatisch kopiert? Das wäre dann natürlich sehr prozedural. Oder gehe ich da lieber von einem Meter, oder auch zwei, was auch immer Schiene im Ganzen aus?


    Wie gesagt, ich muss da ja erstmal in Blender anfangen.

    • Offizieller Beitrag

    Ich würde erstmal alles in einer Szene bauen und dann kannst du dort testen ob alles zusammen passt. Bei einfachen Blöcken ist das eh kein Problem. Die Meshes würde ich dann einzeln als FBX exportieren, mittig aufs Grid setzen die Pivots mittig nach unten setzen und die Transforms resetten.


    Eine Schiene ist ja sehr simpel da könntest du das Profil entlang einer Spline extrudieren. Und die Balken mit einem Mindestabstand

    berechnen. (Einschiedbahn oder 2 Splines bei einer normalen Schiene)

  • Kleine Nachfrage. Wenn ich mal der Idee meiner Gleise folge, geradeaus ist ja kein Problem. Aber wenn der Spieler so baut, dass eine gültige Weiche entsteht, werden dann alle Schienenteile, die es betrifft, durch die Weiche ausgetauscht?


    Ich frage deshalb, weil irgendwie muss ich dann ja das "Problem" berücksichtigen, wenn ein Gleisteil aus einem Schweller und halt ein Stück Laufschiene besteht, dann ist eine Weiche ja ungleich größer, das kann man ja nicht auf einen Schweller runterbrechen. Irgendwie muss ich das dann ja auch berücksichtigen in der prozeduralen Berechnung.


    Oder kann man das auch irgendwie anders lösen?