1

私は avia シミュレーター プロジェクトにオープン ソースの Torque 3d ゲーム エンジンを使用しています。複数の IG (画像生成) PC から単一の画像を生成する必要があります。各 IG ディスプレイには、特定の角度オフセットを持つ独自のビュー カメラがあり、LAN 経由でサーバーから現在位置に関する情報を取得します。

私はすでにマルチIGシステムをセットアップしています。ネットワーク接続は堅牢です (1 ミリ秒未満)。フレーム レートも良好です。各 IG で約 70 FPS です。ただし、一部の IG は他の IG よりも速くビューを更新しているため、移動中に全体像が壊れているように見えます。

IGの更新を同時に行うソリューションを探しています。おそらく、LAN経由で接続されたさまざまなPCを1つとして機能させる、ある種の正確な時刻同期アルゴリズムです。

4

1 に答える 1

1

私はもっ​​と単純な問題を抱えていましたが、私のアプローチはあなたを助けるかもしれません.

すべてのマシンで、たとえば 15 ミリ秒刻みでクロックを実行する必要があります。各画像は、特定の目盛りに対して正しく生成され、その目盛り ID 時間でマークされる必要があります。ディスプレイ マシンは、それ自体のクロックをチェックし、表示する特定のティック数 (時間) を決定し、その特定の時間の画像を取得して表示することができます。

(これについて考える正しい考え方を持つために、ネットワークが非常に悪いと想像し、1 つの IG が現在の表示ティックよりも 1000 個の画像を配信し、別の IG が 5 ティック遅れていると考えてください。この種のシステムについて書くと、結果は本当に見えますお持ちの方で結構です。)

理想的には、ディスプレイを IG の少し後ろで実行して、現在のティックの完全な画像セットを常に保持するようにします。私はクライアントサーバーのセットアップを行い、更新が不足している場合はディスプレイ(クライアント)タイマーを遅くし、遅れすぎている場合は速度を上げました。 すべての IG マシンを同期する必要があるため、ディスプレイにマスター クロックを表示し、遅れている IG マシンをスピードアップするためにメッセージを送信する方がよい場合があります。(私が経験した可変ネットワーク遅延はないかもしれませんが、それらを計画するのが最善です。)

重要なのは、各画像を特定の時間に作成する必要があること、ディスプレイには表示されている時間の画像のみが含まれていること、および合成画像が適切なタイミングで (15 ミリ秒ごとに) 表示されることです。また、タイムリーに何かを行うために、ネットワークやマシンに依存しないでください。フィードバックを使用して、すべてを同期させます。

フィードバックの追加:

時間 T のフレームの最後の画像が、ディスプレイ コンピュータの時間 (リアルタイム) で時間 T から 5 ミリ秒後に到着するとします。時間 T のフレームを T プラス 10 ミリ秒で表示すると、誰も遅延に気付かず、画像を組み立てる十分な時間が得られます。一定の (10 ミリ秒) 遅延を使用すると、特に遅延を十分に大きくする場合にうまくいく場合があります。常にまったく同じネットワークで実行している場合は、これが最適な方法かもしれません。

しかし、すべての IG マシンがリアルタイムで正確に同期され、イメージを生成するのに一定の時間しかかからず、予測可能な時間内にイメージをディスプレイ マシンに配信することに依存しています。

私が提案したいのは、受信した画像のタイム スタンプに基づいてディスプレイ マシンに遅延を判断させることです。必要な画像を時間内に取得できない場合は遅延を増やし、すべての IG がディスプレイが必要とする数よりも多くの画像を実行している場合は遅延を減らします。(ときどき表示される非常に遅い画像は無視した方がよいかもしれません。時代遅れの画像、著しく遅れて実行されているディスプレイ、または著しく速度が上がったり遅くなったりするディスプレイなど、どちらがより煩わしいかを判断する必要があります。 )

私の最初の回答では、IGマシンを時間どおりに実行し続けるためにディスプレイからの何らかのフィードバックを提案していましたが、それはやり過ぎかもしれません.コンピュータの時計はおそらくそれで十分です.

非常に一般的に、2 つのプロセスが時間をかけて調整する必要がある場合は、それぞれが慎重なタイミングのスケジュールに固執するのではなく、歩調を合わせる (フィードバック) ように互いに話し合うことが最善です。

于 2013-10-02T18:14:10.593 に答える