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

空間と時間を介したオブジェクトの動きに関連します。加速(推力と重力)、質量、衝突応答、摩擦などの概念を含みます。

1
2D水シミュレーションのアイデア
私は、2Dで水をシミュレートするために、かなり大きい(それを呼び出す)ブロックされた/ブロックされていないアレイ(側面から見た)に対する入力を探しています。次のアイデアを思いつきました。 セルオートマトン セルオートマトンを使用して、CPUで大規模な並列シミュレーションを実行します。次のような簡単なルールで 下部に開いているセルがある場合は、そこに移動します。 左右のセルを確認し、2つからランダムに1つを選択して移動します。 長所 実装が簡単。 マルチプレイヤーシステムでの意味のある/決定論的。 短所 おそらく本当に遅いです。 納得できません。 GPUの流体力学 次のようなテクスチャに対してGPUで流体力学の大まかな近似を実行します。 +------+-----+-----+-------+ |R |G |B |A | +------+-----+-----+-------+ |vX |vY |NULL |Density| +------+-----+-----+-------+ 長所 おそらく本当に速いです。 かなり説得力があります。 さらにピクセルシェーダーを使用すると、直接レンダリングできます。 短所 実装が難しい。 微調整が難しい。 レベルのサイズのテクスチャを1つ割り当てることはできません。 グリッド領域を重ねることもできますが、これによりさらに複雑になります。 粒子 粒子を使用して水をシミュレートします。加算ブレンディングを使用したレンダリング中に、アルファチャネルに乗算関数を適用して、水の鮮明なエッジを与えます。 長所 おそらく素敵になります。 実装が簡単。 レンダリングが簡単。 マルチプレイヤーシステムでは意味がありますが、転送にはかなりの帯域幅が必要になります。 短所 粒子間効果はおそらく遅いでしょう(近傍検索)。 固体空間から水が「漏れる」可能性があります(固体空間が小さいため、たとえば1px)。 粒子のサイズによっては、水に奇妙な穴が開く可能性があります。 上記の両方は、粒子を実際のサイズよりも近くにドリフトさせることで緩和できますが、粒子間および粒子/ランドスケープのパフォーマンスに問題が発生します。 さらにアイデアはありますか? 注:これは概算であり、ここでは物理的に正しい水を探しているわけではありません-「十分」なもの(迅速で汚れた場合のボーナスポイント)だけです。ゲームはマルチプレイヤーなので、残念ながらレベル全体を継続的にシミュレートする必要があります。

4
Unityを使用してプレーヤーの動きを3Dオブジェクトの表面に制限するにはどうすればよいですか?
マリオギャラクシーやジオメトリウォーズ3に似たエフェクトを作成しようとしています。プレイヤーが「惑星」の重力を歩き回ると、重力のようにオブジェクトの端から落ちません。一方向に修正されました。 (ソース:gameskinny.com) 私は、重力を持たなければならないオブジェクトが他の剛体を引き寄せるアプローチを使用して、探しているものに近いものを実装することができましたが、Unityの組み込みの物理エンジンを使用して、AddForceなどで動きを適用し、運動を正しく感じることができませんでした。プレイヤーがオブジェクトの表面から飛び始めない限り、プレイヤーを十分に速く動かすことができず、これに対応するために加えられた力と重力の良いバランスを見つけることができませんでした。私の現在の実装は、ここで見つかったものの適応です ソリューションがおそらく物理学を使用して、プレイヤーがサーフェスを離れる場合にオブジェクトに接地するようにしますが、プレイヤーが接地されたら、プレイヤーをサーフェスにスナップして物理学をオフにし、他の方法でプレイヤーを制御しますが、私には本当にわかりません。 プレーヤーをオブジェクトの表面にスナップするには、どのようなアプローチをとるべきですか?ソリューションは(2Dではなく)3D空間で動作し、Unityの無料バージョンを使用して実装できる必要があることに注意してください。
16 unity  physics  control 

1
不均一な惑星表面での経路探索
私の質問は、不均一な惑星表面での経路探索への最良のアプローチは何でしょうか? 背景情報 私は、6つの球体投影面の変位マッピングから惑星を作成しました。平面は、球形に投影される前に最初に立方体を形成しました。 各「球体投影立方体面」をグリッドとして使用し、簡単なA *アルゴリズムを使用して最適なルートを見つけることができるかどうか疑問に思っています。また、パスが登らないように変位の高さを考慮したいです。山など(これはA *アルゴリズム内の単なるヒューリスティックだと思います)別の考慮事項は、Unity3dの物理エンジンを活用して惑星の動きを実現し、重力を惑星の中心に向けることです。私の提案するソリューションでは、重力物理学とは独立してエージェントの動きを制御する必要がありますか? 私の質問をより明確にするために、これは私の現在の惑星体です。

1
意図的な不正確さでレトロ/ NESスタイルの物理を再現
バックグラウンド: 私のレトロなプラットフォーマーのリメイクプロジェクトのジャンプ曲線を正しく取得するのに問題があります。元のゲームはNES用であり、プレイヤーのベロシティは2つの別々の部分に保存されます。1バイトが整数で、もう1バイトが小数部分です。 重力はプレーヤーのY速度に0.25 /フレームの割合で追加されます。 プレイヤーがジャンプすると、彼のY速度は-4.64453125に設定されます。ジャンプ曲線の残りの部分は重力に任されています。 プレーヤーが上昇すると、垂直速度は0.25 /フレームの割合で0に収束します。ただし、プレーヤーの速度がゼロ未満の値に達すると、速度は異なるパターンに従って変化します。フレームごとに0.25ずつ着実に減少するのではなく、次のパターンに従います。 [1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...] 整数オーバーフローと関係があるようです。 データ: 元のデータのダンプを次に示します。速度の表です。 Jump Curve Y-Hi Y-Lo Decimal Change/Frame 4 165 4.64453125 ? 4 101 4.39453125 -0.25 4 37 4.14453125 -0.25 3 229 3.89453125 -0.25 3 165 3.64453125 -0.25 3 101 3.39453125 -0.25 …

6
2Dボイドシミュレーションをどのように並列化できますか
異なるソース(クラスター、gpu)からの処理能力を使用できるように、2Dボイドシミュレーションをどのようにプログラムできますか。 上記の例では、色の付いていない粒子は、クラスター化(黄色)して移動を停止するまで動き回ります。 問題は、左上のエンティティが右下のエンティティと相互作用する可能性は低いものの、すべてのエンティティが潜在的に相互作用する可能性があることです。ドメインが異なるセグメントに分割された場合、全体が高速化される可能性がありますが、エンティティが別のセグメントに移動したい場合は問題が発生する可能性があります。 現時点では、このシミュレーションは良好なフレームレートの5000のエンティティで機能しますが、可能であれば何百万ものエンティティで試してみたいと思います。 これをさらに最適化するために四分木を使用することは可能でしょうか?他の提案はありますか?

4
RTSローカル回避はどのように行われますか?
現在、ユニットの局所回避のための物理的衝撃力をシミュレートしていますが、この方法はユニットをフォーメーションから押し出すことがあり、ユニットが凝集すると非常に望ましくない効果があります。 Starcraft 2のようなRTSゲームの場合、ローカル回避はどのように行われますか?物理学はシミュレートされていますか、それとも全知のコントローラーがすべての場所を決定しますか?私はこの質問が少し広いかもしれないことを知っているので、Starcraft 2のローカルな回避行動をどのように達成するかについて具体的に尋ねています。動作するものなら何でも大歓迎です。 コードを探しているわけではありません-Starcraft 2(または同様のゲーム)がローカル回避を処理する方法の有用なリソースまたは説明だけです。 現在、衝突検出(貫通ベクトル)、衝突力、および速度による移動が実装されています。すべてのユニットは、衝突について別のユニットと照合されます-衝突すると、オブジェクトは貫通ベクトルによってすぐに相殺され、衝突力が適用されます。次に、別のループがオブジェクトをその速度で移動し、速度にドラッグを適用します。オフセットは、凝集したユニットに過剰な衝突力がかかる問題を緩和しますが、ユニットが時々飛び出すこともあります。 私が探しているソリューションは、次の要件を満たす必要があります(Starcraft 2のように)。 オブジェクトは重複しません。または、少なくとも重複を最終的に解決する必要があります。 オブジェクトは必要以上に押し合うことはないので、2つのユニットがフォーメーション内でお互いに隣接して移動できます。 オブジェクトが同じ目的地に向かって固まる場合、奇妙な動作はありません。 さまざまなサイズのユニット、さらにはさまざまな凸形状をサポートできます。 私がこれまで考えてきたのは、衝突を検出する代わりに、将来の衝突を検出して、重複が発生しないようにすることです。次に、2つのユニットの速度が重なり合わないように、制約を適用します。オーバーラップを超えた動きを制限するアルゴリズムをいじっています。

2
2D惑星重力
私は、宇宙船が発射され、その経路が惑星の重力によって影響される単純なゲームを作ろうとしています。 このゲームに似ています:http : //sciencenetlinks.com/interactives/gravity.html このゲームで惑星が宇宙船に与える影響を再現する方法を知りたいので、宇宙船が惑星の周りをループして方向を変えることができます。 私は、宇宙船が惑星の周りの巨大な楕円でループするか、ベクトルを使用して惑星の重力の影響をわずかしか受けないという偽の結果を達成することができました。 前もって感謝します。 PSゲーム開発者とは関係のないコーディング経験が豊富にあります。
15 2d  physics 

3
車両物理学の実装をどこから始めますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 私自身の背景。私はHavok、Box2D、Bulletなどの第3部の物理エンジンを比較的経験しており、カスタムエンジンに正常に統合しました。また、いくつかの既知の本に従って、単純な物理エンジンを作成しました。 今、私は車両物理学に飛び込むことに興味があります。トピックをざっと読んでいるが、私が有用な何かを理解するのに十分な詳細には触れない本がいくつかあります。車両物理学を始めるのに役立つ、重すぎない優れた書籍/リソース(ゲーム開発者ではなくエンジニア向けの純粋な車両であるという意味)について知りたいと思います。ここget startedでは、少なくとも、ほとんどのゲームに見られる最新の機能(サスペンション/トランスミッションなど)を備えた3Dのシンプルな車両を作成する手順を説明します。 注:同様の質問を検索しましたが、見つかりませんでしたが、存在する場合は、リンクを投稿して質問を閉じてください。
15 physics  books  racing 

3
プラットフォームゲームで動くプラットフォームをどのように処理しますか?
私はbox2dなどを使用したくありません。単純な移動プラットフォーム(上下、左右、斜め、円形のパス)が必要です。私の質問は、プレーヤーがバウンスしたり揺れたりすることなく、プラットフォームにしっかりと固定されるように、更新順序/制御階層を処理することですか?

3
高粘度液体としての固体
私の友人と私は、世界の材料を非常に断片的な方法で破壊できるようにするための異なるアイデアを議論しており、彼は固体を非常に可視的な流体として表現するというアイデアを提案しました。私の直感では、これは次のいずれかになるということです。A)非常に難しい、またはB)非常にリソースを集中的に使用しますが、私にはわかりません。 このようなモデルは、RPG /アドベンチャーRPG / FPSに適していますか? edit:明確化:アイデアは、衝突とオブジェクトの破壊をこのシステムで処理することです。基本的に、このように処理されたオブジェクトは、スクリプト化された破壊可能なオブジェクトではなく、破壊可能になります。

4
バウンス摩擦による回転を計算するにはどうすればよいですか?
前の質問から続きます。ボールがヒットしたサーフェスから非常にリアルに跳ね返っています。今、私はヒットの摩擦からそれを回転させたいです。 これを表示するのは十分簡単です:ティックごとに角速度でボールを回転させ、レンダリング時に同じ回転を適用します。 ボールが壁に当たったとき、回転速度が影響を受けることを知っています... 表面を打つときのボールの初期速度 ボールと表面の摩擦係数(物理定数) 入射角(ボールの入射速度ベクトルと表面の法線の間の角度)。 入射角は、ボールの衝撃速度と射出速度のベクトルのドット積で近似されます。(1は高スピン、-1はスピンなし、その他はすべてその間にあることを意味します) 上記のすべてを乗算し、それらが0〜1の範囲に変換され、最大回転速度が乗算されることを確認すると、ボールは予想どおり回転速度で応答するように見えました。1つを除いて、(正の値のため)常に時計回りに回転します。 これは良い方法ですか?もっと簡単な方法を考えられますか? この方法で問題がなければ、何が欠けていますか?ボールが反時計回りに回転するタイミングを知るにはどうすればよいですか?

5
なぜ蓄積を統合するのですか?
私は物理学をDIYする方法を学び始めており、最も基本的なレベルで統合を実装することについて質問があります(つまり、これはオイラー対RK4の質問ではありません)。 私が遭遇するほとんどすべての例にintegrate()は、最後の更新以降のタイムステップを取得し、最後の更新以降の加速度(および/または速度および/または位置)を更新する関数があります。 最も単純な形式: position += velocity * deltaTime ただし、関数を変更するだけで簡単に取得できるのに、なぜこのように蓄積されるのかわかりません。たとえばgetPosition = makeNewFunction()、のシグネチャを持つ何かを返す可能性がTime -> Positionあり、その関数の内部動作は適切な数式を介して生成されます。 そうすれば、蓄積はありません...位置を取得する必要があるときはいつでも、現在の時間でその関数を呼び出します。 私の初心者の理解では、これは蓄積から生じるエラーも回避するということです...それではなぜこれが機能しないのですか、何が欠けていますか? (私はこのアイデアの概念の基本的な証明をまとめましたが、同時にいくつかの他のこともテストしているため、最もクリーンな例ではありません:https : //github.com/dakom/ball-bounce-frp) 編集1:コメントで述べたように、加速の変更についてはまだ学んでいないこと、または加速度を一定にするよりも高次の積分を必要とするジャークやその他のことを扱ったことを指摘することはおそらく重要です。 EDIT 2:ここでのアイデアのいくつかの基本的なサンプルコードで、擬似JavaScriptシンタックス-ノートgetKinematicPositionされ、部分的に適用され、それはちょうど時間の新機能戻っているので- >位置を: 私はここでの位置に固執していますが、それは他の何かかもしれませんgetVelocity。 getKinematicPosition = initialVelocity => acceleration => time => ((.5 *acceleration) * (time * time)) + (initialVelocity * time); getPosition = getKinematicPosition ([0,0,0]) (GRAVITY); onTick = totalTime => …

3
衝突検出は常にO(n ^ 2)ですか?
物理エンジンは、たとえば、互いに近くにあるオブジェクトをグループ化し、すべてのオブジェクトではなくこのグループ内の衝突をチェックすることにより、その複雑さを軽減できますか?(たとえば、他のオブジェクトからの速度と距離を調べることにより、遠いオブジェクトをグループから削除できます)。 そうでない場合、球体(3d)またはディスク(2d)の衝突は簡単になりますか?ダブルループを作成するか、代わりにペアの配列を作成する必要がありますか? 編集:弾丸やbox2dのような物理エンジンの場合、衝突検出はまだO(N ^ 2)ですか?

3
力との衝突の解決
2D物理エンジンでは、AABBとAABBの衝突を検出し、最短の貫通ベクトルを見つけてAABBの位置に追加することでそれらを解決できます。 これを行うと、最初のAABBが2番目のAABBの外側に「プッシュ」されますが、速度/加速度の変化はまったく処理されません。 シミュレーションに重力加速度を追加すると、最初の動的AABBの速度は、2番目の静的AABBの上にある場合でも増加し続けます。最終的に、速度が大きくなりすぎて衝突が検出されなくなります(動的なAABBは静的なAABBを通過します)。 解像度後に速度をゼロに設定しようとしましたが、明らかにうまく機能せず、非現実的なシミュレーションを作成しました。 オンラインで読んだところ、位置を手動で操作して衝突を解決したり、速度が正しくなかった。私は力を実装しようとしました(今のところ、質量は「ハードコードされた」1です): void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; } void Body::integrate(float mFrameTime) { velocity += acceleration * mFrameTime; position += velocity * mFrameTime; acceleration = {0, 0}; } 衝突の解決中に最短の貫通ベクトルを力として適用すると、動的なAABBは静的なものから「押し出され」ますが、その速度は重力のないシミュレーションでは決して低下せず、永遠に動き続けます。 「一時的な」力を適用する方法はありますか?最初のAABBを2番目のAABBから押し出し、その後AABBが衝突しなくなった時点で停止する力。 ここで利用可能なソースコード全体:https : //github.com/SuperV1234/SSVSCollision


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