Vorschag zur Verbesserung der Performence

A new update is now available, introducing seasons and more!
Latest hotfix: 0.8.0.1 (2024-12-20)
  • Heute hatten wir mal wieder eine kleine Diskusion über die Performace im Spiel und hätten ein paar Vorschläge wie oder wo man was Verbessern könnte.



    Sichtfeld:
    Den Gedanken den wir hatten war das man im Spiel noch ein Sichtfeld hat.
    Dies würde bedeuten das nur das geladen wird, was der Spieler wirklich sehen kann.
    Also warum ein Tier, Rauch oder einen Ventilator in den Speicher bringen
    wenn der Spieler dies alles von seiner Position sowie so nicht sehen kann.
    Hier reicht es doch wenn das alles erst erscheint wenn der Spieler auch freie Sicht hat.


    Licht:
    Es wäre ganz gut wenn man die Lichquellen als Außen und Innen bestimmen könnte,
    somit könnte das Spiel alle Lampen und Fackeln usw die Außen stehen am Tage wo man sie nicht
    braucht einfach ausstellen.


    Animationen:
    Wenn ich keine Animation sehe, dann brauch ich sie auch nicht im Speicher.
    Also wenn ich zwar fast daneben stehe aber eine Mauer oder Wand dazwischen ist.

  • Ja, hört sich alles ganz logisch an.


    Ich selbst habe es bei Star Citizen kennen lernen dürfen, da war es auch so das alles in den Client geladen wurde, dann hatte ich gerade an orten wo viel Los war nur noch um die 5 FPS.
    Nun haben sie dort ein neues System eingebaut das der Client nur noch das lädt was für ihn wichtig ist, bedeutet wenn ich in einen Raum bin, höre ich zwar die Geräusche aber mehr wird bei mir auch nicht rein geladen und schon habe ich um die 25 FPS. Was mega ist für meinen Rechner. Auch entscheidet das Spiel was für mich wichtig ist und was nicht. Zb sehe ich zwar alle Hinweisschilder, zb wo es langgeht aber ich sehe nur unscharf Werbeplakate. :thumbsup:


    Hört sich alles super an aber selbst Star Citizen hat Probleme damit da dort auch oft die NPCs vom Himmel fallen oder ich aus einem Fahrstuhl komme und erst schnell alles geladen werden muss.


    Wenn man nun mal bedenkt das Star Citizen über 500 Mitarbeiter weltweit hat und ein dickes Spendenkonto besitzt möchte ich gar nicht wissen wie schwer es für Rising World sein müsste um dieses umzusetzen. :S


  • Dies würde bedeuten das nur das geladen wird, was der Spieler wirklich sehen kann.

    Also grundsätzlich werden immer die Weltdaten vom Server übertragen, die innerhalb des Sichtradius sind (abhängig von der Sichtweiteneinstellung in den Optionen). Diese Chunks werden alle geladen, generiert und an die Grafikkarte gesendet bzw. dargestellt. Allerdings ist "View-Culling" bereits implementiert, d.h. es werden alle die Chunks ausgeblendet, die außerhalb des Sichtkegels der Spielerkamera sind. Sprich die Chunks, die bspw. hinter dem Spieler sind, werden nicht gerendert.
    Im Speicher müssen wir diese Daten aber trotzdem behalten, da es anders nicht funktionieren würde (da das Laden/Generieren einfach zu lange dauert, und es ja äußerst unschön wäre, wenn die Welt sich erst aufbauen muss, wenn der Spieler sich umdreht - und schließlich kann sich der Spieler ja recht schnell umdrehen). Hier würden wir ohnehin keine Performance sparen, eher im Gegenteil, das ständige Nachladen und Generieren der sichtbar gewordenen Chunks würde die Performance eher noch drücken :S


    In dem Bereich haben wir also leider schon das Ende der Fahnenstange erreicht, denn die großen Performancegewinne sind wirklich durch das View-Culling erzielt worden (was aber schon seit Anfang an drin ist). Man kann sich den Unterschied anschauen, wenn man in die Konsole toggleworldgeneration eingibt (was die Weltgenerierung pausiert) und dann etwas wegfliegt, sodass man den gesamten generierten Weltbereich im Sichtfeld hat. Hier kann logischerweise kein View-Culling angewendet werden, sodass die Framerate wesentlich geringer ausfallen dürfte.


    Um aber Missverständnisse zu vermeiden: Wenn ich vom "Ende der Fahnenstange" rede, dann beziehe ich mich nur auf das Ausblenden von nicht-sichtbaren Chunks. Natürlich gibts im Spiel noch an vielen anderen Stellen Optimierungsspielraum ^^


    Es wäre ganz gut wenn man die Lichquellen als Außen und Innen bestimmen könnte,
    somit könnte das Spiel alle Lampen und Fackeln usw die Außen stehen am Tage wo man sie nicht
    braucht einfach ausstellen.

    Die Idee ist eigentlich gar nicht so schlecht, ich behalte das mal im Hinterkopf :) Wir wollen das Lichtsystem ja ohnehin überarbeiten. Derzeit zählen feste Lampen und platzierte Fackeln als "statisches Licht", d.h. das davon abgegebene Licht wird für jeden Chunk von der CPU beim Generieren einmal pro Vertex berechnet und für diesen Vertex gespeichert. Das kostet Zeit und Memory, und je mehr Lampen platziert und je detailreicher die Bauwerke sind, desto größer der Einfluss auf die Performance. Wir werden künftig auf einen Deferred Renderer umsteigen, sodass wir jede* Lichtquelle als dynamisches Licht (welches dann ausschließlich von der GPU berechnet wird) handhaben können. Das spart Memory, in erster Linie werden die Beleuchtungseffekte dadurch aber schöner ;)


    Wenn ich keine Animation sehe, dann brauch ich sie auch nicht im Speicher.
    Also wenn ich zwar fast daneben stehe aber eine Mauer oder Wand dazwischen ist.

    Das ist quasi auch bereits umgesetzt, aber auch das nur im Zuge des o.g. View-Cullings (d.h. zB die Animationen für NPCs, die hinter mir stehen, werden nicht aktualisiert [bzw. nur sehr rudimentär aktualisiert, da das Spiel den aktuellen "Fortschritt" der Animation ja trotzdem kennen muss]). Allerdings werden seit dem letzten Update die Animationen nicht mehr von der CPU berechnet, sondern von der GPU. Im "Speicher" müssen die Animationen leider trotzdem sein, denn auch das ist leider nichts, was spontan ge- und entladen werden könnte (und auch hier wäre es ja doof, wenn ein Tier beim ersten Sichtkontakt für ein paar Sekunden komplett eingeforeren ist bis es sich dann bewegt)^^

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!