Ich frage mich wirklich langsam, wie es zu so grossen Unterschieden auf den Rechnern verschiedener User hier kommen kann, obwohl es mit der Leistung selbiger nicht zu erklären ist
Ich denke, dass es an der Kombination aus CPU und Betriebssystem liegt. Es könnte durchaus sein, dass das Spiel für aktuelle Prozessoren optimiert wurde, die natürlich einen optimierten Befehlssatz haben. Kommt man nun mit einem 5 Jahre alten Rechenwerk daher, und sei es auch noch so schnell, müssen die modernen Befehle umständlich emuliert werden und das Spiel läuft plötzlich um den Faktor 20 langsamer. Ich habe vom Lesen auch das Gefühl, dass überwiegend Leute mit Windows 10 Probleme haben.
Alles anzeigenPrinzipiell braucht der Entwickler lediglich die Direkt X Schnittstelle anzusprechen, den Rest übernimmt dann Direkt X für die Grafik in Kombination mit Grafiktreiber und der CPU, Windows, die CPU für grundlegende Berechnungen der Spielemechanik... etc etc...
Fakt ist, dass die Hardware im Durchschnitt unterfordert ist und das Spiel trotzdem besonders im Lategame extrem an Performance verliert. Das liegt hauptsächlich an der Berechnung der eigentlichen Simulation, welche nicht verschönert wurde (wie z. B. beim letzten SimCity oder bei Cities Skyline) , sondern mit tatsächlichen Werten arbeitet. Jeder Bewohner hat ein echtes Haus, echte Arbeit... Die Simulation ist extrem umfangreich. Und bei mehr als 20000 Einwohnern mit seinen zig tausend Parametern... Da muss ganz viel zu einer bestimmten Zeit und in einer festgelegten Reihenfolge berechnet werden.
[...]
Diese selbst entwickelte Engine liegt dem Spiel aber nunmal zu Grunde. Das Budget baut darauf auf.
Was würde die Entwicklung über eine andere, leistungsfähigere aber dafür kostenpflichtige Engine kosten? Kann man das dann noch mit einem 5 Mann starken Team stemmen und können die zu erwartenden Verkaufzahlen die Ausgaben decken?
Ich will Dir nicht zu nahe treten, aber das klingt alles sehr nach Hörensagen. Nein: Man muss nicht einfach irgendwie so "lediglich die DirectX-Schnittstelle ansprechen", und schon läuft das Spiel von selbst. Hinter TpF werden aus meinem Erfahrungshorizont mit Sicherheit mindestens 1 Mio. Zeilen Code stehen, die erst einmal geschrieben und erdacht werden müssen. Ein Computerspiel entwickelt man nicht mal eben so nebenher.
Also wenn es an diesen Kosten scheitern würde braucht man gar nicht erst anfangen zu programmieren. Ich möchte nicht wissen wie viel Mannstunden (sprich Geld) die Eigen-(Weiter- ?) Entwicklung der eigene Engine gekostet hat.
Kann mir ehrlich gesagt nicht vorstellen, dass Eigenentwicklung günstiger als die o.g. Engines ist.
Eine Engine alleine ist nicht alles. Außerdem, und das vergessen viele, schnürt eine fertige Engine immer ein Korsett, aus dem man sich nur schwer befreien kann. Sowohl Unity wie auch Unreal sind beide Engines, die ursprünglich für Spiele aus der Ego-Perspektive entwickelt wurden. Für eine komplexe Aufbausimulation wie TpF können sie sich als völlig ungeeignet erweisen, da hier die Anforderungen ganz anders gesteckt sind. Hier geht es nicht darum, den einzelnen Baum mit einem möglichst hohen LOD (Detailgrad) darzustellen oder eine perfektionistische Tierfellsimulation zu bieten. Was bei TpF (und anderen Aufbauspielen) notwendig ist sind verformbares, hochauflösendes Terrain, die Darstellung von zahlreichen Objekten gleichzeitig und und und. Noch dazu kommt, dass diese Engines oft viel Fachwissen benötigen, um sie richtig zu bedienen. Klassische Programmier-Expertise reicht hier oft nicht aus.
Kurzum: Aus fachlicher Sicht gibt es überhaupt keinen Anhaltspunkt anzunehmen, dass das Spiel auf Basis der Unity-Engine (o.Ä.) in irgend einer Form besser geworden wäre. Dazu kommt, dass bereits vom Vorgänger eine Basis vorhanden war, die man als Basis nehmen konnte. Dazu auch:
Da stellt sich mir dann die Frage:
Wie problemlos lässt sich eine solche Engine einbetten? Ich bin kein Profi-Programmierer und weiss daher nicht, wie schwer es ist, von der eigenen Engine auf eine andere umzusteigen...
Das Haus und den Hof nehme ich gerne. Die Wette verlierst Du nämlich (mit hoher Wahrscheinlichkeit). Das Problem hier ist die Simulation, und die hat mit der Engine nichts am Hut. Die Simulation von 20.000 virtuellen Bürgern ist nicht ohne. Hier kann nur durch Parallelisierung und starke Optimierung durch einige Kunstgriffe ein sinnvolles System erschaffen werden. So macht es beispielsweise einen Unterschied, ob ich in jedem Frame die Position aller Bürger anhand ihrer Wege neu berechne, was relativ leicht umzusetzen aber schrecklich unperformant ist, oder ob ich mir nur diejenigen, die gerade sichtbar sind "intelligent" herausfiltere und deren Bewegung simuliere. Ich kann quasi für jeden Bürger eine exakte Wegstrecke berechnen und dann in jedem Frame die x- und y-Koordinaten anpassen, oder ich speichere zum Zeitpunkt des Spawns den Soll-Weg und die Ankunft am Ziel. Letztlich brauche ich dann in jedem Frame nur noch meine Liste jedes Frame abfragen und wenn die Timer abgelaufen sind die Bürger/Waren dem nächsten Lager/Ort zubuchen. Solch eine Optimierung erfordert jedoch erhebliche Gedankenarbeit. Da ist es einfacher, jeden Bürger quasi in einer For-Each-Schleife nach Schema F abzukanzeln. Und ich denke, dass TpF genau letzteres macht.
Eingebettet wird da letztlich gar nichts. Man kann sich das Ganze eher so vorstellen, dass man das Spiel an die Engine "heranprogrammiert". Eine Engine stellt einen gewissen Katalog an Schnittstellen bereit, welche vom eigentlichen Spiel angesprochen werden. Da könnte es beispielsweise einen Befehl geben, um ein Objekt an eine bestimmte Stelle im virtuellen Raum zu platzieren. Das eigentliche Spiel gibt nur Objekt und Koordinaten an die Engine weiter, der Rest läuft in einer "Blackbox" ab.
Da diese API-Befehle in keiner Weise genormt sondern stets propritär sind kommt der Tausch der Engine quasi einer Neuentwicklung gleich. Klar kann man die meisten Codefragmente wiederverwenden, jedoch muss vielen angepasst und einiges komplett neu geschrieben werden, da auch nicht jede Engine gleich funktioniert. Es ist völlig unrealistisch, ein fertiges Programm an eine komplett andere Engine anzuflanschen.