Speed Up Light Render Time

  • Hallöchen,
    wie oben geschrieben, möchte ich meine Render Zeit vom Licht verbessern. Hier die Settings:


    DirectionalLight (Movabal = Das dass Licht Live im Game Gerendert wird)
    Steine, Grass, Blumen, ect (Schatten Deaktiviert)


    Render Time/Preview = 10:15 Minuten. (Das finde ich doch wirklich viel)


    Die Pflanzen werden mit dem Material Automatisch auf das Terrain gepackt (Nur da wo die Gras Texture ist). Daher konnte ich auch nur die "Cast Dynamic Shadows" Deaktivieren.
    Die Bäume sind Manuel Hinzugefügt.
    Hier wusste ich nämlich nicht wie ich diese mit Collision Spawne(Daher die normale Foliage)


    Hier meine System Daten:


    I7 8700k (Habe hier kein OC Angewendet)
    GTX 1060 6 GB (Klarer Bottleneck. Wollte ich noch Aufrüsten)
    16 Gb Ram


    Bis auf die Graka würde ich sagen, sollte mein System das hinbekommen^^ (Wie gesagt sind hier 10:15 echt viel)



    [Blockierte Grafik: https://img3.picload.org/image/dladdgaa/bandicam2018-07-2518-45-59-329.jpg]
    [Blockierte Grafik: https://img3.picload.org/image/dladdgal/bandicam2018-07-2518-45-17-326.jpg]
    [Blockierte Grafik: https://img3.picload.org/image/dladdgai/bandicam2018-07-2518-45-50-010.jpg]


    (Die Texturen für das Terrain werden noch ausgetaucht...Die sind nicht so ganz meins :D )


    Hoffe ihr habt ideen wie ich mein Problem behebe :D

  • Hallo zusammen


    Du kannst während du dein Level baust, die Lightmap Resolution der Objekte runter drehen. Bei 10 Minuten ist der Sinn fraglich, falls es sich aber um sehr Anspruchsvolle Lighting Situationen handelt, kann das sinnvoll sein, damit du noch effizent arbeiten kannst. Wenn dein Level komplett Dynamic Lighting nutzt, werden die Ligtmaps gar nicht benutzt, was das Baken dann sinnbefreit.

  • Wäre wohl noch interessant zu wissen, was das Lighting baken überhaupt bringt, hab immer nur Dynamic Lighting benutzt und mir sind nie irgendwelche Probleme aufgefallen...

  • Lighting an sich ist jetzt keine triviale Angelegenheit. Deswegen hier mal der link zu den Doks.
    Dennoch hier kurz die Highlights einfach zusammengefasst. Baked lighting hat eine gute Perfomance und bietet sehr gute Kontrolle. Bei statischem Licht, werden die Schatten schon vor dem Gameplay gebaked, bringt Perfomance, Kontrolle etc. folglich ist das Licht aber dann auch, nunja, statisch. Es gibt also keine dynamischen Anpassungen während des Gameplays. Dann gibt es Stationary light, sozusagen die Mitte zwischen statisch und dynamisch. Der Unterschied ist zu static light ist, dass diese einige Anpassungen erlauben (etwa Farbe). Bei beiden erlaubt euch die Lightmap Resolution eine Kontrolle, wie detailiert das baken denn sein soll. Hier gilt es eine gute Balance zu finden.
    Dann haben wird noch die moveable Lichter, also komplett dynamisch. Alles anpassbar, allerdings auch deutlich Performancelastiger. Deswegen bringt bei dir @'Killerzweg' das baken wenig.


    Gruss

  • Du meinst 10 Minuten um das Licht zu bauen.


    Verwendest du noch ein anderes Licht, beispielsweise ein static Skylight, oder reflection captures? Für große Landschaften machen Dynamische Lichter auch Sinn, um eben diese großen Lightmaps zu vermeiden. Dann muss man allerdings mit Cascaded Shadow Maps, Distance Field Shadows, und verschiedenen anderen Sachen (z.b.Shadow Render Distance) arbeiten, um eine gute Performance zu erreichen. Alles in allem ist das Licht nicht einfach.
    Du kannst in den World-Settings des Levels unter "Lightmass" das "force no precomputed lighting" aktivieren, dann hast du keinerler Build-Time mehr, allerdings auch keine Möglichkeit, static Lighting zu verwenden. (in den Projekteinstellungen kannst du es sogar komplett deaktivieren)


    Zitat von xXSmily98Xx

    GTX 1060 6 GB (Klarer Bottleneck. Wollte ich noch Aufrüsten)

    Die Karte ist natürlich nicht super, aber die Licht-Berechnung beim Builden erfolgt mithilfe der CPUs, also hat das keinerlei auswirkungen auf die Build-Time. 10 Minuten sind noch nicht viel, das kann durchaus länger dauern je nach System und Szenengröße, auch mal mehrere Stunden. Daher vermute ich einfach mal, dass deine Lightmap resolution relativ klein ist.
    Außerdem sollte man auch nicht davon ausgehen, dass jeder Spieler eine so gute Grafikkarte hat, daher sollte man das Projekt möglich so bauen, dass es auch auf älterer Hardware immernoch gut laufen kann.



    Ansonsten:

    Externer Inhalt www.youtube.com
    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.

  • Vielen Dank für die vielen Antworten.
    Hab leider kein Plan wie oder wo ich die Lightmaps anpassen kann. Habe es jetzt so verstanden:
    Solange ich mein Movable light nutze, werden keine Lightmaps angefertigt (dann aber die Frage was der da so lange rendert)


    Wenn ich jetzt auf Static wechsle, müssen Lightmaps gerendert werden.


    Wo Stelle ich Lightmaps ein?
    Brauche ich überhaupt eine?
    (Habe ja ein Moveable light. Jedoch sind manche Lampen auch Static)



    Du meinst 10 Minuten um das Licht zu bauen.


    Verwendest du noch ein anderes Licht, beispielsweise ein static Skylight, oder reflection captures?

    Ich nutze ein skylight um die Schatten etwas aufzuhellen

    • Offizieller Beitrag

    Solange ich mein Movable light nutze, werden keine Lightmaps angefertigt (dann aber die Frage was der da so lange rendert)

    Auch hier fangen wir vorne an.


    1. Durch die Textur UV-Map weiß Unreal wo welches Pixel aus deiner Textur auf deinem 3D Modell plaziert werden muss. Die UV ist ein 2D Bereich wo du einzelne Teil (Shells) von deinem 3D Mesh plazierst. Ich vergleiche die UV immer so: " Stell dir vor du hast einen Amazon Karton und möchtest auf diesen ein Bild Kleben. (Karton ist 3D Bild ist 2D) Damit das funktioniert, schneidest du den Karton in einem Besser so auf, das du ihn in 2D vor dir aufklappen kannst. Nun kannst du dein Bild aufkleben.


    [Blockierte Grafik: https://upload.wikimedia.org/wikipedia/commons/f/fe/Cube_Representative_UV_Unwrapping.png]
    Die UV ist der Powe ofr Two bereich, dass hatten wir ja schon im anderen Thead dieser Bereich können später mal 1024* 1024 Pixel oder 2048 * 2048 Pixel oder auch 64 * 4096 Pixel sind möglich. (Beide Zahlen sollten Power of Two sein.


    Zu Screenshot oben: Wenn man bei dieser UV davon ausgehst das sie 1024 * 1024 Pixel groß ist und diesen Bereich viertelt so hat man 4 Bereiche die jeweils 512 *512 Pixel groß sind.
    Nun könnte man ausrechnen wie groß einer der Shells sind die du hier siehst. Die Shell ganz unten Links dürfte so ca 210 Pixel Breit * 180pixel hoch sein.


    Daraus muss dir nun folgedes klar sein:


    1.Der UV Bereich ist eine Tabelle die Grafisch durch das Plazieren der Shells definiert wird.
    2.Je Größer die Shells sind, umso größer ist die Auflösung. Nimmt eine Shells nur den halben UV Space bei einer 1k Textur ein. Nutzt du also nur 50% von deinem UV Space, hast du auf der anderen Seite 50% Verlust.
    3.UVs sind wie eine Jacke die direkt für das 3D Modell angepasst (maß geschneidet) werden. (UV sollte zum 3D Modell passen)
    4.Sind die UV Shells größer als der UV Bereich, werden Texturen gekachelt.


    2. So nun kommen wir zu den Licht UVs


    a) Wenn die UV Shells größer sind als der UV Bereich dann werden Texturen gekachelt, dies gilt nicht für Light UVs. Den Licht UVs müssen maßgeschneidert sein.
    b. Was passiert beim Light Bake ?


    Oben hatten wir ja bereits das UVs Tabellen sind aus dehnen Informationen gelesen werden können, es können aber auch Informationen in diese Tabellen geschrieben werden.
    Der Lightuv ist der 2. UV Channel also quasi eine 2. leere Tabelle in die nun Schatten Informationen geschrieben werden.
    C.Beim Bake geht Unreal Objekt für Objekt durch und berechnet den Schatten der auf dieses Objekt fällt und schreibt diese Schatten Informationen in die 2. UV Map.


    Die Light UV ist also im Prinzip eine Textur die genau wie die Ambient Occlusion nur Schatten Informationen enthält. Diese Map wird dann einfach nur noch über das Objekt gelegt.
    Wenn die Textur ein Tshirt ist dass du dem 3D Modell anziehst, dann ist die Light UV die Jacke die über dieses Tshirt drüber ziehst.


    3.Wenn das Licht auf Moveable gestellt ist, dann werden keine Light Maps erstellt sondern die Schatte in Echtzeit berechnet.
    Die Echtzeit Berechnung geschieht in Echtzeit ist aber unperformanter. Es gibt keinen Grund warum man den Schatten von einem Haus in Echtzeit berechnen werden soll. Merke: Was sich bewegt braucht Lichtberechnungen in Echtzeit und was stillsteht ist das Baken besser.
    Würdest du den Schatten von deinem Charakter Baken, so wäre dieser auf dem Boden eingezeichnet , bewegst du den Charakter wäre der Schatten immer noch an der selben Stelle :)
    Beim Baken werden die Schatten in Tabellen gespeichert, und müssen nur einmal berechnet werden und dies dauert eben. Dafür müssen sie nicht in Echtzeit berechnet werden.


    Kommen wir noch zu ein paar Fehler die auftreten können:
    1.Der Schatten wird ja für jedes Objekt einzeln berechnet. Objekte können gleich sein, aber der Schatten der auf diese Objekte fallen, können unterschiedlich sein.
    Wenn du auf ein Papier immer wieder unterschiedliche Sachen drucken tust und dafür immer wieder das ein und das selbe Papier verwendest, dann ist es irgend wann Schwarz. Und genau so ist das auch beim Baken wenn zb die Light UV über den UV Bereich hinausgeht. Du erinnerst, alles was über den UV bereich hinausgeht wird gekachelt. Das heißt auch der UV Bereich wird bei Oberlapping immer und immer wieder überschrieben (gekachelt)n Dadurch wird deine gesamte Light UV Schwarz) Dieses Problem tritt hauptsächlich bei überlappenden Light UVs auf.


    2. Du kannst beim Import sagen das die Light UV "auto-generate light UV" aktiviert sein soll. Dann wird die Light UV. (der 2. UV Channel) aus deiner Textur UV erstellt. Im Prinzip nimmt Unreal deine Texturuv kopiert diese in den Light UV Channel skaliert, dreht und bewegt die Shells so das als Light UV verwendet werden können.
    Damit das klappt muss dann aber auch eine Textur UV vorhanden sein. Ohne Textur UV gibt es dann auch keine Light UV


    3. Du kannst deine Light UVmap auch im 3D Programm erstellen, man hat dann oftsmal mehr Kontrolle und kann Bake Fehler besser beheben. Dazu machst du im Prinzip das selbe wie oben:
    Textur UV kopieren, Alle Shells innerhalb des UV Spaces plazieren, Alle Shells Unfolden und alles schön performant plazieren fertig ist dein 2. UV Channel.
    Ich baue meine Light UVs nur so weil man dadurch mehr Kontrolle hat und für mich sind das 2 Klicks im 3D Programm.Wenn du so importierst, muss du den Haken bei "Auto-generate Light UV" ausmachen. Dann nimmt Unreal den 2. UV Channel als Light UV (Das ist Standard) Die Light UV also bitte nicht in den 3. Channel kopieren.


    Zusammengefasst:
    1.Wenn du dein Licht in Echtzeit berechnen lässt, brauchst du keinen 2. UVChannel also keine Light UV (Du nutzt Moveable light) Dies ist sehr unperformant und bei größeren Szenen nicht zu empfehlen. Sell dir vor unreal muss für jeden Grasshalm und jedes Platz den Schatten berechnen. Wie gesagt: auch wenn die Bäume gleich und dass instanzen sind, muss trotzdem für jeden Baum für jedes Blatt extra Schatten berechnet werden. Und dies bei jedem Frame.


    2.Lässt du deinen Schatten Baken, kannst du meistens erstmal ins Kino oder ins Freibad gehen. Der Schatten Bake kann Stunden oder Tage dauern. Dies ist der Vorberechnung damit diese Informationen nicht mehr in Echtzeit berechnet werden müssen.


    Es gibt aber auch ein paar Tricks wie die Berechnung schneller gehen kann.


    1.Zu Test zwecken auf Preview baken.
    2.Überlappende Meshes vermeiden: Steckt zb ein Ast in einem Baumstab drin und dort ist es dunkel so wird auf diesen Ast im nicht sichtbaren Bereich Schatten hin berechnet.
    Das selbe gilt zb auch wenn eine Wand die unten auch ein Face hat auf einer Bodenplatte steht. Ab der Stelle wo sich die beiden Meshes berühren, wird Schatten hingebaked. Und bei Stellen die man sowieso nicht sieht, muss das ja nicht sein.
    3.Level Streaming: Du musst ja nicht dein ganzes Level aus Klotz machen- Ein Haus könntest du separat Baken so kannst du schneller dinge im Haus ändern ohne das du alles nochmal neu baken muss.
    Du lädst quasi das Haus als Level in dein Hauptlevel als Reference.
    4.Achte bitte auch darauf das alle Lichter auf Statik gesetzt sind wenn du Light Baken willst. Sind Lichter als Moveable gestellt werden von diesen Lichter keine Schatten gebaked.


    So mehr fällt mir auf die schnelle auch nicht ein. Hoffe nun ist alles ein bisschen klarer.

  • So mehr fällt mir auf die schnelle auch nicht ein. Hoffe nun ist alles ein bisschen klarer.

    ein bisschen klarer ist gut^^ Wie immer wirklich sehr gut erklärt. Wollte schon fragen wie ich es mache wenn ich Objekte im Haus verschiebe. Jedesmal neu Baken? Aber zum Glück hast du ja geschrieben das ich das in einem Extra Level machen kann. Jetzt meine frage:


    Ich erstelle ein Level. Alles darin ist schwarz. Fürn Anfang erstelle ich ein paar Lichter, um mein Haus zu Bauen/einzuräumen. Zum Ende Lösche ich alle Lichter Außen, um nur die Innen Schatten zu Baken. Aber wie Exportiere ich das in mein Aktuelles Level zurück.

    • Offizieller Beitrag

    ch erstelle ein Level. Alles darin ist schwarz. Fürn Anfang erstelle ich ein paar Lichter, um mein Haus zu Bauen/einzuräumen. Zum Ende Lösche ich alle Lichter Außen, um nur die Innen Schatten zu Baken.

    Nein du brauchst die Lichter danach nicht löschen.
    Ich erstelle mein Level in Maya und zwar beim 0 Punkt also XYZ = 0. Nun erstelle ich beim Level dort und Freeze die Translations in Max heißt das XForm und in Blender glaube ich auch Freeze das hatte wir hier schonmal.
    Lies einfach dort mal alles nach. So kannst du die Objekte immer bei 0 positionieren ohne das du deine Objekte in der Unreal an die richtige Stelle verschieben musst. Einfach im 3D Programm richtig positionieren, die Position einfrieren und alles sitzt in der Unreal an der richtigen Stelle.
    Das hat nun einen großen Vorteil, du kannst alle Lichter Plazieren und dann jederzeit dein Level umbauen und alles nochmal neu Importieren. DU löscht alle deine Meshes aus dem Content Browser und dem Outliner und ziehst sie neu rein. drückst auf Position zurück setzen (Siehe Thread)


    Du klickst klickst auf Bake und lässt die Lichter wo sie sind den es kann ja sein du musst irgend wann nochmal baken, dann wäre es ja blöd wenn du alle Lichter mit den Einstellungen gelöscht hättest.


    Aber wie Exportiere ich das in mein Aktuelles Level zurück.

    So gar nicht zumindest nicht so wie du dir das vermutlich Vorstellst mit exportieren hat das nix zu tun. DU hast zb eine Aussenszene und das Haus Du bakest die AUssenszene und du Bakst die Innenszene (Das haus) Nun werden beide Szenen überblendet sie existieren quasi beide in in deiner Haupt Szene. (Im Prinzip werden sie einfach nur in die szene hinein gestreamt, projiziert oder instanziert. Änderst du was am Haus, ändert sich das auch im Hauptlevel


    Such einfach mal nach dem Youtube Berech: introduction level,streaming, unreal
    Such dir ein kurzes Tutorial raus.

  • oke danke dir.
    Schaue mal nach Tuts. Kann mir noch nicht ganz erklären wie ich Gebäude extra Baken kann. Denke das klärt sich durch ein Tut.
    Habe es jetzt so verstanden:


    Ich Baue mein Gebäude und richte es ein. Anschließend gehe ich in mein Projekt, und erstelle ein Neues Level. Im dem Level Lade ich das Haus, und Bake alles. Anschließend ziehe ich das Haus in mein Hauptlevel rein. Somit habe ich das neue Level nur zum Baken fürs haus benutzt.


    Nicht frustrieren wenn ich hier alles falsch habe :D
    Irgendwann macht es klick^^
    Danke auf jedenfall für die Hilfe


  • (Im Prinzip werden sie einfach nur in die szene hinein gestreamt, projiziert oder instanziert. Änderst du was am Haus, ändert sich das auch im Hauptlevel

    Habe hier eben ein Super Tut gesehen. Danke für diesen wichtigen Hinweiß. Ich baue mein Level am besten komplett aufs Level Streaming auf(Ist schließlich echt eine coole/einfache Sache)


    Hierzu jedoch noch eine Frage:


    Ich habe zmb ein Haus. Hinter dem Haus(oder im Haus) stehen irgendwelche Assets. Da ich diese nicht sehen kann, werden diese ja auch nicht Gerendert.


    Würde es mir jetzt trotzdem was bringen, eine Eventbox um das Grundstück zu ziehen was eben die Assets im Haus Lädt(Logischerweise so, das man nicht vom Fenster alles Spawnen sieht :D )
    Gerendert wird es ja eigentlich sowieso nicht