フラクタルベースの手続き型都市レイアウトに適したアルゴリズムは何ですか?


19

バックグラウンド

Minecraftサーバーを実行して、かなり大規模なスターターシティを設計します。ルールの看板や暴徒の籠のような一連のものがあり、そこに建物を置きたいです。都市自体は非常に大きく、広がるでしょう。できれば最大1000 x 1000ブロックの大きさです。

建物自体は、すべての3ブロックの倍数のように、特定のベースキューブに基づくキューブまたは長方形のフットプリントを持ちます。道路と建物間の距離は、道路の重要性に応じて、5〜11ブロックの幅であることが好ましいでしょう。

都市の計画を開始するとき、建物がどれだけ大きくなり、いくつあるかを正確に知ることができます。

問題

問題は、都市のレイアウトを設計することです。明らかにそのような規模で、私は都市計画の背景ではなくプログラミングの背景から来ているので、問題に頭を包み始めることさえ非常に困難です。

問題は、具体的には、都市ができるだけ自然に見えるようにすることです。もちろん、これは単純なグリッドパターンに基づいて構築するのはかなり簡単ですが、グリッド、またはグリッドのように見えるものは可能な限り避けたいと思います。

質問

コードを使用して設計するために、どのアルゴリズムを追求できますか?Minecraftは既に地形生成でフラクタルを使用しており、都市はフラクタルパターンで自然に成長しているように見えるので、何らかの方法でフラクタルを使用すると最も自然に見えると考えていました。

いくつかの点でテトリスを演奏するアルゴリズムに似ていると思うので、誰かがその方向に存在する解決策を持っているなら、それも助けになるでしょう。使用したい形状を定義できる場所を描いており、ソフトウェアは、建物の均等な分布に最も「最適な」ソリューションが見つかるまで繰り返します。 Pythonを使用して、できればpygameを使用して視覚的にこの問題を解決するのに役立つ何かが既に存在しますか?

当然、これはゲームデザインにおける一般的な都市の生成にも興味深い影響を与えるため、最適なソリューションが何であるかを非常に楽しみにしています。

編集 明確にするために、建物はゲーム内で設計および構築されるため、この時点でレイアウトを探しています。


3
Minecraftはフラクタルを使用しますか?連続ノイズ関数(PerlinまたはSimplex、私は信じる)を使用するだけの印象を受けました。
マーティンソイカ

@Martin Sojka Perlinノイズは実際にはフラクタルなので、そこにあります。
ネヴァーマインド

1
@Nevermind:フラクタルの定義特性は自己相似性です。その一部を選択して元のサイズにスケーリングすると、「相似」になります(同じ構造を持ちます)。特に、フラクタル信号の周波数スペクトルはスケールに対して不変です。Perlinノイズでこれを行うと、Perlinノイズのスケールアップされた領域だけが得られます。周波数スペクトルもシフトします。
マーティン・ソイカ

@Nevermind Perlinノイズは実際にはフラクタルではありませんが、ブラウン運動(Perlinノイズを使用できる手法)はフラクタルであり、一般にPerlinノイズと呼ばれます。
エルバ

ええ、申し訳ありませんが、Perlinノイズとピンクノイズを混同する場合は常に修正します。私の唯一の防御は、Minecraftが実際にピンク(茶色の動き)ノイズも使用することです(IIRC)。
ネヴァーマインド

回答:


20

最近、手続き型の都市レイアウトのアルゴリズムを実装しました。まだ進行中の作業ですが、私にとっては有望なようです。見てみましょう:

手続都市の例

このレイアウトの作成に使用されるアルゴリズムは、大まかにL-Systemsに基づいています。Elementマップ上の場所を示す長方形と、長方形内にGrow他のElementsオブジェクトを作成したり、マップ上にいくつかのオブジェクトを生成したりするメソッドを持つ基本クラスがあります。次いで、この基本クラスから継承実際の要素がある:CityStreetBuilding

生成は、多くの「シード」オブジェクト(私の場合、Cityマップ上にランダムに配置された単一の要素)から始まります。次に、システムはGrow、すべての要素が非アクティブになる(をGrow返すfalse)か、多数の反復パスになるまで、を呼び出して、すべての要素を反復処理します。

写真の都市は、いくつかの単純なルールのみを使用して構築されています。

  • CityStreet領域をどこかで分割する要素になります。
  • すべてStreetのsは0〜3の脇道になり、エリアをさらに分割します。
  • また、横にStreetランダムなサイズBuildingを合わせようとし続けます。

結果はそれほど面白くありませんが、悪くもありません。システムは簡単に拡張でき、何が起こっているのかを理解するのに十分なほど簡単です(-8


シンプルさが大好きです。都市は、有機体によって制御されているため、実際に有機体であると思います-心の目で見たときに完璧を作成しようとしています-L-Systemsはおそらくこのプロセスの最良の近似になります。
ジョナサンディキンソン

私はそれが好きです。=)pygameで実装するために...-
ケン

8

あります。このGDCの講演数年前から手続き建物世代には。これは、一連のテンプレートに基づいて個々の建物を作成するためのものであり、都市全体を作成するためではありません(通りのレイアウトなど)。残念ながら、無料のコードはありません。トークで説明されているシステムはUnrealで実装されていますが、UDKの無料版であるかどうかはわかりません。いずれの場合でも、同じアイデアのいくつかを使用して独自のシステムを構築できます。

「手続き型の建物」または「手続き型の都市」をグーグルで検索すると、このトピックに関する他のかなりの数の論文や記事も表示されます。


1

しばらく前に、手続き型の都市を作成するための非常に優れた/詳細なチュートリアルを見つけました。@ http://www.youtube.com/watch?v=-d2-PtK4F6Yにビデオがあります 。チュートリアルは著者のブログにあります:http : //www.shamusyoung.com/twentysidedtale/? p=2940 amb


私がざっと目を通したものからの素晴らしいチュートリアルのように見えます、そして、後で都市を生成することに決めた場合、それはいくつかの素晴らしいポインタを持っています。=)
ケン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.