Straßen Spline Blueprint - Mesh wiederholen

  • Hallo zusammen,


    ich habe gerade dieses (offizielle) Tutorial benutzt, um einen "Straßengenerator" zu erstellen. Also um eine Straße anhand einer Spline zu generieren.


    Was im Video aber nicht gezeigt wurde, ist eine Funktion mit der das Mesh zwischen den einzelnen Punkten wiederholt und nicht gestreckt wird. Aktuell werden nämlich die Markierungen in der Mitte einfach lang gezogen, was nicht sonderlich schön aussieht:


    Ich möchte die Punkte nicht immer in gleichen Abständen setzen um dieses Problem zu umgehen, dann kann ich ja gleich das Mesh 100 mal nacheinander kopieren und anordnen.


    Kennt hier jemand eine Möglichkeit? Das Mesh besteht aus zwei Materialien: Dem Asphalt und der Markierung. Wäre es sinnvoller eine gemeinsame Textur zu nehmen und diese einfach zu wiederholen?



    Ich freue mich über jede Antwort.


    Vielen Dank und Grüße
    Leon

    • Offizieller Beitrag

    Mal angenommen du hast ein Strassenstück dass 3 *3 Meter groß ist mit einer Strassentextur die 100% vom UV Space einnimmt. Die Textur wäre beispielsweise 1024* 1025 Pixel groß.
    Alles was sich außerhalb vom UV space befindet wird gekachelt.
    Ist dein Mesh also 3*3 Meter groß und deine UV nimmt 100% in der Höhe des UV Spaces ein und 200% in der breite so wird deine Textur 2 mal gekachelt. (Dies für das Grundverständnis)


    Die Idee die Textur zu kacheln ist auf jeden Fall der richtige weg dies kannst du im Material durch den "TexCoord" erreichen, dort lässt sich die Textur durch Utiling (Links,Rechts) und VTiling (oben,runter) wiederholen.
    Der Default wert liegt bei 1! ist deine Strasse also 3 *3 Meter groß und du würdest sie auf 3 * 4,5 Meter erhöhen so müsste das U Tiling = 1,5 und das Vtiling weiterhin bei 1 Liegen. Bei einer Größe von 3*6 Meter: U = 2 und V = 1

  • @Sleepy Ich glaube nicht, dass es das ist, was @TutePlays möchte.
    Vielmehr will er, dass sein Straßenelement automatisch am Spline entlang dupliziert/Instanziert wird.
    Diese Funktion wurde aber, wie er schon sagte, nicht im Video erwähnt und somit zieht und strecht sich das eine Straßenstück der Spline entlang (Wie man auch in seinem Bild sieht), obwohl es eigentlich vervielfältigt werden soll. Hoffe, dass meine Erklärung noch mal etwas verständlicher ist. Mit Der Texturengröße, oder so, sollte dieses Thema weniger zu tun haben, scheint mir.

    • Offizieller Beitrag

    Vielmehr will er, dass sein Straßenelement automatisch am Spline entlang dupliziert/Instanziert wird.

    Ich glaube nicht dass das funktioniert den beim Instanzieren oder Kopieren wird das selbe aneinander gereiht. Ich nehme aber mal an das jedes Strassenteil anderst sein soll und sich an der Spline anpassen soll.


    Beim Duplizieren oder Instanzieren wird auch jedesmal ein neues Mesh erzeugt und somit jedesmal ein Drawcall erzeugt. Bei einer sehr langen Strassen wären das sehr schnell hunderte Strassen und somit hunderte Drawcalls generiert.
    Erzeugt man ein Strassen stück und würde dieses in die Länge skalieren zb der X Scale Faktor auf 2: Dann wäre das Mesh doppelt so lang aber die UV würde gleich bleiben und wäre deswegen gestreckt.
    Bei einem Mesh mit 1 * 2 Meter wäre die UV dann immer noch 1024 * 1024 Pixel groß auch wenn das Mesh doppelt so lang ist.
    Erhöht man dagegen aber den U Faktor um das Doppelte so wäre diese Diskrepanz wieder ausgegliche.


    Das war mein Gedanke

  • Zuerst einmal bedanke ich mich bei euch Dreien für eure Beiträge.

    Vielmehr will er, dass sein Straßenelement automatisch am Spline entlang dupliziert/Instanziert wird.

    Ob man es über die Texturierung oder das Duplizieren der Elemente löst ist mir eigentlich egal.


    Ich kenne es aus Blender, dass man ein Mesh anhand einer Bezier Curve wiederholt. Auf diese Weise habe ich auch mal eine Straße gebaut. Hier gibt es aber 2 Probleme: Das einzelne Mesh wird nicht gebogen, wobei es zu harten Kanten in jeder Kurve kommt und eine Straße in Blender zu bauen um sie anschließend in die UE zu importieren halte ich für überhaupt nicht sinnvoll, da man dann nur sehr umständlich Änderungen vornehmen kann.


    Was ich vergas zu erwähnen ist, dass ich zwischen einzelnen Punkten der Spline bestimmte Dinge wie einen Bordstein oder eine Leitplanke hinzufügen möchte. Wie das funktioniert wurde zwar auch im Video gezeigt, jedoch gibt es hier ebenfalls das Problem, dass sich die Leitplanke dann in die Länge zieht oder zusammenschrumpft. Daher denke ich, dass der Weg mit der Texturierung doch nicht der richtige ist.



    Schau mal hier.
    Splines


    Glaube das dritte Video sollte deine Frage beantworten.

    Leider nicht. In dem Video wird nicht mit unregelmäßigen Texturen gearbeitet, weshalb erst bei genauerem hinsehen auffällt, dass sich hier das Mesh genau wie bei mir vom einen Punkt zum nächsten streckt. In den anderen drei Videos wird das Problem auch nicht behandelt.



    Gibt es denn einen Weg um das Mesh immer nacheinander zu duplizieren? Und wie ist es, wenn die Straße aufhören soll aber dann doch noch ein paar Zentimeter weitergeht, da das Mesh noch nicht zu Ende war. Ist zwar ein auf den ersten Blick etwas nebensächliches Problem, doch es könnte beim bauen einer Kreuzung durchaus auftreten.


    Und in der Kurve: Wird das Mesh durch strecken und stauchen dann verzerrt oder überlappen sich die einzelnen Elemente dann in den Ecken? Denn woher soll es denn wissen wie weit um die Kurve verzerrt wird bevor das nächste Element kommt?



    Vielen Dank für eure Hilfe!

  • So wie ich es verstehe, ist ein Spline Mesh in Unreal ein Mesh, dass zwischen 2 Punkten über ein Spline verzerrt wird.


    Die Spline/Bezier-Curve bei Blender funktioniert ja so, dass man quasi ein Spline verlegt, und es dann mit einem Array von Meshes füllt. Durch das Array wird ja quasi ein großes Mesh erstellt, was dann entlang des gesamten Splines verzerrt wird. und nicht nur zwischen 2 Punkten. Und das möchtest du jetzt in Unreal auch erreichen?


    Die Spline Meshes in Blender sind wohl etwas komplexer, als die in Unreal, somit bist du da gerade an eine Grenze gestoßen.


    Ich könnte mir allerdings vorstellen, dass folgendes Funktioniert:
    Erstelle mehrere Meshes (Kleine, Lange) für verschiedene Extremfälle. Du kannst sogar extra Meshes für Kurven mit speziellen UVs erstellen. Allerdings funktioniert das nur gut, wenn die Kurven einheitlich sind.


    Eventuell könnte man es mit Hilfe eines komplizierten Shaders machen. Du könntest die Spline Positionen/Tangenten in den Ein- und Ausgangspunkten irgendwie zusammenrechnen, und dadurch auf die "Verzerrung" um bestimmte Axen schließen, und entsprechend einen Parameter im Material verändern, der dann die Textur rechts oder links / gesamt strecken kann. Allerdings wäre das, selbst wenn es funktioniert, sehr rechenintensiv.

  • So wie ich es verstehe, ist ein Spline Mesh in Unreal ein Mesh, dass zwischen 2 Punkten über ein Spline verzerrt wird.

    Genau.


    Die Spline/Bezier-Curve bei Blender funktioniert ja so, dass man quasi ein Spline verlegt, und es dann mit einem Array von Meshes füllt. Durch das Array wird ja quasi ein großes Mesh erstellt, was dann entlang des gesamten Splines verzerrt wird. und nicht nur zwischen 2 Punkten. Und das möchtest du jetzt in Unreal auch erreichen?




    Die Spline Meshes in Blender sind wohl etwas komplexer, als die in Unreal, somit bist du da gerade an eine Grenze gestoßen.

    Gibt es denn keine Array Funktion in der UE, die man mit einer Spline kombinieren kann?



    Ich könnte mir allerdings vorstellen, dass folgendes Funktioniert:
    Erstelle mehrere Meshes (Kleine, Lange) für verschiedene Extremfälle. Du kannst sogar extra Meshes für Kurven mit speziellen UVs erstellen. Allerdings funktioniert das nur gut, wenn die Kurven einheitlich sin

    Das wäre ja ein Baukastenprinzip, welches ich nicht für sinnvoll halte, auch da die Kurven sicherlich nicht überall den gleichen Radius haben werden.



    entuell könnte man es mit Hilfe eines komplizierten Shaders machen. Du könntest die Spline Positionen/Tangenten in den Ein- und Ausgangspunkten irgendwie zusammenrechnen, und dadurch auf die "Verzerrung" um bestimmte Axen schließen, und entsprechend einen Parameter im Material verändern, der dann die Textur rechts oder links / gesamt strecken kann. Allerdings wäre das, selbst wenn es funktioniert, sehr rechenintensiv.

    Das klingt mir irgendwie nicht nach der Lösung. Ich bin ja nicht der erste, der in der UE eine Straße erstellen will und kann mir nicht wirklich vorstellen, dass es da keinen einfacheren Weg gibt.



    Vorhin habe ich dieses Video gefunden. Dort funktioniert es zwar so wie ich es mir vorstelle, jedoch, wenn man mal gegen Ende des Videos schaut, sind hier die Markierungen ziemlich unregelmäßig. Obwohl ja neue Markierungen entstehen, wenn man die Spline verlängert.



    Edit: Ich glaube ich habe die Lösung gefunden. Im englischen Forum der UE hat jemand ein Blueprint mit beeindruckenden Funktionen veröffentlicht. Das kann Dinge, an denen ich bei der Erstellung bestimmt verzweifelt wäre.
    Werde das nun ausprobieren und euch berichten. Ansonsten kann der Thread wegen mir geschlossen werden.


    Ich bedanke mich für eure zahlreichen Beiträge.

  • Ich hab das Problem mit meinem River-Spline auch, mach einfach mal die Abschnitte des Splines geringer, auf einer Strecke wo 2 Splinepunkte sind, machst dann eben 3^^
    Wobei es bei meinem River-Spline nicht so schlimm aussieht, da fließt der Fluss dann nur schneller oder langsamer, je nachdem ob weniger oder mehr Splinepunkte da sind.

  • Es gibt zwei Möglichkeiten das Problem zu lösen. Entweder man lässt einen Spline automatisch aller x-Units einen Punkt erstellen oder man geht den Weg von Sleepy. Auch dazu hab ich ein Vid gemacht. Bei der UV-Lösung gilt allerdings, dass Kurven etwas kniffliger werden. Gerade Abschnitte lassen sich aber so lösen.


    Es spielt halt auch eine Rolle, ob du ein Mesh zwischen zwei Punkten aufspannst oder eine Component an einem Punkt hinzufügst. Das ist definitiv nicht das selbe, weshalb ich auch mal die Vids da gemacht habe. Etwas zwischen zwei Punkten aufspannen ist meist für Kabel zu gebrauchen. Wenn du aber etwas konstruieren willst (Straßen, Häuser, Bäume), dann ist das natürlich der falsche Weg. Teilabschnitte sind an Punkten zu setzen, die Abstände der Punkte richten sich nach der Länger der Straße und nach der Größe des Tiles.


    Beide Varianten der Splinegenerierung lassen sich A) vermischen/kombinieren und B) automatisieren/berechnen.


    Bei Kabeln werden Anfangs und Endpunkt seperat vergeben. Das Zwischenstück (Kabel) wird aufgezogen, wobei die Texturierung im LocalSpace so programmiert wird, wie Sleepy das schon angedeutet hat.