2018年12月13日(木) 09:07 JST

アルゴリズムによる街並みの生成

●はじめに
●敷地・建物配置に関するアルゴリズム
●都市の成立に関わる要因、制約を考慮したアルゴリズム
     ・集落の発生位置予測アルゴリズム (2011.12.27)
     ・集落の発生位置予測アルゴリズムの改良 (2011.03.07)
     ・街道の生成 (2011.03.07)

2011/03/07 更新

はじめに

アルゴリズムあるいはアルゴリズミックデザインといった言葉を建築分野で目にすることが多くなってきました。アルゴリズムとは一言でいえば”問題を解決するための解法”のことで、構造の最適化やゾーニングの設計等、建築分野でも部分的に試行されはじめています。街並みに関してもアルゴリズミックに生成しようとする試みが見られるようになりました。

現在いくつかの街並生成ソフトウェアが公開されており、都市景観の非常にリアルな三次元モデルを得ることができます。しかし、これらのソフトウェアはソースコード非公開であったり、ソースコードが公開されていても解説が乏しかったりと、実質的にブラックボックスであるといえます。内部でどのようなアルゴリズムが用いられているかを知ることは困難です。

そこでこの研究では、アルゴリズミックに街並みを生成するソフトウェアを独自開発することにしました。出来合いのパッケージ・ソフトウエアに依存していては、街並み生成のアルゴリズムの本質を十分に考察できないと思われるからです。他人のコードを読むのは面倒だし自分らで作ろう、これぐらいできないはずがない、と。この研究は、街並み生成に使用できる様々なアルゴリズムを考案し、都市の形成に影響を及ぼしそうな多様な諸条件をアルゴリズムに適用することで、都市の景観をどこまでリアルにシミュレートできるのかを目的とします。

この研究は2009年秋に開始しました。当研究室でも最も若い研究です。研究を開始するにあたって、手掛かりなく闇雲に取り組んでもなかなか成果は得られないのがこの世の常ですから、まずは既存のソフトウェアにならうことにしました。既存のソフトウエアは街並みの生成を「区割と地割」、「建築の配置」の二つのフェーズにわけて実行するものが多いので、それらの考え方を当研究でも採用しています。

着手して間がない研究ですが、それなりに見られる街並み3Dモデルが生成できているので、現時点での成果を紹介します。この研究は2010年度も引き続き実施しますので、試行錯誤はまだまだ続きます。街並み生成の手順や採用するアルゴリズムに関してバリエーションを増やし組み合わせを工夫するなどして、面白い成果が出せればと思います。試行錯誤の変遷もわかるように工夫して更新を重ねたいと思います。



敷地・建物配置に関するアルゴリズム(2010.03.15版)

・区割と地割


まず、都市の幹線道路に相当する線分を任意に設定します。その線分によって分けられる領域を区画とし、適当な大きさになるまで分割を行います。線分に与えた"道幅"によって区画をセットバックし、道の領域を確保します。次に、建物配置用の地割を行います。区割の過程で面積、形状から区画の性格を判断し、土地の利用に適した建物用敷地になるよう分割を行っています。


・建築の配置


得られた敷地に建物を配置します。矩形の敷地には、敷地境界のセットバック線を柱状化し、建物を配置しています。変形の敷地には、ちょっと工夫をしています。敷地を構成する境界線から最大長の辺を取得し、その最大辺に直交する仮想のグリッドを敷きます。そのグリッドの各点について、敷地内に収まっているかどうか判断させます。これら点群を元に、全頂点角が直角かつ敷地内に収まる面積最大の多角形を得ます。この図形に高さを与えることで、実在しそうな矩形の組み合わせによる建物形状を生成しています。


こうして得た三次元モデルにテクスチャを与えることで上のような建築が作成されます。建築物をあまり細かくモデリングしてしまうと街全体のポリゴンが増えすぎてしまい、満足に表示できなくなってしまいます。テクスチャはこういう時に便利ですね。上図はほぼ柱状体といったシンプルなモデルにテクスチャを貼ったものですが、わりと建物らしく見えます。テクスチャが違和感なくはられるように、建築の高さにあわせてテクスチャの論理高さを自動的に求めるようなGDLスクリプトを組み込んであります。

上のような街並みのイメージを得ることができます。鳥瞰ではやや鰻の寝床のような細長い敷地が目立ちますが、アイレベルのパースでは随分それっぽい街並みになっています。ウォークスルーの動画(こちらです)で見るとなかなか迫力があります。現在都市的、地理的制約に関しては実装されていません。梅雨が来る前にまた更新出来れば、と思ってます。お楽しみに。



都市の成立に関わる要因、制約を考慮したアルゴリズムの追及

これまでの研究では,街道や幹線道路をもとにして、領域分割と建物配置を行なうことで景観を生成してきました。初期条件として与えている街道や幹線道路によって生成される景観が左右されますが、現実の都市においても道路の計画は初期に行なわれる行為の一つであり、これはもっともらしい対応関係といえると思います。これからの研究では、現実に存在する緩やかな変化をもった街道や幹線道路の生成について考えていきます。

増訂大日本国郡輿地路程全図 鹿嶋香取○○日光参詣順路之圖
増訂大日本国郡輿地路程全図(左)鹿嶋香取○○日光参詣順路之圖(右)
  
それぞれ千葉県野田市立図書館 Webページ 所蔵資料紹介より引用

さて、上に掲載した日本の古地図をみてわかるように、街道はいくつかの集落を経由しながらある2地点を接続しています。街道と集落の発生順序については「にわとりとたまご」のような関係があるとも考えられますが、本研究では、自然集落が発生した後、それらが道で接続され、交易を繰り返し発達していくといったモデルとして都市の発生と発展を考察していきます。ここでは都市や集落を「ノード」、幹線道路や街道を「ブランチ」と呼ぶことにします。以下のステップを踏み、研究を行なっていきます。

工程表


集落の発生位置予測アルゴリズム

 今回は、集落(ノード)の発生位置の予測について紹介します。 自然集落の発生の要因についてですが、人文地理学において自然集落は地形の遷移点に発生しやすいといわれています。水が浸食・堆積作用によって地形をつくることや台地下には湧水が見られるという一般的な事象からも、地形の遷移点には水が存在したと推測することができます。また、定住とともに農耕が始まったことからも農地を確保するために、ある程度の平地も同時に必要であったと考えることが出来ます。  これらのことから集落の発生位置は、地形の遷移点を背にした平坦な大地が始まる地点だと推測できます。今回はこのような位置をあぶりだすためのアルゴリズムの作成を行ないました。

平地度計算例2 平地度計算例1

平地度

 どの程度平坦であるか、の指標として「平地度」というものを定義しました。
これは、標高メッシュにおいて「あるセルについて、その標高と同程度の標高をもつセルがいくつ連続しているかの総量」によって表します。

許容高度差

 また同程度の標高とみなす、その閾値を「許容高度差」としました。
この例では、許容高度差を3.0とすると、Aの平地度は6、Bの平地度は3となります。

平地度計算例5 このように平地度の計算を行なった後、各セルの平地度を全体における最大値によって除すことで相対化し、グレースケールに変換することで平地度を可視化します。「白い箇所ほど平坦である」ことになります。




検証

この平地度計算のアルゴリズムを用いて、実地を例に集落発生位置の予測を行ないました。

ケース1:武蔵野台地

武蔵野台地 集落・高度分布 武蔵野台地 許容高度差3m 武蔵野台地 許容高度差5m 武蔵野台地 許容高度差10m

ケース2:濃尾平野

濃尾平野 集落・高度分布 濃尾平野 許容高度差1m 濃尾平野 許容高度差3m 濃尾平野 許容高度差5m

集落の発生時期と許容高度差の関係

武蔵野台地において、許容高度差が小さい場合、発生時期の早い集落が多く計算された領域内部におさまり、許容高度差を大きくした場合、その内部に発生時期の遅い新田集落が多く領域内部におさまりました。これには、開墾のしやすい場所から集落が発生していった日本の歴史との関係をうかがうことができます。例えば条里制(645)における巨大矩形農地の確保と、これに対しての江戸の鍬下年季(1645)などの未開発地開墾奨励などが挙げられるでしょう。

許容高度差の関係

 得られた画像を全体的にながめると予想が大きく外れてしまっているように見えますが、部分部分で観察すると、これまで発生した集落は、その近辺においては平地度の高い箇所に該当していることがわかります。平地度の視覚化の際に全体を最大値で除すのではなく、近傍の最大値で除すなど、もう少し、予想領域の見せ方を改良することで満足した結果が得ることができそうです。

武蔵野台地 例示図 濃尾平野 例示図

今後は今回得られた集落発生予想アルゴリズムに改良を加えるとともに、領域周縁にノードを配置し、それらをブランチで結ぶことで、より具体的な都市平面をつくっていこうと考えています。街道の生成まで至れば、それを3次元モデル化できます。早くみなさまにアルゴリズムによって生成した街並みをお見せできればと思っています。

平地度計算方法の変更

前回更新分の方法では、どこまで見渡せるかという程度を平地度としていました(例えば高低差がなければ地平線がみえるように) 。この方法では集落の発生予想領域がいささか広くなりすぎてしまうこと、地形の遷移を見つけ出すための閾値の設定が難しいことが問題になっていました。 そのため以下のように平地度の定義及び計算手順を変更しました。

  1. ある一つのセルを出発地点とし、隣接するセルについて、その標高差の和をとりながら自身の領域を拡大していく。
  2. 標高差の総和が、一定の数を超えたら領域の拡大を中止し、領域としたセルの数をカウントする。この閾値を許容高低差とする。
  3. 全てのセルについて手順2.を行ない、最大値によって除し相対化する。これを平地度とする。
  4. 手順2.において他のセルの領域の縁となったセルに対して、その領域中心の平地度を確率として乱数により集落を発生させる。
       eのように、領域縁となったセル(色塗り)は、その領域の原点(同色の×)の平地度を用いる。複数回領域縁となったセルは、その回数分だけ試行する。

この方法によって、集落発生予想領域は以下のように算出できました。
赤丸が実際の集落位置です。時代ごとの測量技術の差もあって、一部修正を行ないましたが現状の地図と一致しない部分もあります。
集落群のつくる模様を比較して頂けると対応がわかりやすいと思います。前回用いたアルゴリズムと比較して、予測領域が限定的になりました。

街道の生成

集落の発生位置予測プログラムによって集落を発生させ、これを用いて街道の生成を行ないました。

  1. 一定距離内にあるノード(集落)間にリンク(道)を生成する(a)。
    各リンクのコスト は、始点標高、リンク総長、リンクが通過するセルの標高及び通過長を用い、計算する(b,c)。
  2. 各ノードについて次数を計算し、その多さによって降順に並べる。
    上位ノードは隣接しやすいため、上位ノードに隣接するノードは上位ノードになれない制約を付していく。上位ノード個数には上限及び下限を設けない。
  3. すべてのノードから各上位ノードへの経路探索を行なう。Dijkstra法により、コストが最小となる経路を計算し、使用されたリンクの使用回数をカウントしていく。
  4. 手順3.で得たリンクの使用回数を、そのうちの最大使用回数で除したものを道の使用優先度とする。
    この優先度が高いものを街道として発展しやすいとみなす。視覚化のために、使用回数と幅員を比例させて表現する。

まず、手順1を行なうと以下のようになります。小道のネットワークが非常に煩雑です。

これに対して手順2.~4.を行なうと、このように使用優先度の高い道が浮かび上がります。 なお使用回数が非常に少なかったものは出力していません。 この中でも特に、生成した街道のうち太く示された街道として成長する可能性が高いと判断された道の近しいところに、実際の街道が存在することがわかります。


ここまで地形データとわずかな数値入力によってここまで、集落の発生位置の予測や、街道の生成を行なうことが出来ています。 引き続きこれに改良を加え、次は集落の衰退と発展について考えていこうと思っています。

最終更新日:: 2014年10月20日(月) 23:33 JST|表示回数: 21,035 印刷用ページ