Ich möchte auch mal mein Senf hier zu abgeben, und versuche es kurz und bündig zu halten, aber nicht versprochen
Ich selber hab zu C64´er Zeiten angefangen mit Computern, da mußte man noch Befehle eingeben um überhaupt ein Spiel zu laden, oft reichte dort ein Befehl wie
Load "*",8,1
damit wurde meistens das erste Programm auf der Diskette gestartet.
Ich habe mich aber viel mehr für das Programmieren interessiert, erst Basic und dann später sogar Assembler (die Muttersprache eines jeden Computers), heute wird vieles in C++ geschrieben, das sind sogenannte Hochsprachen, genau so wie es Basic auch war, Basic war einfacher zu erlernen und durch einen Interpreter wurde dies direkt in Ausführbaren Code für den Prozessor übersetzt.
Mit dem Amiga änderte es sich, Computer an, Diskette rein und warten bis das Betriebssystem geladen wurde und man konnte los legen, so wie man es heute auch kennt, Computer einschalten und warten bis der Desktop erscheint, Doppelklick auf ein Icon und schon wird das Programm gestartet.
Wenn wir heute über Frameraten reden, war das damals weit anders, damals wurden Takt-Zyklen gezählt und Addiert, denn um so mehr Takt-Zyklen ein Programm benötigt um so langsamer war es, gerade bei Berechnungs-Routinen und sonstigen Algorithmen, man hat überlegt wie man ein Programm oder eine Programm-Routine halt programmierte, entweder auf leichte Erweiterbarkeit oder auf Effizients, also Performance, also Schnelligkeit.
Wo sind die Unterschiede, das ist einfach erklärt:
Erweiterbarkeit, man hat das Programm oder die Routine so programmiert, das man es halt einfach und schnell erweitern kann, man hat sogar schon dinge mit eingebaut die vielleicht erst später oder viel später erst genutzt werden, wenn überhaupt, es wird also so aufgebaut, das halt das Programm oder die Routine ohne großen Aufwand geändert oder erweitert werden kann.
Performance, ein Programm oder Routine wird nur mit dem ausgestattet was gerade aktuell benötigt wird, das Problem ist hier die spätere Erweiterbarkeit dieses Programms oder der Routine, dies kann enormen Zeitaufwand bedeuten, es muß gegebenen falls die Routine komplett neu Programmiert werden und im schlimmsten Fall, das gesamte Programm.
Ein Assembler-Programm was erweiterbar sein soll, verbraucht viele unnötige Takt-Zyklen, bei Performance hat es so wenige Takt-Zyklen wie nur möglich.
Mein Aktuelles System ist noch keine 1 Jahr alt, erst im kommenden März, davor hatte ich ein Asus-Mainboard P7P55 LX mit einer 4 Kern CPU und 3Ghz, 8 GByte Ram und einer GForce GTX 460.
Nun kam das Spiel Cities-Skylines auf dem Markt, einfach nur Geil, leider hatte ich schnell ein Problem mit der Frame-Rate, von den anfänglich 60 FPS sind nach gut etwas mehr als 15.000 Einwohner nur noch 15-20 FPS übrig geblieben, es mußte eine Lösung her, da meine CPU kaum ausgelastet war, aber dafür meine Grafikkarte, stand fest, eine neue Grafikkarte muß her, daher kaufte ich mir die MSI GForce GTX 970 Gaming 4G, und siehe da Cities-Skylines hatte nun keine Probleme mehr, meine Frame-Rate lag bei 15.000-20.000 bei guten 40 FPS, aber ab 20.000 ging es Berg ab, und bei knappen 35.000 Einwohnern lag die Framerate bei 12-23 FPS, wo war der Flaschenhals nun, meine CPU.
So kam es das ich dieses Jahr mir einen neuen PC zusammen gestellt habe, MSI X99A Power-AC Mainboard, Intel-Core I7-5930k (6 Kerne/12 Threads) 32 GByte Ram und meiner schon vorhandenen Grafikkarte, dazu noch 2 Samsung-Pro 850 SSD´s, und schon lief Cities-Skylines bei 30.000 Einwohner mit einer guten Framerate von 30-40 FPS, aber auch erst nach einigen rum Probieren.
Denn es ist wichtig zu wissen, wo man die Grafikkarte einsetzt, also welchen Slot, durch meinen CPU-Lüfter paßt die Karte nicht an Slot 1 rein, so kam sie in Slot 2, aber da kam die Grafikkarte nicht auf Leistung, weil dieser Slot noch mit was anderen geteilt wird, hatte ich auch erst durch lesen im Internet herausbekommen, so kam die Grafikkarte auf Slot 3 und nutzt dort die vollen Lane-Anzahl auch aus.
Nun komme ich zu den Framraten überhaupt und dessen Einbruchsursachen.
Wie einige hier im Postings schon geschrieben haben, nehmen sie als Vergleich andere Spiele, aber man muß hier einen deutlichen unterschied machen, es gibt 2 Unterschiede würde ich mal behaupten, ein Klassisches 3D-Spiel wie Star-Trek, Tomb Raider, Skyrim und wie sie sonst noch heißen mögen, oder ein 3D-Aufbauspiel wie halt Cities-Skylines, Trainfever, Transportfever, Sim-City.
Der Unterschied ist einfach gesagt, die allgemeinen 3D-Spiele haben eine feste 3D-Welt, in der man sich bewegt und mit Objekten interagiert, bei Cities-Skylines, Trainfever oder Transportfever, hat man zwar auch eine Grundlegende 3D-Welt, aber diese Welt kann man verändern.
In den allgemeinen 3D-Spielen, bewegt man sich auf festgelegten Pfaden, in einem 3D-Aufbauspiel werden diese Pfade vom Spieler ständig verändert, man erstellt eine neue Straße und schon muß das Spiel was die Fahrzeuge oder Objekte bewegt, schauen ob dieser neue Pfad vielleicht schneller zum Ziel gelangt als der aktuelle Pfad, und das muß halt ständig berechnet werden, diese Aufgabe hat meistens die CPU.
Nun kommen immer mehr Fahrzeuge und Objekte hinzu und all das muß die CPU berechnen damit dies dann entsprechend dargestellt werden kann, in den anderen 3D-Spielen sind zwar auch vielleicht viele Objekte die sich bewegen, aber diese haben alle ihren festgelegten Pfad oder werden ganz zu Anfang halt eben nur berechnet oder wenn dann ein gewisses Ereignis eintritt.
Wenn man die Auflösung oder generellen Einstellungen einer Grafikkarte verändert und dies keine Auswirkungen auf die FPS hat, dann liegt das Problem wohl eher an der CPU, das die halt viel zu berechnen hat.
Multicore-Optimiert, heißt nicht mehr und nicht weniger, das ein Programm wenigstens 2 Kerne nutzen kann, man könnte das ganze auch soweit aufteilen, 1 Kern ist für das Programm überhaupt, 1 Kern für das Bewegen von Objekten und 1 Kern für die Simulation/Pfadfindung von Objekten, wobei man letzteres z.B. in Train/Transportfever nochmals unterteilen könnte, 1 Kern für die Bewöhner, 1 Kern für die Autos, denn für die Züge, Busse und Trams (Straßenbahnen) gebe ich ja die Pfade vor, trotzdem muß die Pfadfindung aktiv werden, sollte eine Straße/Gleis abgerissen oder hinzugefügt werden, nachschauen ob der Weg noch frei ist oder einen kürzere Strecke zum nächsten Ziel vorhanden ist, genau so bei Signalen.
Sorry war zu schnell mit dem abschicken.
Bei 3D-Simulationen kommen auch die 3D-Mesh-Strukturen noch dazu, um so mehr Punkte oder auch Polygone ein Objekt hat, umso länger braucht es um das die Grafikkarte es darstellen kann.
Bei Cities-Skylines gibt es viele sehr viele unterschiedliche Mods, ich habe mir mal die mühe gemacht und mal geschaut wie schnell Cities-Skylines ohne Mods ist und wie schnell es dann noch ist, wenn diverse Mods aktiviert werden, es war teils schon recht erschreckend.
Ohne V-Sync schafft meine Grafkkarte so 130-140 FPS und das bei einer komplett leeren Karte, wo noch nichts drauf gebaut ist, dann habe ich meine etwas über 50 verschiedene Mods mal durch getestet, immer Einzeln, bei den meistens Mods liegt ein Framraten-Verlust von 1-2 FPS vor, aber es gab oder gibt auch Mods die fressen ganze 10 FPS, nehmen wir nur mal an das alle Mods nur 2 Frames fressen, das sind bei 50 Mods die aktiv sind, dann locker mal 100 Frames also bleiben von 130-140 FPS nur noch 30-40 FPS übrig, dann noch die Details von Objekten (Punkte & Polygon Anzahl) und Texturauflösungen, und schon weiß man wo die FPS-Fresser sind.