Drawcalls / Merge Actors

  • Servus Leute,


    falls es eine bessere Abteilung für meine Frage als hier (Entwicklung-Game Design) geben sollte - einfach verschieben.


    Man versucht ja immer die Drawcall so gering wie möglich zu halten um performanter zu sein.

    Jetzt gibt es ja diese Modular-Building-Assets zum Downloaden bzw. man hat evtl. selbst solche Module erstellt um flexibler zu sein.


    Wenn ich das ganze mit den Drawcalls (im Wiki) richtig verstanden habe, dann ist jeder Cube, jeder Felsen und jedes Element des Modularen Gebäudes ein Drawcall. Im Umkehrschluß müsste dann ja ein über "Merge Actors" zusammengefügtes Modular-Building als ein einziger Drawcall behandelt werden.

    Könnte man das dann soweit auf die Spitze treiben, dass man z.B. sagt, es werden bestimmte Bereiche einer Stadt (die ja sowieso auf einmal geladen werden sollen) zusammenfügt? Oder man merged alle Straßen im Level / Bereich oder Abschnitte einer Felswand?


    Falls ich richtig gelesen habe, sollte man auch (kenn jetzt nicht die richtigen Begriffe) Bereich festlegen, in denen festgelegt wird in welcher Entfernung zum Spieler die darin enthaltenen Assets überhaupt zum ersten mal geladen werden - in Zusammenarbeit mit den LOD.


    Alles drei zusammen (LOD, Actor Merge, Bereiche für Drawcalls), gut aufeinander abgestimmt, sollten ein Spiel doch schon merkbar performanter machen.


    Weiß zufällig jemand gerade wie die Statistikoption heißt, bei der man sich die Drawcalls anzeigen lassen kann?

    Wie viele Drawcalls sind durchschnittlich noch hinnehmbar bzw. haben aktuelle Spiele?

    Wie verhält es sich bei Splines? Wenn ich ne Straße / Mauer / Zaun mittels Splines erstelle, wird dies dann als ein einziges Objekt betrachtet oder schaut die Engine wieviele Objekte brauch ich auf die Länge des Splines und hat dann z.B. 70 Drawcall (bei einer Mauer)?


    Bin in der ganzen UE4-Geschichte noch ein totaler Noob und versuch vor allem über YouTube so viel wie möglich zu lernen / abzuschauen.


    Danke für eure Hilfe.

    Grüße

  • Du kannst schon div. Objekte eines Modularen System zu einem Objekt mergen .

    Das reduziert dann auch natürlich die Drawcalls.

    Allerdings würde ich NICHT einen ganzen Bereich geschweige denn einen Stadtteil mergen. Denn die Engine Rendert alles was du siehst auch wenn es nicht im Bild ist.

    Beispiel: Du schaust nur das Erdgeschoss eines Hauses an. Die anderen Stockwerke sind aktuell nicht im Bild. Dann wird auch nur das erste Stockwerk berechnet. Wenn aber das gesamte Haus nur ein Objekt ist dann wird alles komplett berechnet und dass kann auch auf die Performence gehen.


    Man müsste da also einen Mittelweg finden. Nur das zusammenführen was auch Sinn macht.

  • Beitrag von 3D Rasputin ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Danke 3D Rasputin,


    werde ich mir am WE mal in Ruhe anschauen. Die beiden Begriffe kannte ich bis jetzt noch nicht.


    Bei meinem Projetk (meine Heimatstadt im Mittelalter) wird es viele Häuser geben.

    Ist man in den Straßen und Gassen unterwegs, so werden ja immer irgend welche weiter hinten liegenden Gebäude von anderen Verdeckt. Alle Häuser sind somit nie sichtbar und müssten dann ja

    auch nicht auf einmal berechnet/dargestellt werden.

    Da könnte man doch schon einiges an Performance rausholen können.


    Ich muss mal schauen ob ich was finde im Bezug auf Splines. Ob dann z.B. eine Stadtmauer/Straße als ganzes betrachtet wird oder außerhalb des sichtbaren Bereiches "abgeschnitten" wird.


    Danke für den Link.

    Vlt. hat jemand anderes noch eine Idee wie sich Splines verhalten.

  • 3D Rasputin hat das schön erklärt.

    Du darfst nicht vergessen das nicht nur Meshes drawcalls verursachen sondern auch Materallien, Schatten, Partikel und alles andere was auf deinem Monitor dargestellt werden muss.

    Ist Drawcall ist ja im Prinzip nichts anderes als ein Befehl deiner CPU an die GPU etwas zu berechnen oder zu zeichnen. Es können entweder sehr viele Briefe sein (VIele Drawcall) oder ein Großer Brief. (Wenige Drawcalls)

    Damit der große Brief aber von CPU an die GPU transportiert werden kann, brauchst du einen Starken und Großen Postboten der aussieht wie Arnold Schwarzenegger (Guter Rechner bzw gute Grafikkarte)

    Sonst könnte es zu lange dauern bis der Brief ankommt und du hast wenig FPS.


    Wie Rasputin schon sagte: Manchmal sind mehr Meshes die nicht alle gezeichnet werden müssen mehr als ein Riesen mesh das ein riesen Klotz ist.


    EDIT: Auch wenn du die Meshes in der Unreal Mergen tust, werden die Dateien sehr schnell riesen groß.

    Bei Tablets ist mir bereits bei 2 GB große Dateien die Engine um die Ohren geflogen.

    Das geht sehr schnell vor allem können die Lightmaps dann auch riesen riesen groß werden.

    Mit tut jeder Mensch Leid, der nicht genug Phantasie hat, um ein Wort mal so und mal so zu schreiben.

    Mark Twain

  • Ok Sleepy,

    das leuchtet mir alles soweit ein.


    Wie könnte man dann solche Modular-Buildings ressourcenschonend in ein Mesh überführen?

    Das zusammengesetzte Haus nach z.B. Blender exportieren dort "verschmelzen" und wieder zurück-exportieren? Geht sowas überhaupt? Hat man dann ein kleineres Mesh? Was passiert mit den Texturen der Einzelteile - werden die mit ex- und importiert?


    Da meine Kenntnisse in Blender irgendwo im Minusbereich liegen, sind solche Modular-Buildings aktuell meine einzige Möglichkeit verschiedenste Häuser zu erzeugen.


    Wenn ich jetzt aus z.B. 30 Einzelteilen mir 10 verschiedene Häuser zusammenbastle - werden dann 10x30 Teile - also 300 (inkl. Textur u. Co.) geladen oder eben nur diese 30 Teile und intern mehrfach verwendet (ich hoffe, das war verständlich)?


    Wie gesagt, bin da noch voll der Noob drin (UE4 und Blender) - daher die vielen Fragen.

  • Was ist für dich den ein Modularessystem ?

    Im Prinzip brauchst du ein paar Teile:


    1.Wand

    2.Wand mit Tür (Loch) Tür kann ein separates Mesh sein

    3.Wand mit Fenster (Loch) Der Fenster Rahmen und die Scheibe kann ein separates Mesh sein.

    4. Du brauchst ne Ecke nach innen und eine Ecke nach außen.


    So:

    1.Nehmen wir mal Basis deine Wand: die ist ein einfacher cube mit einer UV für beide Seiten.

    2.Dein Tür Wand hat die selbe UV mit der selben Textur es wird einfach nur das Loch heraus geschnitten. Somit brauchst du nur eine sich wiederholende und kachelbare Textur.

    3.Bei der Fenster Wand das selbe. selbe UV, selbe Textur nur mit einem Loch für das Fenster in der Mitte.

    4.Bei den Ecken ebenfalls das selbe.



    Eventuell kannst du für innen und außen ja auch unterschiedliche Texturen verwenden.


    Das ist für mich ein kleines modulares System


    Das zusammengesetzte Haus nach z.B. Blender exportieren dort "verschmelzen" und wieder zurück-exportieren? Geht sowas überhaupt? Hat man dann ein kleineres Mesh? Was passiert mit den Texturen der Einzelteile - werden die mit ex- und importiert?

    Kann man machen und geht auch aber es macht keinen unterschied wo du deine Meshes verschmelzen tust. Texturen sind immer separate Dateien eine PNG oder TGA zum Beispiel.

    Auch die könntest du exportieren. Die Frage ist aber wieso du die Texturen überhaupt exportieren willst?

    Wenn du schon aus Unreal exportieren willst dann reicht doch das nackte Mesh ohne Texturen.


    Da meine Kenntnisse in Blender irgendwo im Minusbereich liegen, sind solche Modular-Buildings aktuell meine einzige Möglichkeit verschiedenste Häuser zu erzeugen.

    Ich rate dir: setz dich hin und lern Blender. Ich denke das ist viel einfacher als deinen komplizierteren Weg wo du deine nicht Kenntnisse einfach mit Tricken umschiffen tust.


    Man schmeißt ja auch keine Atombombe auf einen Wald wenn man Rehe jagen möchte, nur weil man mit einem Gewehr nicht trifft.

    Deine Variante mit dem hin und her exportieren ist viel komplizierter und auf dauert wirst du so so oder so kein Spiel entwickeln können.

    Wenn ich jetzt aus z.B. 30 Einzelteilen mir 10 verschiedene Häuser zusammenbastle - werden dann 10x30 Teile - also 300 (inkl. Textur u. Co.) geladen oder eben nur diese 30 Teile und intern mehrfach verwendet (ich hoffe, das war verständlich)?

    Bei meinem Beispiel oben hättest du genau eine Textur für alle Wände, ganz egal ob es eine Fensterwand, Tür wand Ecke oder sonst ein Teil ist.

    Würde noch ein Dach hinzukommen, gäbe es eine weitere Textur für das Dach (zb Holzschindeln)

    Für den Fensterrahmen brauchst du auch eine Holztextur die du aber auch für die Tür verwenden kannst.


    Lerne:

    1.Blender

    2.Modellieren mit den Grundkörper Wand, Wandmit Loch usw

    3.UV Mapping


    Dann kannst du im grunde alles was du brauchst.

    Mit tut jeder Mensch Leid, der nicht genug Phantasie hat, um ein Wort mal so und mal so zu schreiben.

    Mark Twain