Jump to content

Ausgeblendete Objekte in Grafik-Engine nicht berücksichtigen


BahnLand
 Share

Recommended Posts

Hallo Neo,

ich weiß, dass Du bezüglich der Performance-Optimierung im Modellbahn-Studio derzeit mehrere "heiße Eisen im Feuer" hast (insbesondere die Möglichkeit, bei Bodenplatten zukünftig Bereiche mit unterschiedlicher Rastergröße einrichten zu können).

Ich habe diesbezüglich eine kleine Messung durchgeführt, welche zeigt, wie stark welche Modellgruppen die Performance (die FPS-Zahl) beeinflussen. Hierbei habe ich als Basis die FPS-Zahl meiner Gotthard-Anlage bei einer Gesamtansicht mit sämtlichen darauf patzierten Objekten herangezogen. Dann habe ich jeweils eine bestimmte Objektgruppe von der (jeweils vollständigen) Anlage entfernt und mir die daraus resultierende neue FPS-Zahl notiert. Der Zuwachs dieses FPS-Wertes gegenüber dem Basiswert gibt Aufschluss darüber, wies sehr die "ausgeschlossene" Objekt-Gruppe die Performance der Gesamtanlage (negativ) beeinflusst. Hier nun die Zahlen:

Gotthard-Anlage insgesamt mit allen Objekten:7 FPS
Gotthard-Anlage - nur Bodenplatten entfernt:13 FPS
Gotthard-Anlage - nur Rollmaterial entfernt:10 FPS
Gotthard-Anlage - nur Gleise/Straßen entfernt: 4 FPS
Gotthard-Anlage - nur alle anderen Objekte entfernt:9 FPS
zur Kontrolle: leere Gotthard-Anlage (alles entfernt): 61 FPS

          
Es zeigt sich, dass die Bodenplatten meiner Anlage mit einer konstanten Rastergröße von 1 cm den Löwenanteil der Rechenzeit benötigen. Hier sehe ich durch die angekündigte zukünftige Möglichkeit, die Rastergröße auf einer Bodenplatte in verschiedenen Bereichen unterschiedlich groß zu wählen, ein großes Beschleunigungspotenzial (kleine Rastergröße nur noch entlang der Gleis- und Straßentrassen sowie Fluss- und Bachläufe, großes Raster bei ausgedehnten Wald- und Wiesenflächen).

An zweiter Stelle als "Rechenzeit-Verbraucher" hat sich das Rollmaterial (Züge und Autos) herauskristallisiert. Ich vermute, dass sich hier der Anteil am Gesamtverbrauch der Rechenzeit noch vergrößern wird, da ich eigentlich noch mehr Züge und insbesondere im "Individualverkehr" noch viel mehr Autos fahren lassen möchte. Hier wirkt sich insbesondere als sehr belastend aus, dass auch Modelle, die sich im Hintergrund (z.B. in den Abstellbahnhöfen an den beiden Enden der Anlage) befinden, trotz die Sicht verdeckendem Vordergrund "voll berechnet" werden und somit die Grafik-Engine (eigentlich unnötig) belasten. Hierauf möchte ich weiter unten nochmals etwas tiefer eingehen.

Verblüffenderweise hat das Entfernen aller Gleise (einschließlich Straßen- und Flusslauf-Gleise) dazu geführt, dass die FPS-Zahl nicht wie eigentlich erwartet angestiegen ist, sondern sich im Gegenteil fast halbiert hat. Mit diesem Ergebnis hatte ich absolut nicht gerechnet. Kann es sein, dass eine fehlende "automatische Verankerung" der Rollmaterial-Objekte mit den Gleisen dazu führt, dass ihre Positions-Berechnung durch das Fehlen dieses "Lasso-Effekts" zusätzlichen Rechenaufwand benötigt?  

Das Entfernen aller bisher nicht berücksichtigten Objekte (Gebäude, Tunnelelemente, Brücken + Mauern, Steuerelemente, ...) ergab weniger Performance-Gewinn als bei den anderen betrachteten Objekt-Gruppen, woraus ich schließe, dass diese Objekte die Gesamtanlage am wenigsten belasten.


Nun aber nochmals zu den Zügen:
Wird der Großteil davon beispielsweise in einem Schattenbahnhof abgestellt, der normalerweise vom Betrachter nicht einsehbar ist, könnte man diese Züge solange ausblenden, bis sie den Schattenbahnhof verlassen. Bei Objekten mit ausgeblendetem Zustand würde ich nun erwarten, dass sie von der Grafik-Engine bei der Positionsberechnung nicht berücksichtigt würden. Dem ist aber nicht so. Versuche mit der Ausblendung (Sichtbarkeit) aller Bodenplatten, des gesamten Rollmaterials, ja sogar aller Objekte der Gotthard-Anlage haben gezeigt, dass sich die FPS-Zahl hierdurch nicht verändert hat (blieb bei der oben genannten Gesamt-Ansicht konstant bei 7 FPS stehen).

Es wäre meines Erachtens sehr wünschenswert, wenn man ausgeblendete Objekte in der Grafik-Engine unberücksichtigt lassen und damit die Grafik-Bearbeitung insgesamt sehr beschleunigen könnte. Ich würde mir durch diese Möglichkeit viel versprechen, weil ich die Züge, deren Einzelfahrzeuge und Ladungen ich jeweils zu einer Gruppe zusammenfassen würde, mittels der Ereignisverwaltung jeweils als Gruppe ein- oder ausblenden und somit deren Berechnung durch die Grafik-Engine steuern könnte.

Viele Grüße
BahnLand

Link to comment
Share on other sites

Hallo BahnLand,

danke für den ausführlichen Bericht, aber ausgeblendete Objekte werden bereits vollständig von der Grafikengine ignoriert. Nimm z.B. deine 20-Zug-Anlage: Bei deaktivierten Animationen komme ich auf 35 FPS. Blende ich alle Objekte aus (STRG+A, also alles außer Bodenplatten), komme ich auf 180 FPS.

Es ist schwierig, nur anhand der FPS auf Performanceprobleme zu schließen. Bei vielen Bodenplatten mit hoher Auflösung ist z.B. das Raypicking, also das Testen, ob die Maus die Bodenplatte berührt, ein nicht zu vernachlässigender Aufwand, der nur von der CPU abhängt. Hier bringt ein PC mit starker CPU z.B. ganz andere Resultate als ein schwachbrüstiger PC, obwohl beide die gleiche Grafikkarte besitzen könnten.

Bei meinen Performanceanalysen untersuche ich zunächst konzeptionelle Probleme, wie z.B. das von dir angesprochene Phänomen, dass Rollmaterial mehr Aufwand verursacht, wenn es nicht auf Gleisen steht. Das ist korrekt, dass das Studio hier noch nicht optimiert ist und die Suche nach dem nächsten Gleis noch recht lange dauert. Das ist mir bekannt und Teil der aktuellen Performanceverbesserungen, ist aber auch eher ein Sonderfall.

Für weit entfernte Objekte wurden die LOD-Stufen eingeführt. Deaktiviere mal in den Einstellungen die "automatische Sichtweitenoptimierung", um die LOD-Stufen zu deaktivieren. Es gilt auch zu bedenken, dass nicht alle 3D-Modelle LOD-Stufen anbieten. Objekte ausblenden, wenn sie verdeckt werden, ist technisch schwierig zu ermitteln und oft rechenintensiver als der Gewinn am Ende.

Bedenke auch, dass ausgeblendete Objekte, auch wenn sie nicht von der 3D-Engine gezeichnet werden, trotzdem die CPU belasten können. Auch unsichtbare Züge z.B. müssen auf den Schienen positioniert werden.

Zusätzlich ist es schwierig, in einem niedrigen FPS-Bereich zu testen, denn hierdurch lassen sich nur schwer Annahmen machen. So weiß man in diesem Fall nie, ob die CPU oder die Grafikkarte gerade der limitierende Faktor ist. Daher spielt es auch eine Rolle, ob z.B. die Animationen aktiviert oder deaktiviert sind.

Generell kann ich dir sagen, dass es mit der aktuellen Version (2.3.1.4) nur noch wenig konzeptionelle Performanceprobleme gibt. Eine deutliche Beschleunigung lässt sich jetzt nur noch durch folgende Punkte erreichen:

  • Optimierung der 3D-Modelle (insbesondere die Reduzierung der Unterobjekte)
  • Beschränkung der maximalen Sichtweite

An Punkt 1 kann ich im Moment nicht viel ändern, hier sind die Modellbauer gefragt. Bei Punkt 2 gibt es jedoch noch größere Hebel. So will ich z.B. das Ausblenden der Objekte bei bestimmten Entfernungen verbessern. Erstens wird dieses Feature nur wenig von den Modellbauern angenommen, und zweitens kann man durch eine Automatisierung denke ich noch bessere Ergebnisse erzielen. Bisher bleiben einfach noch zu viele Objekte in weiter Entfernung sichtbar, obwohl sie eigentlich kaum noch wahrnehmbar sind. Auch die Bodenplatten würden von LOD-Stufen in weiter Entfernung profitieren. Und am Ende werde ich auch die generelle Sichtweite anpassen. Das Ziel muss sein, maximal 10.000 Unterobjekte zu zeichnen, egal wie groß die Anlage ist.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo Neo,

du schreibst :

Zitat

Optimierung der 3D-Modelle (insbesondere die Reduzierung der Unterobjekte)

 gleichzeitig bietet das MBS aber eine vielfältige Animierungsmöglichkeit an, die wie wir festgestellt haben, für jedes bewegliche Teil 1 Unterobjekt erzeugt.

Dies widerspricht sich meiner Meinung nach.

Meine letzten Modelle sind alle ohne LOD-Stufen, da bei Rollmaterial mit Rad0 und Rad1, 8 x RadAnim, min. 6 animierte Gestänge, den Hauptobjekt plus min. 2 Texturen sich schon 22 Unterobjekte ergeben( je nach Größe des Modells versuche ich unter 30 Unterobjekten zu bleiben). Damit erübrigt sich die Lodstufe 1, da höchsten 3-4 Unterobjekte eingespart werden können. Nach FPS Messungen mit je 100 Modellen ergab sich ein Performance-Gewinn bei den Lodstufen-Modellen von max. 2 FPS.

Dafür gerade bei Dampflokomotiven 3 Modelle zu fertigen ist bei dem geringen Performancegewinn zu viel Arbeit. Hier wäre eine komplette Ausblendung der Modelle bei einer festen Sichtweitenüberschreitung die bessere Lösung.

Gruß Seehund

 

Link to comment
Share on other sites

Hallo Seehund,

das Problem sind weniger die Rollmaterialien. Es gibt noch viele andere 3D-Modelle, besonders ältere, die noch nicht optimiert sind. Aber die Optimierung der 3D-Modelle ist nur ein Teil der Performanceverbesserungen, und auch nur bis zu einem bestimmten Grad möglich. Ab einer bestimmten Anzahl von Modellen kommt jedes System an seine Grenzen, hier helfen dann nur andere Mechanismen, wie z.B. das Ausblenden kleinerer, unwichtigerer Objekte.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo Neo,

wenn ich als Experiment eine relativ große Platte (z.B. 6000x3500cm) mit einem Raster von 100cm erstelle geht die Berechnung eigentlich immer noch sehr zügig von statten. Verringert man die Rastergröße auf z.B. 2cm ist im Prinzip keine einzige aktive Handlung mehr möglich, da für alles minutenlang gerechnet wird - egal ob man die Bodenplatte 'anstreicht', Höhentechnisch verändert oder einfach etwas aus dem Katalog auf die Platte zieht. Da man aber bei einem Raster von 100cm keine wirklichen Landschaften gestalten kann ist die Nutzung praktisch nicht mehr möglich.

Daher ist diese Aussage

Zitat

insbesondere die Möglichkeit, bei Bodenplatten zukünftig Bereiche mit unterschiedlicher Rastergröße einrichten zu können

sehr interessant und wirft die Frage auf wie hoch dies in deiner Prioritätenliste eingestuft ist oder ob du hierfür sogar einen zeitlichen Rahmen angeben kannst (vielleicht für das nächste Update). Natürlich ist eine solche Plattengröße Utopie, dient auch lediglich als Anschauungsobjekt. Aber da sich die Rechenleistung auch bei kleineren Bodenplatten bei Vergrößerung der Rastergröße exponenzial vergrößert, ist dies meiner Meinung nach einer der wichtigsten Punkte zur weiteren Optimierung.

Außerdem ist mir aufgefallen, dass das Modellbahnstudio immer max. 25% der CPU auslastet, selbst wenn minutenlang berechnet wird. Da ich ein System mit Quadcore habe wirft das bei mir die Frage auf ob das Studio bereits für mehrere Kerne gerüstet ist oder wie alte Programme nur einen einzigen Kern der CPU nutzt?

Gruß
MarkoP

Link to comment
Share on other sites

hallo @alle,

insbesondere die Möglichkeit, bei Bodenplatten zukünftig Bereiche mit unterschiedlicher Rastergröße einrichten zu können

so wie MarkoP würde auch ich eine solche einrichtung nur begrüßen und hoffe das das keine probleme mit dem im/export des höhenfeldes gibt.

Außerdem ist mir aufgefallen, dass das Modellbahnstudio immer max. 25% der CPU auslastet

Kerne_auslastung.jpg

nun hier ist mir aufgefallen das die auslastung der kerne (amd FX-8150 8kerne) verschieden ist, wobei der eine kern immer zwischen 70% und 75% ausgelastet ist, selbst wenn das studio minimiert ist.

vg quackster

Link to comment
Share on other sites

Hallo,

einen zeitlichen Rahmen für die Bodenplattenverbesserungen kann ich noch nicht nennen, aber es wird mit jeder neuen Version auch weitere Performanceverbesserungen geben, und die Bodenplatte steht da schon recht weit vorn.

Die Prozessorauslastung des 3D-Modellbahn Studio ist etwas komplexer als auf den ersten Blick. Das Programm verwendet eine Vielzahl von Threads, profitiert also von Mehrkernprozessoren. Trotzdem gibt es Bereiche, die nicht auf mehrere Prozessoren sinnvoll aufgeteilt werden können, und dazu gehört z.B. das "Füttern" der Grafikkarte mit den zu rendernden Objekten. Bei großen Anlagen und je nach System macht das mehr als 70% der Zeit aus, die für ein Frame benötigt werden. Hier lässt sich durch Multithreading nicht sehr viel optimieren, besser wäre hier die Reduzierung der Unterobjekte, die an die Grafikkarte gesendet werden, was auch mein Hauptziel bei jeder Optimierung der 3D-Engine ist, denn hier gibt es noch viel Einsparpotential.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo Neo,

entschuldige wenn ich da als Laie nachfrage.
Deiner Aussage nach lese ich heraus, dass ein Aufteilen der Berechnung für die Grafikkarte auf mehrere Kerne keine Beschleunigung zur Konsequenz hätte. Wenn das füttern der Grafikkarte jedoch ca. 70% der Zeit ausmacht und dies nur von einem Kern übernommen wird und die anderen Leerlauf haben muss sich doch zwangsläufig die Zeit reduzieren wenn diese Berechnung von mehreren Kernen abgearbeitet wird, oder wo ist mein Denkfehler?
Ob dies sinnvoll und logisch umzusetzen ist mal bei Seite gelassen. Mir geht es aktuell einzig um die verständliche Logik.

Wäre es möglich die Priorisierung der unterschiedlichen Rastergrößen zu erhöhen oder sogar auf Nr. 1 zu setzen (Das Thema spukt meines Wissens schon seit Mitte letzten Jahres rum). Ich sehe hier mehr Verbesserungspotenziel als bei der Reduzierung von Unterobjekten; auch wenn letzteres vielleicht schneller und einfacher umzusetzen wäre. Hier würde ich lieber etwas länger warten und dafür (ich sag einfach mal) 80% Leistungssteigerung bekommen als nur kurz zu warten und dafür 30% oder 40% Leistungsverbesserung zu bekommen.

Ich möchte auch nicht unhöflich sein, aber kann es vielleicht sein, dass du Punkte deiner ToDo-Liste übersehen hast?
Zum Beispiel hattest du bereits zweimal geschrieben die Änderung der Aktions-Ansicht in der EV für beide Aktionen mit dem nächsten Update zu 'vereinen', passiert ist es aber nicht. So gibt es mehrere Kleinigkeiten die vielleicht im Eifer der Arbeit für größere Veränderungen untergegangen sind.

Gruß
MarkoP

Link to comment
Share on other sites

Hallo Marko,

der Flaschenhals ist hier die Grafikkarte. Diese kann nur einen Befehl gleichzeitig entgegennehmen, sie von mehreren CPUs aus zu füttern bringt keinen Vorteil, da es nur eine Warteschlange gibt. Es gibt zwar Möglichkeiten, gewisse Vorbereitungen auf mehrere CPUs zu verteilen, aber das geschieht bereits zum Teil und bringt auch nur kleine Verbesserungen.

ToDos gehen nicht von meiner Liste verloren, aber die Prioritäten sind dynamisch, gerade bei Detailverbesserungen, die nur einen kleinen Teil der Nutzer betrifft. Wenn ein erwähntes Feature doch nicht im Update erscheint, dann weil ein anderes Feature eine höhere Priorität erhalten hat. Aus diesem Grund vermeide ich auch konkrete Zeitangaben. Über die Zeit gesehen versuche ich immer, alle Bereiche des 3D-Modellbahn Studios zu verbessern.

Viele Grüße,

Neo

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...