8

しばらくゲームの開発に携わった後、可変フレーム レート (最後のティックから経過した時間を計算し、それに応じてアクターの動きを更新する) と固定フレーム レート (時間を計算する) の両方に触れてきました。一定時間経過するか、次のウィンドウが来るまでスリープするかを選択します)。

特定の状況に最適な方法はどれですか? 考えてください:

  • さまざまなシステム仕様へのケータリング。
  • 開発/保守の容易さ;
  • 移植の容易さ;
  • 最終公演。
4

5 に答える 5

5

私は可変フレームレート モデルに傾倒していますが、内部的には一部のシステムが固定タイムステップで動作しています。これは、タイム アキュムレータを使用すると非常に簡単に実行できます。物理演算は、固定されたタイムステップで実行するのが最適なシステムの 1 つであり、必要に応じてフレームごとに複数回ティックして、安定性の損失を回避し、シミュレーションをスムーズに保ちます。

アキュムレータの使用方法を示すコード:

const float STEP = 60.f / 1000.f;
float accumulator = 0.f;

void Update(float delta)
{
    accumulator += delta;

    while(accumulator > STEP)
    {
        Simulate(STEP);
        accumulator -= STEP;
    }
}

これは決して完璧ではありませんが、基本的な考え方を示しています。このモデルを改善するには多くの方法があります。入力フレームレートが異常に遅い場合、明らかに解決すべき問題があります。ただし、大きな利点は、デルタがどれほど速くても遅くても、シミュレーションが「プレーヤー時間」でスムーズに移動することです。これは、ユーザーが問題を認識する場所です。

通常、私はグラフィックスとオーディオの側面には触れませんが、物理演算、入力、およびネットワーク コードほど影響を受けるとは思いません。

于 2008-09-12T16:57:11.000 に答える
3

ほとんどの3D開発者は可変FPSを好むようです。Quake、Doom、Unrealエンジンは、システムパフォーマンスに基づいてスケールアップとスケールダウンの両方を行います。

  • 少なくとも、速すぎるフレームレートを補正する必要があります(90年代に実行されている80年代のゲームとは異なり、速すぎます)
  • メインループはとにかくタイムステップでパラメータ化する必要があります。長すぎない限り、RK4のようなまともなインテグレータは物理をスムーズに処理する必要があります。一部の種類のアニメーション(キーフレームスプライト)は、パラメータ化するのが面倒な場合があります。ネットワークコードもスマートである必要があります。たとえば、より高速なマシンを使用するプレーヤーがあまりにも多くの弾丸を発射するのを防ぐためですが、この種のスロットルは、とにかく遅延を補正するために実行する必要があります(アニメーションのパラメーター化はネットワークラグを隠すのにも役立ちます)
  • タイミングコードはプラットフォームごとに変更する必要がありますが、ローカライズされた小さな変更です(ただし、一部のシステムでは非常に正確なタイミングが困難になりますが、Windows、Mac、Linuxは問題ないようです)
  • 可変フレームレートにより、最大のパフォーマンスが得られます。固定フレームレートは一貫したパフォーマンスを可能にしますが、すべてのシステムで最大に達することはありません(これはシリアスゲームのショーストッパーのようです)

パフォーマンスが重要なネットワーク化された3Dゲームを作成している場合は、弾丸を噛み、可変フレームレートを実装する必要があります。

2Dパズルゲームの場合は、固定フレームレートで問題を解決できる可能性があります。おそらく、超低速のコンピューターや来年のモデル用にわずかにパラメーター化されています。

于 2008-09-10T00:17:01.577 に答える
3

ユーザーとして私がもっと頻繁に見たいオプションの1つは、フレームレートが証明書のエンベロープの外側で変化するときに、詳細レベルを動的に変更することです(技術的な意味だけでなく広い意味で)。5FPSでレンダリングしている場合は、バンプマッピングをオフにします。90FPSでレンダリングしている場合は、ベルとホイッスルを少し増やして、CPUとGPUを無駄にするためにユーザーにきれいな画像を提供します。

正しく行われた場合、ユーザーは設定画面に移動して自分自身を微調整することなく、ゲームから最高の体験を得ることができます。また、レベルデザイナーとして、異なるシーン間でポリゴン数を同じに保つことについて心配する必要はありません。 。

もちろん、私はこれをゲームのユーザーとして言いますが、それは深刻なものではありません。重要なゲームを作成しようとしたことは一度もありません。

于 2008-09-10T00:26:54.093 に答える
3

可変長フレーム時間に関して私が遭遇した主な問題は浮動小数点の精度であり、可変フレーム時間はその噛み付き方に驚くかもしれません。

たとえば、フレーム時間 * 速度を位置に追加していて、フレーム時間が非常に短くなり、位置が大きくなった場合、精度のためにすべてのデルタが失われるため、オブジェクトが遅くなったり、動きが止まったりする可能性があります。別のエラー アキュムレータを使用してこれを補正できますが、面倒です。

フレーム時間を固定 (または少なくともフレーム長の下限) にすることで、考慮に入れる必要がある FP エラーの量を制御できます。

于 2008-09-16T18:10:05.253 に答える
0

私の経験は、やや単純なゲーム(SDLとC ++で開発されたもの)にかなり限定されていますが、静的フレームレートを実装するだけで非常に簡単であることがわかりました。2Dまたは3Dゲームを使用していますか?より複雑な3D環境では、可変フレームレートのメリットが大きくなり、難易度が高くなると思います。

于 2008-09-10T00:09:38.160 に答える