Bessere Performance bekommen

  • Hallo,


    ich muss mich leider wieder mit einer Frage an euch wenden.

    Probiere seit einiger Zeit eine kleine mittelalterliche Stadt aufzubauen, hat alles bisher super geklappt, nur seit Wochenende läuft's nicht mehr.

    Im Litmodus habe ich durchwegs immer 20FPS im Unlitmodus ca. 100.

    Objektanzahl auf der Map beläuft sich bisher auf etwa 71.000 Objekte und für das Build braucht er ca. 50 Sekunden. Habe bei allen Objekten die Min. Ligthmapresolution von 128 auf 64 reduziert. Kein Effekt.

    Das Problem das ich nämlich habe ist, dass immer wenn ich in den Playmodus gehe stürtzt das Programm ab (Keine Rückmeldung im Taskmanager, Swarmmanager läuft weiterhin).

    Ich nehme an, dass es an den FPS liegt, weiß aber nicht wie ich diese erhöhen kann. Die Anzahl an Objekten sollte dabei nicht reduziert werden, sondern eher noch vervierfacht, damit alles steht, ich habe nämlich bisher nur Mauern, keine Bäume, keine Steine und keine Leute.

    Das Build läuft an sich ziemlich schnell, find ich jedenfalls, habe auch keine Ahnung wie der PC auf eine Objektanzahl von 70.000 kommt, habe sicher weniger Wände als dies. Vielleicht kann mir ja jemand mit ein paar Tricks zu Rate gehen.


    Auf jeden Fall, euch allen frohes Schaffen und alles Gute


    Marc

  • Keine Rückmeldung heißt nicht gleich, dass die Engine abschmiert, wenn sie abschmiert, bekommst ein Fenster angezeigt, dass sie abgeschmiert ist, solang sie noch läuft, wird noch was gerechnet.


    Ich hatte bei meinem letzten Spiel, Tests laufen, wo 1000 und mehr Gegner mit Skeletal und Animationen über die Map rennen, mit teils nur 8 FPS und die Engine hat sich nicht aufgehängt^^


    Was sind das für Objekte?

    StaticMeshes oder BPs?

    Wenn BPs, läuft in jedem davon ein Tick-Event?

    Wird irgendwo was automatisch gespawnt, auch wenn kein Spieler in der Nähe ist?


    Schon mal versucht, das Directional-Light auf "Moveable" zu setzen?


    Wenn du Play drückst, startest du dann im "Selected Viewport", "PIE" oder "Standalone Game"?


    Es gibt viel woran es liegen kann, ohne mehr Infos ist es wie die Nadel im Heuhaufen^^

    • Offizieller Beitrag

    Im Litmodus habe ich durchwegs immer 20FPS im Unlitmodus ca. 100.

    Welchen Litmodus meinst du in ? Das rumfahren im Viewport oder Lit ingame ohne Texturen ?


    Objektanzahl auf der Map beläuft sich bisher auf etwa 71.000 Objekte und für das Build braucht er ca. 50 Sekunden.

    Das muss nicht zwangsläufig ein Problem sein, Worauf es ankommt ist wie viele Objekte in einem Frame im schlechtesten Fall angezeigt wird. Werden zb 1000 Gegner auf einmal gespawnt gibts im gesamten Spiel 1000 Gegner die man aber niemals gleichzeitig sieht.

    Habe bei allen Objekten die Min. Ligthmapresolution von 128 auf 64 reduziert. Kein Effekt.

    Die Lightmap hat damit nichts zu tun den die Lightmap wird vorberechnet, das kann Stunden oder auch Tage dauern beeinträchtigt die performance aber überhaupt nicht. Kannst du also ruhig höher stellen und dauert dann eben länger.

    Das Problem das ich nämlich habe ist, dass immer wenn ich in den Playmodus gehe stürtzt das Programm ab (Keine Rückmeldung im Taskmanager, Swarmmanager läuft weiterhin).

    Ich nehme an, dass es an den FPS liegt, weiß aber nicht wie ich diese erhöhen kann. Die Anzahl an Objekten sollte dabei nicht reduziert werden, sondern eher noch vervierfacht, damit alles steht, ich habe nämlich bisher nur Mauern, keine Bäume, keine Steine und keine Leute.

    Das Build läuft an sich ziemlich schnell, find ich jedenfalls, habe auch keine Ahnung wie der PC auf eine Objektanzahl von 70.000 kommt, habe sicher weniger Wände als dies. Vielleicht kann mir ja jemand mit ein paar Tricks zu Rate gehen.

    also sehr langsam oder laggy sind immer Performance Probleme. Bei Crashes bezweifel ich aber das dies auf Performance Probleme zurück zu führen ist.


    Ich würde wie folgt vorgehen:


    1.Rausfinden ob es an den Meshes oder Materials liegt. Gut speichern und dann allle Materials von alles meshes runterhauen. Sollte es dann gehen, weißt du das es an den Materllien liegt. Sollte es immer noch nicht gehen sind die Meshes in der änderen Auswahl.

    2.Nun löscht du einmal die hälte der Meshes, teste es dann nochmal. Sollte es gehen liegt es an einem der Meshes die du gelöscht hat, geht es immer noch nicht, öffnest du das Probjekt nochmal neu und löscht die andere Hälfte.

    Ich weiß das ist nervig und Zeitintensiv aber anderst wirst du den Übeltäter nicht finden.

  • Welchen Litmodus meinst du in ? Das rumfahren im Viewport oder Lit ingame ohne Texturen ?

    Den Litmodus im Viewport.


    Ihr werdet mich jetzt verfluchen;), aber ich habe das Problem glaub ich gefunden. Kann jedenfalls wieder im Playmodus herumspazieren, ohne dass es abstürzt, denn ...

    trara ...

    ich hatte den Playerstart nicht im gleichen Level, wie die Startupmap :laughing:. Hat zwar vorher nicht gesponnen, habe das geändert und nun funktioniert es wieder. Hoffe dass war das Problem, ansonsten hört ihr wieder von mir.

    Sehr großen Dank an Butterfly Games und Sleepy die sich, finde ich sehr um die Community bemühen. Bei meinem nächsten Bier, trink ich für euch eins mit. Danke, danke.


    Alles Gute und noch frohes Schaffen,

    euer Mac

  • Im Viewport habe ich mich bisher immer bewegen können, aber eben nicht im Playmodus. Wenn ich im Viewport die FPS-Anzeige anmache, habe ich glaub ich gleiche Werte der FPS wie wenn ich mich im Playmodus bewege.

    Vorausgesetzt ich habe den Lit-Modus im Viewport an.

    Bei Unlit im Viewport habe ich fast vierfach so gute Frame-Werte wie im Litmodus.

    Weiß nicht ob das generell so ist, oder eben gerade bei mir. Habe dazu keine Vergleichsdaten.

    • Offizieller Beitrag

    Nur im Playmodus wird Schatten und Licht richtig berechnet. Es könnte ja auch sein du Spawnst im PLaymodus gegner, dies ist im Viewport auch nicht der Fall.


    Auf den Anzeigen im Viewport darfst du dich nicht verlassen. Nur eins ist sicher, wenns im Viewport schon nicht geht, wirds im Playmodus erst recht nicht gehen. :laughing:


    Was du aber machen könntest wenn du ganuer nachforschen willst:


    Teile dein Level in verschiedene Bereiche auf und splite diese in Sublevels.

    zb. Das Terrain in ein Sublevel, alle Bäume in ein Sublevel, alle Gegener in ein Sublevel usw


    Nun lädst du diese Sublevel beim Levelstart manuell!


    Sobald du nun Probleme hast, lädst du beim Levelstart nur das Terrain, wenn das klappt, per Tastendruck das nächst Sublevel usw. Bis die Probleme auftretten. Das weißt du welchem Sublevel (in welchem Bereich) die Probleme auftretten.


    Hört sich kompliziert an aber das Laden und erstellen der Sublevels ist echt nicht so schwierig und fürs Debugging nicht verkehrt.

  • Nur im Playmodus wird Schatten und Licht richtig berechnet. Es könnte ja auch sein du Spawnst im PLaymodus gegner, dies ist im Viewport auch nicht der Fall.

    Ganz so stimmt das nicht, ich kenne mich nicht aus damit, wie es mit nem Static Light aussieht, da ich das nie benutze, mein Directional-Light wird immer auf "moveable" gesetzt...


    Bei nem "moveable" Directional-Light wird auch im Viewport der Schatten richtig berechnet, ohne es vorher "backen" zu müssen^^


    Selbst wenn es heißt, dass das Directional-Light als "moveable" mehr Performance frisst (womit ich bisher kein Problem hatte), wäre mir das lieber, als wenn ich im Viewport alles einstelle und danach teste und die Schatten viel zu verschwommen sind...


    Was du aber machen könntest wenn du ganuer nachforschen willst:


    Teile dein Level in verschiedene Bereiche auf und splite diese in Sublevels.

    zb. Das Terrain in ein Sublevel, alle Bäume in ein Sublevel, alle Gegener in ein Sublevel usw


    Nun lädst du diese Sublevel beim Levelstart manuell!

    Nicht vergessen zu erwähnen, dass du dafür "World Composition" aktiviert haben musst^^


    Sehr großen Dank an Butterfly Games und Sleepy die sich, finde ich sehr um die Community bemühen. Bei meinem nächsten Bier, trink ich für euch eins mit. Danke, danke.

    Ein Daumen hoch ist bei nem hilfreichen Post immer gern gesehen^^

    Übrigens, mein Schmetterling wird auseinander geschrieben, ist nämlich kein Schmetterling, sondern eine Butter Fliege, hehe

    • Offizieller Beitrag

    Ganz so stimmt das nicht, ich kenne mich nicht aus damit, wie es mit nem Static Light aussieht, da ich das nie benutze, mein Directional-Light wird immer auf "moveable" gesetzt...


    Bei nem "moveable" Directional-Light wird auch im Viewport der Schatten richtig berechnet, ohne es vorher "backen" zu müssen^^


    Selbst wenn es heißt, dass das Directional-Light als "moveable" mehr Performance frisst (womit ich bisher kein Problem hatte), wäre mir das lieber, als wenn ich im Viewport alles einstelle und danach teste und die Schatten viel zu verschwommen sind...

    Das ist schon richtig.

    Die Darstellung im Viewport sowie die Darstellung als Moveable sind beides Echtzeit Berechnungen. Ich denke aber du würdest mir trotzdem zustimmen das die Darstellung im Playmode besser aussieht als die im Viewport oder ? Ic h bin jederfalls der Meinung das die Viewport Darstellung nicht so gut aussieht als wenn man auf play drückt.

    Beim Baken muss der Schatten eben nicht erst in Echtzeit berechnet werden.

    Was das Baken an sich angeht kann ich eigentlich nur eine gute Grafikkarte mit einem GPU Baker empfehlen. Die Ergebnisse sehen besser aus und die Bakezeit sicherlich um 90% verkürzt und ich übertreibe dabei nicht.

  • Ich denke aber du würdest mir trotzdem zustimmen das die Darstellung im Playmode besser aussieht als die im Viewport oder ? Ic h bin jederfalls der Meinung das die Viewport Darstellung nicht so gut aussieht als wenn man auf play drückt.

    Kommt immer drauf an wie man sich im Viewport bewegt und wie im Spiel^^

    Entwickelt man ein Third- oder First-Person, macht es nen kleinen Unterschied, weil man viel näher dran ist, während man in nem Top-Down, eigentlich das gleiche sieht.


    Natürlich wird im Viewport kein Postprocess gezeigt, falls man das direkt mit der Camera macht und die ganzen Collisions, sowie Splines, etc. (falls im Viewport aktiviert), sieht man auch nicht, aber sonst seh ich da eigentlich keinen Unterschied, in meinem neuen Projekt wird sogar der Wolken-Schatten des Directional-Light (Light Function) im Viewport dargestellt^^


    Beim Baken muss der Schatten eben nicht erst in Echtzeit berechnet werden.

    Was das Baken an sich angeht kann ich eigentlich nur eine gute Grafikkarte mit einem GPU Baker empfehlen. Die Ergebnisse sehen besser aus und die Bakezeit sicherlich um 90% verkürzt und ich übertreibe dabei nicht.

    Bedeutet das dann auch, dass bewegliche Dinge, wie z.B. Gegner einfach keinen Schatten haben?


    Die Performance könnte wohl besser sein, weiß ich nicht, hab ich nie getestet, wobei ich mit meinem Rechner auch immer bei 120 FPS (im Viewport) bin, egal in welchem Projekt...

    • Offizieller Beitrag

    Bedeutet das dann auch, dass bewegliche Dinge, wie z.B. Gegner einfach keinen Schatten haben?

    Alles was stätic ist, wird gebaked und was static ist, bewegt sich auch nicht.

    Du könntest auch alles auf Static setzen, nicht baken dann hätten diese Meshes auch keine Schatten.

    Die Performance könnte wohl besser sein, weiß ich nicht, hab ich nie getestet, wobei ich mit meinem Rechner auch immer bei 120 FPS bin, egal in welchem Projekt...

    Ja klar aber du willst doch dass dein Spiel auch auf anderen Rechnern läuft zumindest wenn du es verkaufen willst. Umso kleiner der Rechner der benötigt wird, umso größer ist deine Zielegruppe.

  • Alles was stätic ist, wird gebaked und was static ist, bewegt sich auch nicht.

    Du könntest auch alles auf Static setzen, nicht baken dann hätten diese Meshes auch keine Schatten.

    Was ist mit nicht-static Zeug? Wird das weiter berechnet?
    Wenn man nen Day-Night-Cycle drin hat, sieht man dann bei baked Light auch wie die Schatten sich bewegen?

    Wenn ein Baum gefällt wird, der nur static ist (Foliage), bleibt der Schatten stehen wenn der Baum weg ist?

    Wird der Schatten eines Baumes mit simuliertem Wind auch bewegt oder bleibt der stumm stehen?


    Ja klar aber du willst doch dass dein Spiel auch auf anderen Rechnern läuft zumindest wenn du es verkaufen willst. Umso kleiner der Rechner der benötigt wird, umso größer ist deine Zielegruppe.

    Also mein erstes veröffentlichtes Spiel läuft bei nem Freund auf nem schlechten Lappi auf max Settings, mit moveable Directional-Light mit 60FPS^^


    Man muss auch bedenken, dass ein Spiel in der Engine schlechter läuft, als wenn es fertig gepackt ist^^

    Hab dadurch schon Unterschiede von über 200% gehabt...

    • Offizieller Beitrag

    Was ist mit nicht-static Zeug? Wird das weiter berechnet?

    Beim Static Mesh muss man ein paar dinge wissen.

    1.Beim Importieren von einem Mesh kannst du doch dort ein Haken setzen bei generate Lightmap UV (oder so ähnlich) wird dieser Haken gesetzt, generiert Unreal aus der Texur UV eine Light UV.

    Im Prinzip wird der Textur UV Channel einfach als LightUV Channel verwendet.

    2.Drückst du auf Bake, tut Unreal das licht simulieren und es wird gemessen wo Licht und Schatten auftritt. Diese Information wird dann als Bild die die Light UV geschrieben.

    Der Schatten bei Static Meshes wird sozusagen als Bild (oder wie eine Jacke) über jedes Mesh gelegt.

    Jedes static Mesh bekommt seinen eigenen Light UV und hat somit unterschiedliche Schatten Ergebnisse. Auch 5 mal das selbe mesh hast, befindet sich jedes Mesh an einer anderen Position, das beduetet das der Licht winkel anderst ist. Genau aus diesem ist die Light UV für jedes Static Mesh individuell.


    3.Nehmen wir einmal an dein Mesh besitzt keine Textur UV weil du dein Mesh ohne UV importiert hast, dann kann auch keine Light UV erstellt werden und es wird auch kein Schatten gebaked.


    4.Da beim Baken die Licht Informationen die die UV reingeschrieben werden, dürfen die Light UVs nicht überlappen. Ab besten kann man sich das vorstellen als würde man ein Buch auf ein Blatt Papier drucken und immer wieder das selbe papier verwenden. Du hast zwar irgend wann 300 Seiten auf ein papier gedruckt aber dein Papier ist komplett schwarz weil jeder Buchstabe irgend wann einmal überall hin gedruckt wurde. Genau das selbe passiert bei überlappenden UVs auch. Diese erkennt man dann weil Meshes nach dem Baken komplett schwarz sind.

    Wenn ein Baum gefällt wird, der nur static ist (Foliage), bleibt der Schatten stehen wenn der Baum weg ist?

    Wird der Schatten eines Baumes mit simuliertem Wind auch bewegt oder bleibt der stumm stehen?

    Foliage macht riesen Probleme wenn es auf Moveable gestellt ist und der Schatten an ist. Mach das mal mit Gras dann fleigt dir die Engine um die Ohren.

    Wobei das mit Lowpoly Modellen und/oder den neueren RTX Grafikkarten auch klappen könnte aber nicht mit normalen PCs, das glaube ich nicht.


    bleibt der Schatten stehen wenn der Baum weg ist?


    Wenn du einen Baum als Static Mesh plazierst und dann Build drückst wird der Schatten vorberechnet. Löscht du den Baum dann, wirst du aufgefordert neu zu builden sonst hättest du genau diesen Lucky Lucke effekt das der Schatten noch da wäre obwohl der Baum nicht mehr da ist.

    Diese Schatten Informationen sind dann in den jeweiligen Light UVs gespeichert auf die der Schatten fällt. DU kannst die Light UVs übrigens auch irgend wie anschauen dass kann ich aber auswendig auch nicht mehr genau sagen. Aber findest sicherlich schnell im Netz falls dich Interssiert wie der Schatten in der Light UV aussieht.

    Man muss auch bedenken, dass ein Spiel in der Engine schlechter läuft, als wenn es fertig gepackt ist^^

    Hab dadurch schon Unterschiede von über 200% gehabt...

    Ich hab auch schon Ipad Pros vergewaltigt bis diese abgesturzt sind auch was Texturen angehst packen die nicht so viel wie ein PC. Dafür hab ich noch keine gute Einschätzung und muss immer wieder experimentieren.

    Beim PC schau ich eigentlich das die Modelle so gut es geht optimiert sind und verwende fast nur maximal 2k Texturen.

  • Ich hab auch schon Ipad Pros vergewaltigt bis diese abgesturzt sind auch was Texturen angehst packen die nicht so viel wie ein PC. Dafür hab ich noch keine gute Einschätzung und muss immer wieder experimentieren.

    Beim PC schau ich eigentlich das die Modelle so gut es geht optimiert sind und verwende fast nur maximal 2k Texturen.

    Hab jetzt zwar immer noch nicht erfahren, ob der Schatten des Baums stehen bleibt, wenn man ihn (ingame) fällt, aber egal, werde das ohnehin wohl nie verwenden, außer mein neues Spiel schlägt wie ne Bombe ein und schafft es irgendwann auch auf Mobile^^



    Man muss bei Mobile auch bedenken, dass wenn das OS aktualisiert wird, die Performance flöten geht...

    Hab das Problem grad mit meinem 5 Jahre alten Samsung, vorm Update lief alles flüssig, seit dem Update kann ich nicht mal mehr entsperren ohne Verzögerung und alles was ich öffne, braucht 10x so lang zum laden...



    Bei Static-Meshes und Skeletals (ohne Morph-Targets) kann man inzwischen einfach die LODs (auch nach eigenen Vorgaben) generieren lassen, das ist also kein Problem zu optimieren.

    Mit Morph-Targets hab ich noch so meine Probleme, die muss ich in Blender manuell machen, wobei es da ein cooles Addon gibt, das ich vielleicht irgendwann mal irgendwo vorstelle (Wiki?).


    LOD Pro-Tipp:

    Im Material "dithered LOD" an schalten, dann ploppen die LODs nicht, sondern werden smooth geändert:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    100% Tris zu 5% Tris^^


    Texturen braucht man eigentlich auch keine 4k, 2k reichen da echt locker aus^^

    Viele Spieler wünschen sich, dass es wenn überhaupt, 4k nur als Option zum downloaden gibt und nicht immer direkt dabei ist, da 4k eben auch 4x mehr Platz auf der Platte braucht, als 2k.

    Es hat auch nicht jeder ne 100mbit-Leitung daheim, sondern meistens grad mal ne 6mbit und brauchen dann für 100gb eben 2 Tage, was bei Spielen ohne Preload echt nervt...

  • Man muss bei Fragen der Optimierung auch bedenken, dass ein Großteil der potentiellen Käufer nicht in einer Erste-Welt-Industrienation wie Deutschland lebt.


    In einem Q&A zu World of Tanks hat ein Entwickler das Problem vor Jahren mal auf den Punkt gebracht. Da fragte ein Spieler in etwa: "Warum bringt ihr nicht top moderne Grafik?" und der Entwickler antwortete "Weil wir dann 80% unserer Playerbase verlieren die irgendwo in Russland auf einem Taschenrechner spielt".


    Tolle Grafik ist natürlich ein Hingucker, aber die Realität ist, viele Spieler spielen auf sehr, sehr schlechter Hardware. Das ist der Grund, warum viele Massenprodukte auf "Comicgrafik" setzen. Weil man die einigermaßen hübsch auf schlechter Hardware zum laufen kriegt. LoL ist ein schönes Beispiel. Klar könnten die Highend-Grafik bringen. Doch ist das wirtschaftlich sinnvoll? Klares Nein.


    Wer in der breite Käufer finden will, darf an Hardware maximal einen PC der unteren Mittelklasse voraussetzen. Über 4K brauchen wir da überhaupt nicht reden.

    • Offizieller Beitrag
    Zitat

    Hab jetzt zwar immer noch nicht erfahren, ob der Schatten des Baums stehen bleibt, wenn man ihn (ingame) fällt, aber egal, werde das ohnehin wohl nie verwenden, außer mein neues Spiel schlägt wie ne Bombe ein und schafft es irgendwann auch auf Mobile^^

    Du kannst ein static Mesh nicht fällen das geht nur mit Movable genau aus dem grund. Dann hast automatisch wieder ein Schatten der in Echtzeit berechnet wird.static heißt statisch (nicht beweglich)

  • Du kannst ein static Mesh nicht fällen das geht nur mit Movable genau aus dem grund. Dann hast automatisch wieder ein Schatten der in Echtzeit berechnet wird.static heißt statisch (nicht beweglich)

    Natürlich geht das:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Offizieller Beitrag

    Du siehst doch das sich der Schatten bewegt ? Dann kann das Licht ja nicht statisch sein.





    Hab jetzt zwar immer noch nicht erfahren, ob der Schatten des Baums stehen bleibt, wenn man ihn (ingame) fällt,

    Probiers doch einfach aus: Drück auf Build und fälle dann den Baum. Das kann von der Logik her gar nicht funktionierten. Ich denke mal der Baum wird gar nicht gebaked.


    Ich vermute mal du verwendest ein Static Component oder? Static Components sind ja im Prinzip Instanzen von Static Meshes und soweit ich weiß haben auch nur die diese Cutting auseinanderfall Geschichten. Das machst du ja auch per Blurprint.


    Das kannst du auch hier nochmal nachlesen: https://docs.unrealengine.com/…ctors/Mobility/index.html


    Nochmal: Wenn du ein Mesh auf Static, und auf Build drückst dann wird der Schatten die Lightmap geschrieben und bei Moveable Lights ist das nicht der Fall.

    Ich hab nicht viel Erfahrung mit den Static Mesh components die zu Baken macht ja auch keinen Sinn muss ja dyamisch sein sonst wäre der Schatten wie gesagt fest.