タグ付けされた質問 「fixed-timestep」

11
いつ固定または可変の時間ステップを使用する必要がありますか?
ゲームループは固定または可変の時間ステップに基づいている必要がありますか?常に優れているのですか、それとも正しい選択はゲームによって異なりますか? 可変時間ステップ 物理の更新には「最後の更新からの経過時間」引数が渡されるため、フレームレートに依存します。これは、計算を行うことを意味する場合がありposition += distancePerSecond * timeElapsedます。 長所:スムーズで、コーディングが簡単 短所:非決定的で、非常に小さいまたは大きなステップで予測できない deWiTTERSの例: while( game_is_running ) { prev_frame_tick = curr_frame_tick; curr_frame_tick = GetTickCount(); update( curr_frame_tick - prev_frame_tick ); render(); } 固定タイムステップ 更新は、各更新が一定期間のものであると想定するため、「経過時間」を受け入れない場合もあります。計算はとして行うことができますposition += distancePerUpdate。この例には、レンダリング中の補間が含まれています。 長所:予測可能、決定論的(ネットワーク同期が容易?)、より明確な計算コード 短所:v-syncを監視するために同期されない(補間しない限りグラフィックが不安定になる)、最大フレームレートが制限される(補間しない限り)、フレームワーク内で動作しにくい可変時間ステップ(PygletやFlixelなど)を想定 deWiTTERSの例: while( game_is_running ) { while( GetTickCount() > next_game_tick ) { update(); next_game_tick += SKIP_TICKS; } interpolation …

5
ゲームループでの独立したレンダリングの更新のポイントは何ですか?
ゲームループに関する記事、書籍、ディスカッションは多数あります。しかし、私はかなり頻繁にこのようなものに出くわします: while(running) { processInput(); while(isTimeForUpdate) { update(); } render(); } このアプローチについて基本的に私を悩ませているのは、「更新に依存しない」レンダリングです。たとえば、まったく変更がないときにフレームをレンダリングします。だから私の質問は、なぜこのアプローチが頻繁に教えられているのですか?

2
2つのゲーム状態を補間する方法は?
すべてのオブジェクトの位置が2つの更新状態の間で補間されるシステムを作成するための最良のパターンは何ですか? 更新は常に同じ頻度で実行されますが、任意のFPSでレンダリングできるようにしたいです。そのため、更新頻度よりも低いか高いかに関係なく、1秒あたりのフレーム数に関係なく、レンダリングは可能な限りスムーズになります。 現在のフレームから将来のフレームまで、1フレームを将来の補間に更新します。この回答には、これを行うことについて説明するリンクがあります。 半固定または完全固定のタイムステップ? 編集:補間で最後と現在の速度をどのように使用できますか?たとえば、線形補間だけでは、位置間を同じ速度で移動します。2つのポイント間の位置を補間する方法が必要ですが、補間の各ポイントでの速度を考慮します。パーティクル効果のような低レートのシミュレーションに役立ちます。

6
補間とスレッド化のデータ構造?
私は最近、ゲームでフレームレートのジッターの問題に対処していますが、最適な解決策は、クラシックなFix Your Timestepで Glenn Fiedler(ゲームのGaffer)によって提案されたものだと思われます!記事。 今-私はすでに更新のために固定タイムステップを使用しています。問題は、レンダリングのために提案された補間を行っていないことです。その結果、レンダリングレートが更新レートと一致しない場合、フレームが2倍またはスキップされます。これらは視覚的に顕著です。 それで、ゲームに補間を追加したいと思います-そして、これをサポートするために他の人がどのようにデータとコードを構造化したか知りたいです。 明らかに、レンダラーに関連するゲーム状態情報の2つのコピーを(どこで/どのように)保存する必要があります。 さらに-これはスレッドを追加するのに適した場所のようです。更新スレッドはゲーム状態の3番目のコピーで動作し、他の2つのコピーをレンダリングスレッドの読み取り専用のままにしておくことができると思います。(これはいい考えですか?) -ゲームの状態の二、三のバージョンを持つことは、パフォーマンスを紹介してできているようですはるかにもっと重要なこと-信頼性と開発者の生産性の問題を、単に1つのバージョンを持つに比べて。ですから、私はこれらの問題を軽減する方法に特に興味があります。 特に注意すべきなのは、ゲームの状態に対するオブジェクトの追加と削除の処理方法の問題です。 最後に、いくつかの状態はレンダリングに直接必要ではないか、異なるバージョン(たとえば、単一の状態を保存するサードパーティの物理エンジン)を追跡するのが難しすぎるようです-そのため、どのように知りたい人々はそのようなシステム内でそのようなデータを処理しました。

4
大きなMMORPGはどのくらいの頻度で物理学を更新しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私の知る限り、ほとんどの大規模ゲームでは固定タイムステップを使用して、安定したシミュレーションを実現しています。 ゲームサーバーについて、どの「フレームレート」を課していますか?または、別の言い方をすれば、どの固定タイムステップを使用する傾向があるのでしょうか? 多くの人が「彼らが逃げることができる限り早く」と言うことを知っています。確立されたMMORPGの直接的な経験がある場合、それがどれくらい速いかを知りたい。

1
スリープを使用して単一スレッドでロジック/更新コードをレンダリング/描画コードから分離する
私は、ゲームオブジェクトの速度はFPSによって妨げられるべきではなく、時間に基づくべきであると読みました。更新/描画コードを分離して、描画速度を制限せずにパフォーマンスを最大化し、時間に基づいて一定のロジック更新速度を提供するにはどうすればよいですか? 私の現在の疑似コードは次のとおりです loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } 問題は、描画コードがupdate()レートのパフォーマンスを妨げていることです。また、スリープ状態になると、描画機能とロジック機能の両方が使用できなくなるため、CPUが100%消費されます。 私もSDLを使用していますが、vsyncオプションがないようです。固定および可変時間ステップという用語も聞いたことがありますが、sleep()でそれをどのように行うことができるかわかりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.