Sichtweite

  • Hallöchen,
    heute zum Thema "Draw Distance".
    Leider finde ich keine Option die Sichtweite meines Spielers zu Beschränken. Habe bereist mit foliage Culling gearbeitet, jedoch finde ich es nicht schön wenn Plötzlich Bäume auf tauchen. Mit Nebel habe ich es auch schon versucht.
    Machen möchte ich dies, um mit meiner Performance mal etwas höher zu kommen.
    In meinen foliage habe ich bereits die LODS aller Objekte angepasst.
    Momentan habe ich in dieser Szene auf dem Bild zwischen 90-100 FPS. Versuche natürlich mehr raus zu holen. Zumal Später ja noch kleine Dörfer dabei sind. Die dichte der Jeweiligen Folien habe ich auch schon angepasst.
    Kennt ihr einen Ultimativen Trick?


    Hier erst mal zwei Bilder aus meiner Szene:
    (noch im aufbau...daher sieht es noch nicht wirklich toll aus :D )

  • Was mir da als erstes auffällt... du hast keine Sichtbarrieren.
    Absolut flaches Land.


    Steine, Hügel usw. lockern nicht nur das Bild auf - sie verhindern auch, dass man aufploppende Bäume sieht. ;)


    Weiterhin solltest du mal nach "smooth transition" suchen.


    Nebel ist ein netter Trick. Kostet dich aber noch mehr Performance. Das solltest du bedenken.


    Für die Bäume könntest du Billboards erstellen. Aber das wird nicht viel helfen. Die Polygone sind nämlich nicht das Problem. Das Problem sind die Shader.


    Dann frage ich mich, was du an 90 - 100 FPS auszusetzen hast? Mach doch erstmal deine Szene voll und schau dir an, wie es läuft.

    • Offizieller Beitrag
    • Es gibt ja das Cull Distance Volumes mit ihm man Objekte erst aber einer bestimmte Nähe einblenden kann.
    • Nebel ist auf jeden Fall auch nicht verkehrt.
    • LODs definitv sind Objekte sehr weit entfernt sind sie einfach nur billboard somit besteht ein Baum aus nur 2 Tris bei sehr weiter Entfernung.
    • Was auch Performance bringt ist eine Tiefenunschärfe, dadurch das weit entfernte Objekte nicht mehr scharf dargestellt werden müssen wird alles Performanter
    • Aus Shotern kennt an man, wenn extrem Action ist und vielleicht eine Granate mit Partikeleffekten geworfen wird, alles ein bisschen geblured
    • Du hast ziemlich viele Grasbüschel: Ich nehme an das dies sehr viele Objekte sind ? Wie wäre es wenn du weit entfernte Grasbüschel als LOD zusammenpackst und somit in der Entfernung weniger Objekte hast.

    Ich finde deine Versuche klasse nur weiter so, so lernt man ne Menge über die Technik.

  • du hast keine Sichtbarrieren.
    Absolut flaches Land.

    Hierzu mache ich momentan Assets. Hügel/Gebäude kommen da bald rein

    Weiterhin solltest du mal nach "smooth transition" suchen.

    Unter dem Begriff konnte ich nur Animationen zwischen Kameras finden (So nach Google) zmb zwischen FPP und TPP wechseln.



    Beim Nebel hatte ich gedacht das er mir eher FPS gibt, da er andere Dinge überdeckt.


    90 - 100 FPS auszusetzen hast?

    Mein denken war:
    Wenn ich in einer Wald Szene schon nur 90-100Fps habe, wie sieht es dann erst in einer Stadt aus.
    Oder eben mit einem Dort im Wald. Das muss ja der Untergang sein. Ich habe alleine jetzt schon 20-30 FPS verloren.

  • An sich ist es schwer genau zu sagen wo du optimieren kannst. Daher etwas allgemein.


    An sich solltest du zuerst immer "Stat Unit" probieren.
    Dort siehst du wie lange Game, Draw und GPU benötigen für einen Frame.
    Von da aus kannst du dann weiter sehen. Ist "Game" hoch, so liegt es an der Game logik.
    Ist "Draw" hoch, dann hast du zu viele Draw calls.
    Ist "GPU" hoch, dann benötigt der Renderer zu lange.


    Bei Draw ist relativ klar. Du müsstest irgendwie Draw Calls reduzieren, also weniger Objekte auf dem Bildschirm haben. Hier könnte HLOD etwas helfen, da es in der ferne mehrere objekte zusammenfasst, damit diese in einem Draw Call gerendert werden können.
    Bei Game müsstest du deinen Code Profilen. Das ist ein größeres Thema für sich.
    Bei GPU würde ich den Befehl "ProfileGPU" aufrufen. Es wird damit für einen frame genau geprüft wie lange was braucht. Es erscheint dann solch ein Fenster:


    In dem Fall sehe ich dass 2 Planar Reflection captures ziemlich viel Performance fressen und kann z.B. deren Einstellungen optimieren, damit diese nur wenn nötig aktiv sind. Man kann natürlich auch noch tiefer reinschauen und genau sehen wo die Problemstellen liegen, oder wo es Potenzial geben könnte.
    In dem Beispiel läuft die Szene für meine Bedürfnisse recht gut, daher ist das vielleicht ein schlechtes Beispiel, aber man könnte so erkennen ob man nicht vielleicht die Anzahl dynamischer Lichter reduziert, ob es zu viele Transparente Objekte gibt, ob man vielleicht lieber auf einige Post Processing effekte verzichten will.



    Ansonsten ist auch immer gut sich die Optimization View Modes anzuschauen


    Die meisten von denen haben sogar Skalen ob es gut oder schlecht ist. Betrachte aber immer den Bildschirm als ganzes.
    Da Shader per Pixel gerechnet werden sind paar Rote Pixel in "Shader Complexity" view nicht schlimm. Wenn aber der ganze Bildschirm rot ist, dann solltest du was tun, wenn es geht.

  • LODs definitv sind Objekte sehr weit entfernt sind sie einfach nur billboard somit besteht ein Baum aus nur 2 Tris bei sehr weiter Entfernung.

    Mit dem wird ein Baum Quasi nur noch als 2D Bild ausgegeben oder? Ich habe das schon bei manchen im Video gesehen. Hab nur leider kein Plan wie ich das umsetzte. Die Texture vom Baum muss ja auch mein Blick winkel verfolgen ect. Momentan habe ich das so gelöst, das die LODs immer härter werden. (Immer weniger Vertex)



    Was auch Performance bringt ist eine Tiefenunschärfe, dadurch das weit entfernte Objekte nicht mehr scharf dargestellt werden müssen wird alles Performanter

    Auch hier wäre Klasse zu wissen wie das geht. Habe da vor einer weile mal ein Video gesehen. Leider war dies vom Inhalt nicht sehr gut. Müsste das alles einfach Abschauen(hätte da aber nix davon)
    Würde ja auch gerne wissen warum es Funktioniert :D (und wie)



    Du hast ziemlich viele Grasbüschel: Ich nehme an das dies sehr viele Objekte sind ? Wie wäre es wenn du weit entfernte Grasbüschel als LOD zusammenpackst und somit in der Entfernung weniger Objekte hast.

    Wie Packe ich den die LODs mehrerer Objekte zusammen?
    Bei Gebäuden weiß ich, das man versucht mehrere Teile zusammenzufügen. War das hier genauso gemeint?

    • Offizieller Beitrag

    Beim Nebel hatte ich gedacht das er mir eher FPS gibt, da er andere Dinge überdeckt.

    Das ist auch richtig.

    Oder eben mit einem Dort im Wald. Das muss ja der Untergang sein. Ich habe alleine jetzt schon 20-30 FPS verloren.

    Bei einer Stadt darfst du nicht vergessen das hierzu noch das Camera Occlusion Culling hinzukommt. Hierbei werden Objekte die sich im Hintergrund befinden nicht gezeichnet. Mal angenommen du hast ein Haus in dem sich ein Saal befindet in dem 1000 Modellierte Glühbirnen mit einem Polycount von insgesamt 1 Millionen Tris sind. Befindest du dich außerhalb vom Gebäude werden die Glühbirnen nicht gezeichnet, dafür müssen 10 andere Häuser gezeichnet werden die insgesamt 1 Millionen Tris haben. Sobald du das Gebäude betrittst, sieht du die Häuser nicht mehr du sparst 1 Millionen Tris dafür kommen nun die Glühbirnen und das kostet wieder eine Millionen.


    Das Problem bei der Performance ist folgendes:


    1.Jedes Objekt braucht jeweils ein Drawcall.
    2.Mehre Objekte zusammen zu fassen macht erstmal sinn den weniger Objekte heißt weniger Drawcall.
    3. Mehre Objekte zusammen zu fassen heißt aber auch das die Objekte größer sind und das Culling funktiniert durch Überdeckung. Wenn ein Baum von einem Haus verdeckt wird, so wird der Baum nicht gezeichnet. Ist der Baum und das Haus aber ein Objekt, so wird der Baum auch immer dann gezeichnet wenn du das Haus siehst.


    Deswegen macht es keinen Sinn ein Haus mit Möbel und allem drum und dran zu einem Objekt zu machen. Den wenn du das Haussiehst, werden immer auch die Möbel gezeichnet.
    Mehr Objekte können manchmal also performanter sein als weniger Objekte. Wenn du versteht warum das so ist, kannst du sicherlich besser selbst entscheiden wann was besser ist.

    • Was auch Performance bringt ist eine Tiefenunschärfe, dadurch das weit entfernte Objekte nicht mehr scharf dargestellt werden müssen wird alles Performanter
    • Aus Shotern kennt an man, wenn extrem Action ist und vielleicht eine Granate mit Partikeleffekten geworfen wird, alles ein bisschen geblured

    Unschärfe oder Blur ist generell ein ziemlich anspruchsvoller effekt. Blur ist im Grunde ein tiefpass filter, also ein gewichteter Mittelwert. Das heißt um einen geblurrten Pixel zu berechnen muss man für diesen Pixel auch nicht die Informationen aus den Pixeln in der Nähe abgreifen, um das diskrete 2D-Faltungsintegral berechnen zu können. Es gibt ein paar optimierte Methoden für sowas, aber kein Blur ist immer Performanter.


    D.h. der Blur bei der optimierung ist nur ein Mittel um deine Optimierungen zu verstecken. Der Blur selbst kostet aber wieder performance.

    • Offizieller Beitrag

    Mit dem wird ein Baum Quasi nur noch als 2D Bild ausgegeben oder? Ich habe das schon bei manchen im Video gesehen. Hab nur leider kein Plan wie ich das umsetzte. Die Texture vom Baum muss ja auch mein Blick winkel verfolgen ect. Momentan habe ich das so gelöst, das die LODs immer härter werden. (Immer weniger Vertex)

    Ja du machst ein Screenshot von deinem Baum und Pakst diesen auf eine Plane. (Quasi ein 2D Spite) diese 2D Sprite ist dann LOD1 von deinem Baum. EIn LOD muss nicht das selbe Objekt mit weniger Tris sein. Ein LOD kann auch ein komplett anderes Mesh sein. Was aus der Nähe eine Kugel ist, kann in der Entfernung ein Cube sein. Du kannst für andere LODs auch andere Texturen verwenden. Der Baum aus der Nähe hat zb eine 1k Textur aus der Entfernung verwendest du die selbe Textur aber nur mit einer Auflösung von beispielsweise 64* 64 Pixel.

    Auch hier wäre Klasse zu wissen wie das geht. Habe da vor einer weile mal ein Video gesehen. Leider war dies vom Inhalt nicht sehr gut. Müsste das alles einfach Abschauen(hätte da aber nix davon)
    Würde ja auch gerne wissen warum es Funktioniert (und wie)

    Stichwort depth of field, siehe: https://docs.unrealengine.com/…ocessEffects/DepthOfField

    Wie Packe ich den die LODs mehrerer Objekte zusammen?
    Bei Gebäuden weiß ich, das man versucht mehrere Teile zusammenzufügen. War das hier genauso gemeint?

    Wenn du beispielsweise Gras setzen tust, setzt du ja bei jedem Gras Büschel jeweil ein Objekt = 1 Drawcall.
    Du hast ein Mesh mit nur einem Grass Büschel zb LOD1, Dein LOD2 ist ein Mesh mit mehren Grass Büschel als ein einziges Objekt. Das heißt aus der Ferne werden weniger Grass Büschel Objekte angezeigt dort aber mehre in ein Objekt gepackt. Quasi mehre als Gruppe zusammen gepackt. Aus der Nähe hast du 10 Objekte mit jeweils einer Kugel. Aus der Ferne hast 1 Objekt mit 10 Kugel.


    Das ist auch dass was Tomura hier schrieb:

    Unschärfe oder Blur ist generell ein ziemlich anspruchsvoller effekt. Blur ist im Grunde ein tiefpass filter, also ein gewichteter Mittelwert. Das heißt um einen geblurrten Pixel zu berechnen muss man für diesen Pixel auch nicht die Informationen aus den Pixeln in der Nähe abgreifen, um das diskrete 2D-Faltungsintegral berechnen zu können. Es gibt ein paar optimierte Methoden für sowas, aber kein Blur ist immer Performanter.

    Bei Draw ist relativ klar. Du müsstest irgendwie Draw Calls reduzieren, also weniger Objekte auf dem Bildschirm haben. Hier könnte HLOD etwas helfen, da es in der ferne mehrere objekte zusammenfasst, damit diese in einem Draw Call gerendert werden können.


    Darüber habe ich andere Informationen:

    Der Nebel kostet extra Performance. Was auch logisch ist. Es ist ein extra Effekt.


    https://www.gamestar.de/artike…ik-einbussen,3316661.html


    oder
    https://praxistipps.chip.de/ab…puterspiel-fluessig_13580

  • Ich glaube das bezieht sich auch auf meinen Kommentar mit dem Blur.
    Wie du hier siehst wird geschrieben

    Zitat

    Zudem können Sie bei vielen Spielen einen Motion-Blur-Effekt aktivieren. Diese künstliche Unschärfe kaschiert harte Bildschnitte. So erscheinen auch schnelle Bewegungen und Explosionen flüssig.

    D.h. mit Motion blur lässt man schnelle bewegungen bei geringer Frame Rate flüssig aussehen. Das Ziel von xXSmily90x ist aber die Frame Rate zu erhöhen.


    Jeder Effekt ist im Grunde immer zusätzliche Frame Time. Es kommt drauf an wo man reduziert und was man nutzt um es unauffällig zu machen.
    Nebel ist z.B. immer super im zusammenspiel mit Culling/LOD. Über Culling spart man performance, mit dem Nebel macht man es weniger auffällig.

  • Die Frage hatte ich vor einiger Zeit auch schon mal gestellt. Wie erstellt man eine Nebelwand die erst ab einer Bestimmten Zone anfängt und dann nach ein paar Metern schon blickdicht ist? Dahinter kann dann das culling greifen. Irgendwie bekomme ich nicht die richtigen Einstellungen hin. Mit volumetric Fog bekomme ich bessere Ergebnisse. Aber der zieht auch an der performance.


    @xXSmily98x
    Schau dir mal Spiele wie Farcry an. Man latscht von einem Hügel über den nächsten. Immer schön die Sicht versperren. Wen du eine Stadt baust, muss die Straße nicht 3 km geradeaus führen, wo man hunderte von Häusern sehen kann. Eine Stichstraße oder auch eine Kurve helfen da und es wirkt interessanter.