1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Information Viele Itemframes/Paintings & Items = FPS-Drop

Dieses Thema im Forum "Informationen & Hilfen" wurde erstellt von Banjix, 11.01.14.

  1. Banjix
    Offline

    Banjix Owner becrafted Team

    Hallo liebe Community,

    ich möchte euch an dieser Stelle über ein gewissen Problems des Minecraft-Clients informieren.

    An Stellen, wo in der Welt punktuell viele Itemframes/Paintings sind kann es zu FPS (Frames per second/Bilder pro Sekunde) kommen. Dies liegt an der Art wie diese im Client gerendert werden. Das Rendering ist so aufwändig, das es zu immensen FPS-Einbrüchen kommt. Dies ist der Grund warum wir Itemframes in Shops gänzlich verbieten mussten.

    Mit dem verschwinden der Itemframes wurden umso mehr Schilder aufgestellt.
    Leider ist der Client bei Schildern auch nicht so ganz schnell und es kommt immernoch zu FPS-Einbrücken im HD. Der Text auf diese muss in einem großen Bereich gerendert werden und dies führt ebenfalls zu FPS-Einbrüchen.
    Aus diesem Grund hat hellboyPS eine Optimierung für unseren Server geschrieben.

    Solltet ihr also in Städten punktuell Itemframes/Paintings/Signs einsetzten, so seid euch bewusst, dass es in eurer Stadt/auf eurem GS zu erhöhten FPS-Einbrüchen kommen kann.

    Eine ausführliche Beschreibung dieser Optimierung (Auszug Teamforum):

    Das liegt an einer Optimierung, die ich vornehme...

    Anstatt bei jedem Chunkwechsel des Spielers alle Chunks um den Spieler (also bis zu 256 Chunks) nach allen Schildern zu durchsuchen (also jedes Tile/jeden Block somit bis zu 65536 Blöcke pro Chunk; macht insgesamt 16777216 Blöcke pro Chunkwechsel pro Spieler) mache ich das nur manchmal (bei Teleports und Logins und manchmal zwischendurch).

    Ansonsten berechne ich beim Chunkwechsel des Spielers nur die 3 Chunks in welche Richtung er sich bewegt hat, und die 3 Chunks, von denen er sich wegbewegt hat...



    Beispiel:

    Der Spieler bewegt sich nach rechts, ich muss dann, anstatt alle Chunks (16x16 um den Spieler) nur die 6 Chunks betrachten, die groß geschrieben sind. Bei den 3 vorderen muss ich die Schilder senden, bei den 3 hinteren die Schilder verbergen.

    Code:
     
    o o o o o		o o o o o
     
    o x x x o		o O x x X
     
    o x P x o  -->		o O x P X
     
    o x x x o		o O x x X
     
    o o o o o		o o o o o
     
     
     
    Legende:
     
    P -- Spielerchunk; hier werden Schilder angezeigt
     
    o -- In diesem Chunk keine Schilder anzeigen
     
    x -- In diesem Chunk Schidler anzeigen
     
    O -- dieser Chunk wird geupdatet, sodass keine Schilder angezeigt werden
     
    X -- dieser Chunk wird geupdatet, sodass Schilder angezeigt werden
     
    


    Wenn also der Status der Schilder konsistent ist, wird nach diesem Prinzip nach der Bewegung des Spielers wieder ein konsistenter Zustand erzeugt. Wenn aber der Status vorher nicht stimmte werden eben nur diese 6 Chunks geupdatet, und bei den anderen kann es zu Fehlern kommen (diagonale Bewegungen des Spielers berücksichtige ich auch).



    Durch diese (notwendige) Optimierung kann es eben zu diesen Fehlern kommen.

    Ich sehe im Moment keine Lösung, da wir unmöglich immer alle Chunks updaten können.

    Diese 6 Chunks sind schon ziemlich CPU-hungrig...

    Es gibt also nicht wirklich eine Möglichkeit, das Schilder-Verbergen "richtig" zu machen.



    Die Fehlermeldungen "Unable to locate sign" sind eine nicht-entfernte Debug-Message von Mojang (schon lange; vielleicht wollen sie sie nicht entfernen).

    Diese tritt auf, wenn der Text auf einem Schild gesendet wird, wenn der Client dort gar kein Schild hat. Das kann dann passieren, wenn der Text von einem Schild durch den Server gesandt wird, nachdem unser Anti-Lag Plugin dem Client gesagt hat, dass da gar kein Schild sei.

    Nicht vermeidbar.
     
    Zuletzt bearbeitet: 11.01.14
    t0bi1998, DrizzleBeat_98, Rounira und 2 anderen gefällt dies.

Die Seite empfehlen