デルタタイミング

ゲームプログラミングの概念

デルタタイムまたはデルタタイミングは、ハードウェアやネットワークの応答性に関連してプログラマーの間で用いられる概念です。 [1]グラフィックスプログラミングにおいて、この用語は通常、プログラムの最終更新からの経過時間(つまり、前の「フレーム」)に基づいて、シーナリーを可変的に更新するために使用されます。 [2]この経過時間は、コンピュータの速度や、プログラム内で特定の時点で実行する必要がある作業量によって異なります。また、これにより、グラフィックスがマルチスレッド化されている場合、グラフィックスを個別に計算することもできます。

ネットワークプログラミングでは、インターネット接続の予測不可能な性質のため、デルタタイミングは、次の移動情報のデータパケットを受信するのにどれだけの時間がかかったかに関係なく、コンピュータネットワークを介して受信した移動情報を可変的に更新するために同様の方法で使用されます。[3]

これは通常、毎秒フレームごとにタイマーを呼び出し、現在時刻と最後の呼び出し時刻の間の時間を保持することで行われます。その後、得られた数値(デルタタイム)は、例えばビデオゲームのキャラクターがその時間内にどれだけ移動したかを計算するために使用されます。これにより、更新速度や、遅延の原因がプロセッサ能力の不足かインターネット接続の速度の遅さかに関わらず、キャラクターが画面上を移動するのにかかる現実世界の時間は一定になります。

グラフィックプログラミングにおいては、これにより、特定の時点で発生している事象の複雑さに応じてゲームプレイの速度が遅くなったり速くなったりすることが回避されます。このような状況は、一貫性がなく、違和感を覚える体験(例えば、画面に登場するキャラクターが増えるほどゲームプレイが遅くなったり、画面に登場するキャラクターが1人だけなのでゲームプレイが速すぎたりする)につながります。ネットワークプログラミングにおいては、これにより、各クライアントが最終的に同じアクティビティを同時に認識するようにすることで、各コンピューターのゲーム世界を他のコンピューターと同期させることができます。これは、一部のクライアントで前回の更新から他のクライアントよりも長い時間が経過している場合でも同様です。

遅延が大きすぎると、最終的にはゲームプレイ体験に悪影響を及ぼしますが、Delta Time を使用すると、コンピューターとインターネット接続がゲームの最小ハードウェア要件を満たしている限り、ゲームプレイの一貫性が保たれます。

プログラミングにおけるデルタタイミング測定

デルタタイムは、特定のプログラムの実行にかかった時間をリアルタイムで測定するために使用できます。以下のPythonスニペットは、実行前後の時間のデルタを使用して、サンプル関数の実行時間を計算する方法を示しています。

パイソン

# 時間()
# エポックからの秒数を浮動小数点数で返します
時刻からインポート時刻   

# is_prime(x) を定義する
素数の定義( x ): 
     iが 範囲( 2 , x ) 場合: 
         ( x  %  i )  ==  0 の場合:
            print ( x ,  "素数ではない" )
            戻る
    print ( x ,  "は素数です" )

# デルタ時間を測定
t0  = 時間()   # 測定開始
is_prime ( 13 )   # 関数呼び出し
t1  = 時間()   # 測定終了

デルタ時間 =  t1  -  t0
print ( "is_prime(13) の実行には" ,  deltaTime ,  "秒かかります!" )

デルタ時間とフレームレート

デルタ時間とフレーム レートは必ずしも関連しているわけではありません。ビデオ ゲームは、フレーム レートに関して、フレーム レート依存とフレーム レート非依存の 2 つのカテゴリに分類されます。フレーム レート依存ゲームのフレーム レートは、ソフトウェアを実行しているコンピューターによって異なります。たとえば、フレーム レート依存のゲームが、リフレッシュ レートが 120 ヘルツ (Hz) のコンピューターで 300 フレーム/秒 (fps) で実行される場合、リフレッシュ レートが 60 Hz のコンピューターでは 150 fps で実行されます。標準のデルタ時間式を使用すると、フレーム レート依存のゲームで一時停止画面や意図的なスローモーション効果を作成できます。標準のデルタ時間式は、フレーム間のデルタ時間がゲームを実行しているコンピューターのリフレッシュ レートによって大きく異なるため、通常のゲーム プレイではほとんど使用されません。

ゲームがフレームレート非依存型の場合、フレームレートは事前に設定されており、スペックに関係なくすべてのコンピュータで同じように動作します。フレームレート非依存型は、より多くのユーザーがゲームを利用できるようにするために、グラフィックの最大品質を制限します。フレームレート非依存型は、モバイルゲームやChromebookなどの低スペックコンピュータ向けに最適化されたゲームで特に人気があります。フレームレート非依存型ゲームでは、フレーム間のデルタタイムはゲーム全体で一貫しています。この標準化により、1つのデルタタイム式で、あらゆるタイプのコンピュータを使用するすべてのユーザーに対して一貫したフレームレートを作成できます。[4] [より良い出典が必要]

デルタタイムを使用する場合

デルタタイミングは、ゲームのフレームレートがハードウェアに依存しない必要がある場合に威力を発揮します。例えば、モバイルデバイスや低スペックのコンピューターで実行する必要があるゲームなどが挙げられます。ビデオゲーム開発者は、画面上のオブジェクトの移動速度を標準化するためにデルタタイミングを使用する場合もあります。例えば、キャラクターが画面上を一定の速度で移動する場合、デルタタイミングを使用することで、その移動速度が一定で変動しないことを保証できます。デルタタイミングを移動に使用することは、インターネット接続が不安定なユーザーや低スペックのコンピューターハードウェアを使用しているユーザーにとって特に便利です。この方法は、画面上のオブジェクトの移動を調整することもできます。

移動にデルタタイミングを使用するデメリットの一つは、多様な動きや移動速度を組み込んだゲームでは複雑になりやすいことです。例えば、あるゲームでは全てのキャラクターに歩行速度とダッシュ速度が指定されているものの、キャラクターは車、ボート、飛行機などの乗り物も運転する場合があります。開発者がこれらの移動速度をそれぞれ異なるものにしたい場合(ゲームを可能な限りリアルにするため)、それぞれの移動速度ごとに別々のデルタタイミング式が必要になります(ただし、これらの動きが一定速度で発生すると仮定した場合のみです)。動きが一定速度で発生しない場合、デルタタイミング式は効果を発揮しません。[5] [より良い出典が必要]

参照

参考文献

  1. ^ 「ゲーム作成ソフトウェア - Construct 3 ★★★★★」。
  2. ^ 「HTML 5 Canvas と JavaScript を使用した時間ベースのアニメーション | Viget」。
  3. ^ Cook, Shane (2012-12-28). CUDAプログラミング:GPUによる並列コンピューティング開発者ガイド. Newnes. ISBN 978-0-12-415988-4
  4. ^ Ashley (2017年9月26日). 「デルタ時間とフレームレートの独立性」Construct.net . 出典不明. 2022年2月5日閲覧。
  5. ^ Drew Coleman (2019年7月24日). 「デルタタイムを理解する」. Medium.com . 出典不明. 2022年2月5日閲覧。
「https://en.wikipedia.org/w/index.php?title=Delta_timing&oldid=1326223913」より取得