Delta Time

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.

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.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.