In vielen Rennspielen ( z. B. Burnout Paradise ), wenn eine Kollision bevorsteht, wechselt das Spiel automatisch in Zeitlupe und wird in langsamer Reihenfolge fortgesetzt, bis die Kollision abgeschlossen ist.
Ich dachte immer, das sei für die Effekte. Sie möchten keinen Teil der Kollision verpassen! Aber einer meiner Freunde hat kürzlich vorgeschlagen, dies zu tun, um sicherzustellen, dass bei einer Kollision keine überwältigende Verarbeitungsrate erforderlich ist.
Jetzt denke ich, dass es tatsächlich umgekehrt ist. Wenn eine Kollision auftritt und so viele Details in Zeitlupe angezeigt werden, ist die Rechen- und Rendering-Pipeline mit Sicherheit ein Overhead.
Was ist korrekt?
Erhöht oder verringert eine Zeitlupenszene die CPU- / GPU-Auslastung?
Es ist möglich , dass dies der Fall sein könnte. Wenn Sie für die Kollision auf der GPU keine Physik betreiben, bedeutet dies, dass Sie in die Hocke gehen. Aber in Bezug auf die Physik selbst ... ist es möglich.
Wenn Sie die Bewegung einer Reihe von Körpern simulieren, neigen diese dazu, sich auf sehr vorhersehbare Weise zu bewegen. Kräfte und Kraftfelder (dh Schwerkraft) sind leicht vorhersehbar. Wo sich die Dinge bewegen, wird schnell berechnet.
Bis eine Sache die andere trifft. Sehen Sie, in der Physik haben Sie eine sogenannte Zeitscheibe; Dies ist die Zeitspanne, die die Ausführung des Physiksystems abdeckt. Wenn Ihre Zeitscheibe 1/30 Sekunde abdeckt (30 fps für das Physik-Update), verschiebt jedes Physik-Update Objekte 33,3 Millisekunden in die Zukunft.
Wenn Objekte nicht kollidieren, können Sie sie einfach vom Anfang dieser 33,3 ms bis zum Ende verschieben. Die Physik dafür ist einfach und seit Jahrhunderten bekannt. Sie bestimmen einfach die Beschleunigung aus den Nettokräften, wenden diese Beschleunigung für die Zeitscheibe auf das Objekt an und bewegen es mit seiner neuen Geschwindigkeit (Hinweis: Dies kann komplexer sein, wenn Sie eine höhere Genauigkeit wünschen).
Das Problem ist, wenn Objekte kollidieren. Plötzlich müssen Sie jetzt die physikalischen Kräfte innerhalb einer Zeitscheibe verarbeiten und nicht nur einmal am Anfang. Wenn ein Objekt innerhalb eines Physikrahmens zwei- oder dreimal kollidiert , müssen Sie mehr Physikberechnungen wiederholen.
Wenn Sie innerhalb einer Zeitscheibe viele Kollisionen haben, können Sie Ihre Framerate wirklich töten. Die Wahrscheinlichkeit mehrerer Kollisionen innerhalb einer Zeitscheibe nimmt jedoch mit abnehmender Größe der Zeitscheibe ab. High-End-Rennsimulationen wie Forza und Gran Turismo betreiben ihre Physiksysteme mit unglaublichen Frameraten. Ich denke, einer von ihnen erreicht bei seinem Physik-Update bis zu 300 + fps.
Zeitlupe ist das effektive Äquivalent dazu. Durch Verringern der Physik-Zeitscheibe, ohne auch die Rendering- Framerate zu erhöhen , um dies zu kompensieren, erscheint die Welt langsamer. Und deshalb machen Sie es viel weniger wahrscheinlich, dass Sie innerhalb einer Zeitscheibe mehrere Kollisionen bekommen.
Abgesehen davon bezweifle ich, dass Spiele wie dieses deshalb in Zeitlupe laufen. Im Allgemeinen ist es eher für visuelles Flair und dramatische Präsentation. Diese Physiksysteme können im Allgemeinen leistungsmäßig damit umgehen.
quelle
Dies geschieht zunächst für den visuellen Effekt, nicht aus Leistungsgründen.
Die Standardmethode für den Umgang mit der Leistung in physikintensiven Spielen besteht darin, die Anzahl der Objekte zu skalieren, die Objektkomplexität zu skalieren und mit den Engine-Einstellungen zu experimentieren, um zwischen Simulationsgenauigkeit und Leistung zu skalieren. Wenn es Probleme gibt, würden Sie das fallen lassen, was Sie als die am wenigsten signifikanten Merkmale ansehen.
Denken Sie jedoch daran, dass die Branche in den letzten 15 Jahren ziemlich realistische Autospiele entwickelt hat. Bei modernen Computern ist es nicht so, dass sie auf drei Räder zurückgesetzt werden müssen, um die Dinge zum Laufen zu bringen.
Das Problem:
Es ist wahr, dass eine Kollision zusätzliche Arbeit verursachen kann. Wie viel hängt stark von den Besonderheiten des Spiels ab. Eine detailliertere Physik-Engine weist viele kleine Kollisionen zwischen verschiedenen Teilen auf, die eine erhebliche Erhöhung der erforderlichen Berechnung bedeuten können . Dies sollte jedoch bei der Skalierung der Physik berücksichtigt werden. Es ist kein Problem, eine gute Physik zu erhalten, die noch einige Kollisionen bewältigen kann.
Wenn Sie die Physiksimulation einfach langsamer ausführen, um Zeitlupe zu erhalten, fällt die Last proportional ab. Man sollte jedoch beachten, dass die Anforderungen an Zeitlupe und Echtzeitphysik unterschiedlich sind. Sie können es sich leisten, eine geringere Präzision zu haben, wenn Dinge mit Renngeschwindigkeit passieren. Solange der Spieler nicht bemerkt, dass die Physik-Engine falsch ist, ist dies kein großes Problem. Die Zeitlupe erleichtert das Auffangen der Ausrutscher erheblich, sodass die Zeitlupe höhere Anforderungen an die Präzision stellt.
Man kann sich dafür entscheiden, dieselbe Physik zu verwenden, die skaliert ist, um beide Anforderungen zu erfüllen. Diese Lösung erfordert zusätzliche Rechenleistung, ist jedoch einfach zu implementieren und bei modernen Computern perfekt funktionsfähig.
Das Umschalten der Physikeinstellungen ist komplizierter, kann jedoch zu einigen großartigen Kollisionen führen. Man kann nicht nur die Präzision erhöhen, sondern auch die Physikmodelle der Autos gegen detailliertere austauschen, die realistischer brechen. Dieser Modus sollte ungefähr die gleiche CPU-Zeit für die Physik benötigen wie der normale Modus, einfach weil beide so skaliert sind, dass sie mit derselben Minspec-Konfiguration ausgeführt werden.
Ein mittlerer Weg ist die Verwendung einer Physik mit variablen Schritten. Diese erhöhen im Allgemeinen die Präzision, wenn Sie die Simulation verlangsamen, wodurch zumindest ein Teil des Problems gelöst wird. Es gibt andere Gründe, die Physik mit variablen Schritten nicht zu verwenden, aber variable Schritte sind in der Branche immer noch weit verbreitet.
quelle