Es gibt zwei verschiedene Ansätze, wie man ein Spiel programmieren kann. Einer ist es jede Szene Schritt für Schritt zu berechnen und zu zeichnen, wobei die CPU immer auf die GPU wartet und nur das berechnet, was in der nächsten Szene gezeigt werden soll. Der Andere ist es, wenn man die CPU immer so viel rechnen lässt, wie sie kann, aber nur dann die Ergebnisse verwendet, wenn man sie benötigt.
Viele Spiele berechnen die Physik zum Beispiel so schnell wie sie nur können und erreichen dabei Geschwindigkeiten von beispielsweise 60 fps oder mehr. Wenn die Graka aber nur 30 fps zeichnen kann, dann sind die zusätzlich von der CPU berechneten 30 fps für die Katz gewesen und werden eh nicht genutzt.
Stattdessen ist es dann so, dass die Physikengine und die Grafikengine nicht synchron laufen. Das was auf dem Bildschirm zu sehen ist, ist nicht das, was die Physikengine gerade berechnet hat.
Das hat dann den Effekt, dass die Physikengine auf einmal Kollisionen erkennt, die auf dem Schirm gar nicht zu sehen sind.
Das Gleiche gilt für die KI. So kann es sein, dass die KI schon auf Objekte reagiert, die auf dem Schirm noch nicht bewegt worden sind. Auf der CPU ist die KI also schon diesem Objekt ausgewichen und sie steht jetzt ganz wo anders. Auf dem Bildschirm steht der Spieler aber noch an der alten Stelle und wenn man drauf schießt trifft man ihn nicht, weil er von der Gameengine aus gesehen dort gar nicht mehr steht.
Wenn die CPU schneller rechnet als die GPU es darstellen kann tauchen vieler solche Fehler auf. Der Spieler reagiert ja auf den Inhalt des Bildschirms und nicht auf den bereits fortgeschrittenen Status, wie sie die CPU schon berechnet hat.
Crytek macht das schon richtig und synchronisiert die Physikengine, die KI und alles andere mit der Grafikengine. Das ist schwieriger zu programmieren, als die CPU völlig auszulasten. Das ist nämlich die Methode die man wählt, wenn man sich keine Arbeit machen will. Viele sagen sich:
"Lass die CPU einfach so viel berechnen wie sie will und wir kümmern uns nicht weiter drum." Das ist eine schlechte Programmierung. Nicht das, was Crytek macht.
Glaubt mir. Wer so eine gute Physikengine wie die der CE2 entwickeln kann, der hat auch Ahnung davon, wie man die Resourcen des Prozessors vernünftig verwendet. Crytek ist auch Vorreiter darin Aufgaben auf beliebig viele Kerne zu skalieren und nicht nur auf zwei, wie die Meisten. Die kennen sich schon aus und schreiben nicht so ein Käse, wie manch andere Entwickler.





Zitieren
