Delta Time

aus Wikipedia, der freien Enzyklopädie

Delta Time bezeichnet in der Spieleprogrammierung und in der Computergrafik ein Konzept, das eine hardwareunabhängige Geschwindigkeit von Abläufen in einer Spielschleife gewährleistet. Delta Time beschreibt die Zeitdifferenz zwischen dem vorhergehenden Bild und dem aktuell gerenderten Bild. Das Konzept der Delta Time wurde eingeführt, um ein Problem früher Computerspiele zu beheben, bei dem Spiele abhängig von der Geschwindigkeit des Prozessors unterschiedlich schnell abliefern und somit auf schnelleren Prozessoren als vom Spieleentwickler vorgesehen teilweise nicht mehr spielbar waren.[1]

Funktionsweise und Anwendung

Die Bildfrequenz beim Durchlaufen einer Spielschleife ist von der Taktfrequenz des Prozessors abhängig. Ein Prozessor mit einer Taktfrequenz von zum Beispiel 64 MHz durchläuft die Schleife doppelt so schnell als ein Prozessor mit einer Taktfrequenz von 32 MHz. Somit können neue Bilder auch doppelt so schnell gerendert werden. Für jedes gerenderte Bild wird ein Timer aufgerufen, der die vergangene Zeit zwischen dem derzeitigen und dem letzten Aufruf speichert. Die resultierende Zahl (meist in Millisekunden oder Sekunden) wird verwendet, um z. B. die Geschwindigkeit der Transformation eines Objektes in der Spielwelt unabhängig von der Bildfrequenz darzustellen.

Das Konzept kommt in der modernen Spieleprogrammierung zum Einsatz und ist Bestandteil vieler Spiel-Engines wie Unity3D[2] oder der Unreal Engine[3].

Die Verwendung von Delta Time in der Spielschleife macht das Spielgeschehen nicht in allen Fällen unabhängig von der Geschwindigkeit der Hardware. Beispielsweise verwenden manche Physik-Engines das Verfahren der numerischen Integration zur Approximation gewisser Bewegungsabläufe. Der Approximationsfehler ist abhängig davon, wie groß die Zeitschritte sind, mit der das Integral berechnet wird. Daher können Bewegungsabläufe dennoch unterschiedlich ausfallen, je nachdem, mit welcher Frequenz die Spielschleife aufgerufen wird.[4]

Beispiel

Unter der Annahme, dass die Funktion update() in einer Spielschleife aufgerufen wird, wird der Würfel bei einer Bildfrequenz von 60 Bildern pro Sekunde um 120 Meter skaliert. Bei einer Frequenz von 30 Bildern pro Sekunde würde er nur um 60 Meter skaliert.

void update() {
  //Veränderung der Skalierung um 2 Meter/Bild
  cube.scale += 2
}

Wird der addierte Wert nun mit Delta Time multipliziert, geschieht die Änderung der Größe nicht mehr pro Bild, sondern pro Sekunde.

void update() {
  //Veränderung der Skalierung um 2 Meter/Sekunde
  cube.scale += 2 * deltaTime
}

Bei 30 Bildern pro Sekunde beträgt Delta Time

Bei 60 Bildern pro Sekunde beträgt Delta Time

Für die Skalierung pro Sekunde , wobei der Skalierungsfaktor und die Anzahl der Bilder pro Sekunde sind, ergibt sich nun für beide errechnete Werte:

Die Skalierung pro Sekunde beträgt nun für beide Bildfrequenzen 2 Meter pro Sekunde.

Literatur

  • Sanjay Madhav Madhav: Game Programming Algorithms and Techniques: A Platform-Agnostic Approach. Erste Auflage. Addison-Wesley Professional, 2013, ISBN 978-0-321-94015-5.

Weblinks

Einzelnachweise

  1. Sanjay Madhav Madhav: Game Programming Algorithms and Techniques: A Platform-Agnostic Approach. Erste Auflage. Addison-Wesley Professional, 2013, ISBN 978-0-321-94015-5, S. 10 ff.
  2. https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
  3. https://docs.unrealengine.com/en-US/API/Runtime/Core/Misc/FApp/DeltaTime/index.html
  4. Sanjay Madhav Madhav: Game Programming Algorithms and Techniques: A Platform-Agnostic Approach. Erste Auflage. Addison-Wesley Professional, 2013, ISBN 978-0-321-94015-5, S. 150.