2つのネットワーク化された状態の間の補間?


11

私はクライアント側に多くのエンティティをシミュレートしていて(それらの速度はフレームごとにそれらの位置に追加されます)、自分で推測させます。彼らは彼らが最後に見られた場所とその速度の変化についての更新を送信します。これは素晴らしい作品で、他のプレイヤーはこの作品を見つけました。ただし、しばらくすると、これらのプレーヤーはしばらくして非同期化を開始します。これはレイテンシが原因です。

状態間を補間して、正しい位置に表示されるようにしたいのですが。プレーヤーが最後に見た場所とその現在の速度はわかっていますが、最後に見た状態に補間すると、プレーヤーが実際に-後方に-移動します。他のクライアントにはベロシティをまったく使用できず、単に適切な方向に向けて「強打」するだけでしたが、これによりジャギーな動きが発生すると思われます。代替案は何ですか?

回答:


9

このため、シミュレーションは多くの場合、特定のクライアントで特定の時点で実際にレンダリングされているものより1フレーム以上に実行されます。つまり、言い換えれば、レンダリングするのは実際には最後のフレームではなく、2番目の最後のフレームである可能性があります。

この記事で「ahead」という単語のすべてのインスタンスを検索してください。そうすれば、上記で説明したよりも優れた画像が表示されるようになると思います。


さて、300ミリ秒前のプレーヤーをレンダリングし、将来に向けて補間するべきだとほのめかしていますか?(別の状態で、新しい状態が到着すると、これは切り替わります)
Vaughan Hilts

@VaughanHiltsもう一度、記事とコメントを読んでください。ガファーはその分野の専門家であり、彼は私よりもはるかに明確に説明しています。しかし、一般的な考え方は、そうです、あなたが説明した効果を説明するために、レンダリングが多少遅れているのに対して、シミュレーションモデルは進んでいます。このテクニックを説明した唯一の場所ではありません。
エンジニア

2

あなたが言う時:

これらのプレイヤーはしばらくして非同期化し始めます

あなたの問題は、待ち時間の問題よりもクロックが脱調していることに関係しているのではないかと思います。レイテンシの場合、最初の10分と同じくらい悪いはずです。一方のゲームクロックがもう一方よりもわずかに高速で実行されている場合、奇妙なジッターアーティファクトが発生し、時間の経過とともに悪化します。クライアントは将来シミュレートする可能性があり、現在のパケットがサーバーから到着すると、クライアントを引き戻し、エンティティーをジャンプさせます。調べるためにさらにいくつかのテストを実行します。

同期していないゲームクロックが実際に問題である場合は、更新ループを非常に注意深く調べ、すべての更新が渡されたゲーム時間(固定または可変)に基づいており、ゲームが-timeは壁時計のようなものを使用して進められます(レンダリング時間やその他の変数ではありません)。Gafferにはこれに関するいくつかの良い記事があり、ここで固定タイムステップと可変タイムステップについて話す適切な質問があります。お役に立てれば。


これは事実ではありません。事実は、私が行き過ぎであるという事実です(ラグスパイクまたは何か-「停止」するパケットが時間内に受信されず、クライアントが時間内にそれ自体を修正できません。私はこれを確実に知っています。ケース理由はクライアントが停止した後に私はでき、ほとんどの位置にDEFINTELAYの補間のバック。
ヴォーンHilts
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.