タグ付けされた質問 「interpolation」

一連の既知の結果に基づいて結果(通常は数値)を推定する方法。

5
テクスチャアトラスでテクスチャブリーディングを回避する方法
私のゲームには、キューブで作られたMinecraftのような地形があります。ボクセルデータから頂点バッファーを生成し、さまざまなブロックの外観にテクスチャアトラスを使用します。 問題は、離れた立方体のテクスチャがテクスチャアトラス内の隣接するタイルで補間されることです。その結果、キューブ間に間違った色の線が表示されます(グラフィカルな欠陥を確認するには、以下のスクリーンショットをフルサイズで表示する必要がある場合があります)。 今のところ、これらの補間設定を使用しますが、すべての組み合わせを試しましたが、GL_NEARESTミップマッピングがなくてもより良い結果は得られません。 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); また、テクスチャ座標にオフセットを追加してタイルのわずかに小さい領域を選択しようとしましたが、不要な効果はカメラまでの距離に依存するため、問題を完全に解決することはできません。とにかく遠い距離でストライプが発生します。 このテクスチャのにじみをどのように解決できますか?テクスチャアトラスの使用は一般的な手法であるため、一般的なアプローチがあるかもしれません。悲しいことに、コメントで説明されているいくつかの理由により、異なるテクスチャやテクスチャ配列に変更することはできません。

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

3
一部のネットワークゲームが補間を使用し、一部がリモート移動にパスファインディングを使用するのはなぜですか?
これは少々未解決の質問ですが、私は誰かが両方の正当な理由を提供してくれることを望んでいます。 両方の簡単な例: 補間モデル クライアントが位置の更新を頻繁に受信し、リモートがこのデータの補間を使用して位置を更新するValveモデルを考えてください。 経路探索 このモデルでは、ユーザーが宛先を送信し、全員がその宛先にパスファインディングすると考えます。 どのタイプのゲームがそれぞれに適していますか?

3
ピクセルアートモーションの「階段効果」をどのように回避できますか?
アンチエイリアシングによるぼかし効果を避けるために、正確なピクセル座標でスプライトをレンダリングしています(スプライトはピクセルアートであり、フィルター処理するとひどく見えます)。ただし、オブジェクトの移動には可変速度、重力、物理的相互作用が含まれるため、軌跡はサブピクセル精度で計算されます。 スクリーンスペースの速度が十分に大きい場合(vΔtが2または3ピクセルより大きい場合)、これは非常にうまく機能します。ただし、速度が小さい場合、特に対角線に沿って顕著な階段効果が現れることがあります。これは、非常に遅い画面空間速度(v << 1ピクセル/秒)ではもはや問題ではないため、中間速度値のソリューションを探しています。 左側には、オブジェクト座標を単純に丸めることで得られる、大きな速度のプロットされた軌跡があります。中央では、速度が小さくなると何が起こるか、そして私が話している階段効果を見ることができます。右側に、取得したい軌跡の軌跡を示します。 大小の速度で元の動作を維持しながら、エイリアシングを最小限に抑えるために軌跡をフィルタリングするアルゴリズムのアイデアに興味があります。Δt、瞬時の位置と速度、および任意の数の以前の値にアクセスできますが、リアルタイムシミュレーションであるため、将来の値については知りません(必要な場合、特定の仮定の下で推定値を推定できます) 。物理シミュレーションのため、突然の方向変更も発生する可能性があることに注意してください。

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

6
いつ外挿し、いつ補間する必要がありますか?
いつ外挿するか、いつ内挿するかを理解するのに苦労しています。彼はゲームのガファーで、補間するように言ったが、別の記事ではプレーヤーを推定することを推奨した。だから私の質問は、いつ外挿する方が良いのか、いつ補間する方が良いのかということです。

2
2つのベクトル間を線形補間するにはどうすればよいですか?
私は、クライアントがどこにいて、どこに行くのかという速度ベクトルを持っています。そして、クライアントがどこにいるかを伝えるサーバーから来る同じベクトルを持っています。時々少し違うので、現在の位置とサーバーの正しい位置の間を補間したいと思います。 黒い矢印はクライアント速度ベクトル、赤い矢印はサーバー上のクライアント速度ベクトル、青い矢印は計算して補間したいものです。 青いベクトルを計算するにはどうすればよいですか?次に、どうすればそれらの間を線形補間できますか?

3
マルチプレイヤーゲームでの位置の補間
マルチプレイヤーゲームの帯域幅を節約するために、サーバーティックごとにすべてのオブジェクトを更新するのではなく、各オブジェクトがupdateRateを持ち、このオブジェクトがXサーバーティックごとに更新されることをゲームに伝えます。 オブジェクトの更新メッセージを受け取ったとき、次の更新が来ると予想される時間を計算します。 origin = serverCurrentPosition diff = serverNextPosition - origin arriveTime = now + timeBetweenTicks * updateRate オブジェクトを描画するとき、次の更新までの残り時間を計算し、それに応じて位置を補間します。 step = 100 / timeBetweenTicks * updateRate delta = 1 - step * ((arriveTime - now) / 100) position = origin + diff * delta それは動作します...しかし、図面にはまだ少しのジッターがありますが、私の理論では、スケーリングはある程度のラグを処理する必要があるので、すべてがうまくいくはずです、そうでしょうか? ここでの質問は、これが最良のアプローチですか?実際の遅延を計算に入れる必要がありますか?もしそうなら、どうすればいいですか?私はいくつかの実験を行いましたが、ジッターは悪化しました。

5
Bresenhamのラインアルゴリズムを浮動小数点エンドポイントに一般化するにはどうすればよいですか?
私は2つのことを組み合わせようとしています。私はゲームを書いていますが、浮動小数点の端点を持つ線上にあるグリッドの正方形を決定する必要があります。 さらに、接触するすべてのグリッド正方形(つまり、ブレゼンハムの線だけでなく、青の線)を含める必要があります。 誰かが私にそれを行う方法に関する洞察を提供できますか?明白な解決策は、単純なラインアルゴリズムを使用することですが、より最適化された(高速な)ものはありますか?

3
Lerping関数でTime.deltaTimeを使用する理由
私の理解では、Lerp関数は、との間の3番目の値()を使用して、2つの値(aとb)の間を補間します。で、値aがで、返される値は、返されます。値0.5で、途中の間とが返されます。t01t = 0t = 1bab (次の図は、滑らかなステップで、通常は3次補間です) 私はフォーラムを閲覧していて、この回答で次のコード行を見つけました。transform.rotation = Quaternion.Slerp(transform.rotation, _lookRotation, Time.deltaTime); 「なんてばかだ、彼にはわからない」と私は思ったが、40以上の賛成票があったので、試してみて、十分に機能した。 float t = Time.deltaTime; transform.rotation = Quaternion.Slerp(transform.rotation, toRotation, t); Debug.Log(t); との間0.01でランダムな値を取得し0.02ましたt。関数はそれに応じて補間すべきではありませんか?これらの値が重なるのはなぜですか?Lerpについて私が理解していないのは何ですか?

4
長方形の周りをどのように補間しますか?
点が長方形の周りを移動するような豪華なアニメーションを作りたいのですが。一度にポイントの位置を見つけたいt。 長方形は次式で与えられX、Y、WidthおよびHeight。 これのアルゴリズムはありますか? sin/ cosをサークルに使用しました。長方形の同等のアプローチは何ですか?

4
SmoothVideo Projectで使用されているようなフレーム補間は、パフォーマンスに大きな影響を与えずにゲームのフレームレートを上げるオプションになるでしょうか?
SmoothVideoプロジェクトはフレーム補間を使用してビデオのfpsを24から60に増やします。結果はかなり印象的です。これが適用できるのか、ビデオゲームで見栄えが良いのかと思っていました。 すべてのフレームをレンダリングするよりもはるかに少ないリソースを使用するため、ローエンドのリグは、ある程度の妥協点ではるかに優れたリグの品質でレンダリングできます。私はそれが正確ではないことを知っており、補間されたフレームを生成および挿入できるように最新のフレームを保持する必要があるため、入力レイテンシがわずかに増加します。ただし、フレーム全体ほど悪くはありません。私の推論では、ラグだけが補間時間に元のfpsリフレッシュ時間の半分を加えたものになります。したがって、30 fpsの場合、33ms / 2 +補間時間になります。 このラグは、過去のファーストパーソンのゲームには適さないかもしれませんが、ペースの遅いゲームではそれが妨げになるとは思いません。 開始レートが高くなるとラグは低くなるので、60 fpsから100 + fpsにすると、システムに非常に負担がかかる一方で、エクスペリエンスはわずかながら向上しますが、確かに価値があると思います。

2
2つのネットワーク化された状態の間の補間?
私はクライアント側に多くのエンティティをシミュレートしていて(それらの速度はフレームごとにそれらの位置に追加されます)、自分で推測させます。彼らは彼らが最後に見られた場所とその速度の変化についての更新を送信します。これは素晴らしい作品で、他のプレイヤーはこの作品を見つけました。ただし、しばらくすると、これらのプレーヤーはしばらくして非同期化を開始します。これはレイテンシが原因です。 状態間を補間して、正しい位置に表示されるようにしたいのですが。プレーヤーが最後に見た場所とその現在の速度はわかっていますが、最後に見た状態に補間すると、プレーヤーが実際に-後方に-移動します。他のクライアントにはベロシティをまったく使用できず、単に適切な方向に向けて「強打」するだけでしたが、これによりジャギーな動きが発生すると思われます。代替案は何ですか?

2
クライアント側予測でリアルタイムのランダムな動きを処理する方法
クライアントとサーバーで同じ「物理」ループを実行するリアルタイムマルチプレーヤーゲームを構築しています。私は、本質的なランダムな動きであるステアリング動作「ワンダー」を使用しています。ワンダーアルゴリズムを実行すると、クライアントとサーバーは異なる乱数を生成します。 自然にランダムに見える動きをどのように保つことができるのか疑問に思っていますが、クライアントとサーバーが同じ結論になることを保証する定数を使用します。

2
オブジェクトの動きを滑らかにするために、実際に補間はどのように機能しますか?
過去8か月間、同じような質問をいくつかしましたが、あまり喜びがなかったので、質問をより一般的なものにします。 OpenGL ES 2.0のAndroidゲームを持っています。その中に私は次のゲームループを持っています: 私のループは固定時間ステップの原理(dt = 1 / ticksPerSecond)で動作します loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ updateLogic(dt); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; } render(); 私の統合は次のように機能します: sprite.posX+=sprite.xVel*dt; sprite.posXDrawAt=sprite.posX*width; 今、すべてが私が望むようにかなり機能します。オブジェクトを特定の距離(画面の幅など)で2.5秒で移動するように指定できます。また、ゲームループで許可するフレームスキップのため、ほぼすべてのデバイスでこれを実行でき、常に2.5秒かかります。 問題 ただし、問題は、レンダリングフレームがスキップされると、グラフィックが途切れるということです。それは非常に迷惑です。フレームをスキップする機能を削除すると、すべてが好きなようにスムーズになりますが、異なるデバイスでは異なる速度で実行されます。したがって、それはオプションではありません。 フレームがスキップする理由はまだわかりませんが、これはパフォーマンスの低下とは関係がないことを指摘したいと思います。コードを1つの小さなスプライトに戻し、ロジックはありません(必要なロジックは別として)スプライトを移動します)と私はまだスキップされたフレームを取得します。そして、これはGoogle Nexus 10タブレット上にあります(そして上記のように、デバイス間で速度を一定に保つためにフレームスキップが必要です)。 だから、私が持っている他の唯一のオプションは、内挿(または外挿)を使用することです。そこにあるすべての記事を読みましたが、それがどのように機能するかを理解するのに実際に役立ったものはなく、試行したすべての実装は失敗しました。 1つの方法を使用して物事をスムーズに移動させることができましたが、衝突をめちゃくちゃにしたため、実行できませんでした。レンダリングはレンダリング時にレンダリングメソッドに渡され、その中で処理が行われるため、同様の方法で同じ問題を予測できます。したがって、衝突が位置を修正した場合(キャラクターが壁のすぐ隣に立っている)、レンダラーはその位置を変更して壁に描画できます。 だから私は本当に混乱しています。レンダリングメソッド内からオブジェクトの位置を変更するべきではないと人々は言っていますが、オンラインのすべての例でこれが示されています。 私は正しい方向へのプッシュを求めています。これらを何度も読んだので、人気のゲームループの記事(deWitters、Fix your timestepなど)にリンクしないでください。私はしていない私のためのコードを記述するために誰を尋ねます。補間が実際にいくつかの例でどのように機能するかを簡単な言葉で説明してください。次に、アイデアをコードに統合し、必要に応じてより具体的な質問をします。(これは多くの人が悩んでいる問題だと思います)。 編集する いくつかの追加情報-ゲームループで使用される変数。 private long nextGameTick …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.