街づくりアルゴリズム


8

では、このRPG.SEポストいくつかのオンラインジェネレータと長い間行方不明のページが言及されています。

私は特に町の生成方法に興味があります。たとえば、次の画像を見てください。

消滅したアイロニーゲームのPCGタウン

グラフィックに関しては多くの改善が可能ですが、当時利用可能なツール(90年代半ばから後半)を考慮すると非常に良かったです。

  • 道路のレイアウトはかなり自然に見えます(すべての道路が直交するように配置されている場合でも)。
  • すべての道路が必ずしも接続されているわけではありませんが、それは正しい感じています
  • 建物は信じられないほどの場所に配置されます。
  • 木も論理的な場所に置かれているようです

自分で試してみるのも楽しいと思います。特に私の以前の 試みはあまりにも「ブロック状」でしたので:

シティジェネレーションでの私の最新の試み

あなたは私がかなり測定不可能な形容詞で品質の多くを説明していることに気付くでしょう(と思われる感じている信じられるなど)を使用ため、それらを命令に、そして最終的にはアルゴリズムに変換するのに苦労しています。

町の生成のための実証済みのアルゴリズムはありますか?

これは広すぎると思われるので、これを考慮してください。大陸の陸塊のマップを生成するアルゴリズムを要求すると、すぐにPerlinや他のノイズアルゴリズムへの参照が得られます。続いてボロノイが続きます。

のような質問を見てきました このが、彼らはすでにより具体的な考えを持っているようです(つまり、2x2の家、一定数の家、運河と道路配置の制限)。

私が欲しいのは、制約の少ないものです。おそらくグリッドレイアウトを除いて、最初の試みはLシステムよりもはるかに簡単です。


幅広い問題ドメインのリストアルゴリズムは、通常、Q&A形式で適切に回答するには広すぎます。私たちは通常、「これらの特定の特性を備えたゲームコンテンツを生成するにはどうすればよいですか?」-可能性のある答えを評価し、最良の提案を評価するために使用できるいくつかの基準または正/負の例を提供できます。質問を編集して、適切な町の出力と適切ではない町の出力の違いを詳しく説明できますか?
DMGregory

特に、このようなジェネレーターは複合的なものである可能性が高いため(たとえば、ステップ1で道路を生成し、ステップ2で家を生成し、ステップ3で木を生成する)、あまりに広すぎます。物事を特定のジェネレーターに絞ることができ、それに関してどのような特定の問題が発生している場合でも、その範囲は狭くなります。
congusbongus

1
手続き型の都市生成についてこの質問があります。ニーズがその質問とどのように異なるかを明確に示すことができれば、役立つかもしれません。
ピカレック2018

1
ここでの大きな答えはありませんが、良い例では、すべての建物が道路の隣にありますが、あなたの例ではそうではないことに気づきます。
user1118321 2018

@ user1118321:実際、家は必ずしも道路の隣にあるとは限りませんが、区画は(現代的なアプローチ)か、少なくとも次の道路への道があります(おそらく裏庭の家ではなく古いアプローチです)。したがって、たとえば市場のように、スペースはそれほど不自然ではありません。
PSquall

回答:


9

内向ソフトウェアは彼らのために本当に印象的な都市ジェネレータを作りました キャンセルされた無期限に中断されたプロジェクトSubversion

Subversion City Generator

このアルゴリズムは、大規模で最新のメトロポールを生成するように設計されています。しかし、同じ手法を使用して、より多くの農村集落を生成できます。

それは、最初に大まかなアウトラインを生成し、次にそれらに適合するようにますます多くの詳細を生成するトップダウンアルゴリズムです(手続き型生成とは逆のボトムアップアプローチの場合は、適格性による答えを確認してください)。これは進行中のアルゴリズムを視覚化するビデオですです。

アルゴリズムは次のように機能するようです(少し単純化されています)。

  1. 市内中心部:まだ空のマップのいくつかのポイントをメインの交通ノードとして選択します。地図の周りに均等に配置する必要があります
  2. 高速道路:主要道路を使用して、主要な交通ノードを隣人と外の世界に接続します。
  3. 高速道路:いくつかのマイナーな道路を作成して、主要な道路によって生成されたセルを細分割します。
  4. 通り:希望するビルディングブロックサイズに達するまで、道路を細かくして細分割処理を繰り返します
  5. ブロック:各ビルディングブロックの目的を決定します(住宅、小売、企業、産業...)。関連する要因は、隣接する道路のサイズと中心からの距離です。
  6. 割り当て:すべてのビルディングブロックのエッジを区画に分割します(つまり、各区画には少なくとも1つのエッジが道路に接続されています)。
  7. 建物:ロットごとに適切な建物を生成します。

木の配置について:私の最初のアプローチは、建物の生成アルゴリズムにそれらを統合することです。建物はその区画を完全に埋める必要はありません。空きスペースを適切な装飾オブジェクトで埋めることができます。

トップダウンのアプローチの問題は、それがもっともらしい都市を生成するかもしれないが、あなたが望むすべてを備えたもっともらしい都市を生成しないかもしれないということです。ゲーム内のすべての都市に1つの武器店、1つの鎧店、1つのポーション店、1つの宿が必要であるとしましょう。上記のアルゴリズムは、敷地の要件に基づいて建物を選択するため、1つの旅館ではなく、12の鎧店ができます。私は建物の生成段階でその問題に取り組みます。ランダムに建物を生成する前に、必須の建物のリストを調べ、それぞれに最も適切なロットを選択します。次に、ランダムな建物で残りの区画を埋めます。

ゲームで手続き的に生成された町を探索できることを楽しみにしています。


色んな大きさの街並みに言及するのをすっかり忘れてしまいました!
公証人、

ありがとう!確か私は、次のトップダウンかボトムアップを試してみてください...しかしますされていない場合実現私の脳は再びジャンプスタートしまった私は2つのオプションがあります。;)
ロフロ2018

5

実生活から制約を取得

多くの場合、適切なアルゴリズムを見つける方法の答えは、これらのことが実際の生活でどのように発生するかを調べることから始まります。調べましたか?私の頭の上から、次のことを考えることができます。

  • 道路は建物とその他の興味のあるポイントを結ぶためにあります
  • 建物は、可能であれば、既存の道路に沿って配置されます
  • 道路がない場合、建物は空の場所に配置され、独自の道路を介して近くの道路に接続されます
  • 建物は、住民が関心を持つ他の建物の近くに配置されます。人々は、職場、食料品店、衣料品店などの近くに住むように移動します。
  • 建物は、本来の用途に必要なリソースの近くに配置されます。例えば、製材所は森林の近くに、あるいは森林開拓地にさえ置かれます。人々はどこかに住むために水と食物(植物、動物)を必要とします。
  • 建物は、意図した用途に有害である、または有害となる他の建物から離れた場所に配置されています。たとえば、染色屋の臭いはひどいので、通常は住宅地には置かれません。同様に、居酒屋やレストランは騒々しいので、居住者はそれらの上に住みたいのではなく、顧客が必要なので、住宅地の近くにいる必要があります。
  • 一部の国には、建物の配置にも影響を与えるゾーニング法があります。通常、これらは、どのような種類の建物が互いに有害であるか、またはその地域に固有のリソースがあるか(たとえば、高品質の土壌は駐車場を建設するためではなく、フィールドのためのものです)を予測するより正式な方法です。
  • 建物は住民のためのものであり、それらの個人的なスタイルと好みがそれらに反映されています。たとえば、人口が少ない場合、彼らは地面(高層ビル、アパートの建物)を共有する可能性がはるかに高く、裕福な場合はコンドミニアムを取得し、裕福な場合は独立したヴィラを取得します。特定のグループが他のグループを好きではない場合、それらは同棲する可能性が低くなります。特定のグループ間に親和性がある場合、それらは同様の領域に移動する可能性があります。

それらを地形に適用します

これらの制約を設定したら、その周りにアルゴリズムを構築してみることができます。たとえば、地形を生成し、マップの周りに必要なリソースを分配します(おそらく、最も重要なリソースの小さな堆積物を開始領域に配置し、次に大きな堆積物を互いに遠く離れて配置することに注意してください)。もちろん、ここでゲームのニーズとメカニズムが作用しますが、ランダムな要素を追加することもできます。

次に、それらを使用するリソースの近くにビジネス(およびその住宅の建物)を構築します。たとえば、大きな山の隣の採石場。次に、それらに必要なインフラストラクチャを追加します。たとえば、郵便局と居酒屋があり、ビジネスを行って製品を販売できる交易所、道具を提供する鍛冶屋などです。

どこに行くかを決定するには、重み関数を使用して、マップをタイルに分割し、各タイルの数を特定の目的にどれだけ望ましいかを計算します。その種類の建物にとって最も望ましいタイルに建物を置きます。「1つのトレーディングポストが50のビジネスまたは100の家を処理できる」などのルールを追加します。これにより、都市が特定のサイズに達した場合に別のトレーディングポストが追加される可能性が高くなります。

これを取得したら、かなりまともなマップをいくつか取得する必要があります。マップがすべて不自然な形状になってしまうことに気付いた場合は、その形状の重み付け関数にペナルティを追加します。たとえば、「私の街路が別の街路のすぐ隣にある場合、-100が望ましい」、「私の街路が交差する場合、-100など」ランダム要素をいつでも追加して、これをより奇抜な感じにしたり、「交差点がN個を超える建物が道路に接続されている場合は、それをラウンドアバウト交差点に変える」などの他のメカニズムを追加したりできます。

これらの制約を使用して、特定の国に地形の山を増やしたり、特定の文化に曲がりくねった道路を構築させたり、別の地図に直線道路を好んだりするなど、異なるマップに異なる雰囲気を与えることもできます。重み関数。

簡素化する

もちろん、このアプローチはトレードシミュレーションではないゲームにとっては複雑すぎますが、とにかくこれを解決し、どの種類の建物がゲームにとって意味があるかを確認し、不要な建物を排除します。次に、「都市を河川、山、または土壌に近い場所に配置します。100のリソースごとに1つの建物、リソースの種類に基づいたビジネス、食品/製造用リソースのフルセットごとに10の住宅...または単に」のような単純化されたルールを考え出します。 1mの川/ 1sqmの土は、10の住宅をサポートできます。それでも、あなたがどのくらいの面積を持っているか(急な山腹に建物がないなど)、その面積がサポートできる建物の数がわかったら、そのエリアに建物のセットを配置します。 、3つのインフラストラクチャなど)、それらを道路に接続します。


1
この回答では、手続き型生成へのボトムアップアプローチについて説明します。それは、反対のトップダウンアプローチの例を説明する私の回答に非常によく賛成します。どちらのアプローチにも長所と短所があります。ボトムアップの利点は、生成された都市にどのオブジェクトがあるかを非常によく制御できることです。欠点は、全体としてリアルに見える町を生成するために、はるかに複雑で壊れやすいルールセットが必要になることです。
フィリップ

うん。また、ゲームの種類や目的の都市のレイアウトにも大きく依存します。ボトムアップは、小規模で中世スタイルの自然発生都市に適していますが、トップダウンは、米国スタイルの都市や大都市に適しています。同様に、機能的な建物とリソース管理を伴うゲームの場合、ボトムアップでより細かく制御できますが、トップダウンは建物の機能を本当に気にしないレースゲームなどの都市に最適です。 。
公証人、

答えてくれてありがとう。Have you looked into that?私が持っています。まあ、一種の(私は多くの「現実のルール」を考えることができませんでした)。しかし、これは私の以前の試みと比べて非常に目を見張るものがあります。私が描くことができないリソースを認識できていませんでした(つまり、それを描くかどうかに関係なく、東に森があります...)。
ロフロ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.