City-simはどのようにして数百のキャラクターをシミュレートできますか?


8

私のゲームは通常、可能なキャラクターを表す数百のボックスがあると、非常に簡単に遅れを始めます。SimCityやAnnoのようなゲームにも数百のキャラクターがあります。

それらのゲームはすべてのチックですべてを更新するわけではなく、ニーズは間隔で処理され、それはレンダリングの問題ではないことに気付きましたが、これらの小さな生き物はすべて個別のパスファインディングなど
を持っています。古いマシンでも、何千もの文字をオフにします。彼らはこれをどのように行うのですか?

この質問は、個人が実際には数えず、没頭と美学のために単にシミュレートされる巨大な数を参照するように更新されました。

(個別のキャラクターを参照している場合に関連:Dwarf Fortressは、パフォーマンスを失うことなく、非常に多くのエンティティを追跡する方法を教えてください。

(別の質問ですが、おそらく関連していますか?:Unity3Dで何百ものアニメ化されたキャラクターをレンダリングする


2
これは実際には重複しているようには見えません。ドワーフフォートレスのようなゲームはすべてのエージェントのアクションを個別にシミュレートしますが、この質問で説明されているように都市規模のゲームに到達すると、それはもはやあまり実用的ではありません。代わりに、これらのシムは通常、より「分断された」レベルの人口傾向で動作し、注意深く見た場合にのみ、これらの傾向に従う個々の人々の詳細を入力します。これらの戦略の違いのため、リンクされた質問とは別に再オープンして回答する価値があると思います。
DMGregory

違いを強調するためにいくつか変更を加えました。質問のリンクを解除するにはどうすればよいですか?
MisteriosM 2017年

パフォーマンスの最適化は非常に広い分野です。ゲームでパフォーマンスに関して間違ったことができる可能性のあることは100万あります。ただし、ゲームとプロファイラーの出力を確認しないと、ボトルネックがどこにあるのかがわかりません。これで、複数のエージェントのメモリの局所性、並列化、高度なパスファインディングアルゴリズムについて暗闇の中で撃つことができるようになりましたが、すでに知っていることや、ゲームに何が当てはまるかを見分けるのは困難です。したがって、この質問は広すぎると思います。
Philipp

オブジェクトプーリングをまだ試しましたか?インスタンス化にはコストがかかり、すでにインスタンス化されているオブジェクトをアクティブ化および非アクティブ化することは(それほどではありません)

パーティクルエミッタを使用することもできます。これらは実際には人口統計データの単なる視覚的表現であるため、スマートで複雑である必要はありません。
ステファン

回答:


12

gamedevの多くのように、都市シムゲームがこの一見不可能と思われる偉業をどのように達成するかに対する答えは、おそらく実現しないということです。彼らはちょうどそれをうまく偽っています。;)

このようなシムは通常、「チャンク」レベルで動作し、数千または数百万の居住者ごとにAIを処理するのではなく、人々、地域、交通回廊、またはその他の都市ダイナミクス全体をモデル化します。

これに取り組む方法はいくつかあります。

  • 「スパース」ボトムアップ:ここでは、個々の都市の住民をシミュレートしますが、「多すぎる」わけではなく、すべてのフレームをシミュレーションするわけではありません。これは、毎週無作為に抽出された人々に出された世論調査や国勢調査のように考えることができます。結果を補間して、より広い仮想人口の推定値(それらが居住する場所、職業、収入、人口統計など)を導き出します。

    たとえば、都市の100人の居住者のみをシミュレートし、そのうちの5人が学生である場合、都市の人口の約5%が学生であると推定でき、それに応じて学校の需要をモデル化できます。

    過剰なクラスタリング/スパース性を回避するために、時々、都市の人口分布からランダムサンプルを再生成する必要がある場合があります(たとえば、近隣が不人気になり、国勢調査の居住者全員が離れた場合、完全に離れずに脱出に注意する必要があります)あなたのシムでの表現がない!)

  • トップダウン:ここでは、あなたの街を見て、全体としてそのダイナミクスをモデル化するマスター式を考え出します。マクロ経済学に似たスタイルでは、個々のエージェントの詳細を無視するか、原則ベースの法則に従って流れる一種の継続的に分割可能な経済活動の「流体」と見なします。

    ゲームルールは、個人の好みや人々の多様性について考えるのではなく、アメニティの近接性と税率と生産性と資産価値と犯罪率に関する微分方程式のように見えるかもしれません。

  • ミドルアウト: 2つの間のさまざまなハイブリッドが可能です。たとえば、都市の各「派閥」、「産業」、または人口統計セグメントを独自のメタパーソンとしてシミュレートし、独自の個別の決定を行いますが、ヒートマップに分散します。または、一体となって存在するのではなく、都市全体の波動関数。または、街を近隣地域に分割し、近隣地域との相互作用でそれぞれが独自の小規模ルールを処理します。

プレーヤーが十分にズームインして個々の人が見えるようになったとき、または個人の数を引用している統計のレポートを見てみると、それらは必ずしもシミュレーションの実行に使用されている根本的な真実ではありません。むしろ、それらはそれの推論された製品でありえます。

特定の街区を拡大するとします。私たちの全体的な都市シムから、私たちは町のこの部分の大まかな人口、そこで行われる活動のタイプ、活動している時間帯を知っています。したがって、必要に応じて、適切な数の適切な人口統計を持つ人々をそこで発生させ、そのような種類の活動を行うことができます。彼らのAIは単純なものである可能性があり、多分、所定の場所でアニメーションを再生するか、ウェイポイントをたどって、デスポーンできる最も近いドア/スクリーンの端に到達するだけです。

つまり、通常、すべてのエージェントに対してパスファインディングを実行する必要はありません。代わりに、道路ネットワーク全体で1つのマスターフローマッピングパスを実行して、各セグメントに沿ったさまざまな種類のトラフィックの全体的なボリュームを特定できます。次に、それらのセグメントで適切なタイプの車両を十分に生成して、その密度を反映できます。スポーンされたエージェントは、ローカルステアリングまたは事前に生成されたウェイポイントを使用して、スポーン解除ポイントに到達できます。各セグメントに沿ってスポーンクローゼットをスポーン解除率と正しくバランスさせることで、必要なトラフィック量を安定して維持できます。

このように、プレイヤーが見る人と乗り物は、すべての蒸気の分子の完全な流体力学を実際に計算することなく、現実的な雲の印象を与える粒子のシステムのように、具現化されています。;)シミュレーションを駆動するのではなく、シミュレーションの状態を伝えるために、それらをセットのドレッシングとして配置します。

多くのゲームではこれで十分です。多くの場合、プレーヤーは個々のエージェントを選択して、彼らがそこで何をしているのか、どこへ向かっているのかを問い合わせることができないため、継ぎ目を見つけてエージェントが意味のないことを行っているかどうかを知ることは困難です。同じブロックを3回ドライブするようなものです。

しかし、人口が密集した環境で完全に一貫したエージェントが必要な場合は、「アリバイ 世代」と呼ばれるきちんとした手法を検討することができます。これは、特定の状況で見つかると予想されるエージェントを生成できる高度なサンプリング手法です。次に、プレーヤーが1つをより詳細に調査しようとする場合、プレーヤーがこれまでに観察したものと一致する方法で、プレーヤーが何をしているかについてより詳細に遡及的にサンプリングできます。ほとんどの場合、「段ボールの代役」の人々の軽量の利点を依然として得るという考えですが、その場で、彼らは完全にシミュレートされたエージェントとして渡すためのもっともらしいアリバイを構成できます。

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