更新はじめにアルゴリズムあるいはアルゴリズミックデザインといった言葉を建築分野で目にすることが多くなってきました。アルゴリズムとは一言でいえば”問題を解決するための解法”のことで、構造の最適化やゾーニングの設計等、建築分野でも部分的に試行されはじめています。街並みに関してもアルゴリズミックに生成しようとする試みが見られるようになりました。現在いくつかの街並生成ソフトウェアが公開されており、都市景観の非常にリアルな三次元モデルを得ることができます。これらのソフトウェアはソースコード非公開であったり、ソースコードが公開されていても解説が乏しかったりと、実質的にブラックボックスであるといえます。内部でどのようなアルゴリズムが用いられているかを知ることは困難です。そこでこの研究では、アルゴリズミックに街並みを生成するソフトウェアを独自開発することにしました。出来合いのパッケージ・ソフトウエアに依存していては、街並み生成のアルゴリズムの本質を十分に考察できないと思われるからです。他人のコードを読むのは面倒だし自分らで作ろう、これぐらいできないはずがない、と。この研究は、街並み生成に使用できる様々なアルゴリズムを考案し、都市の形成に影響を及ぼしそうな多様な諸条件をアルゴリズムに適用することで、都市の景観をどこまでリアルにシミュレートできるのかを目的とします。この研究は2009年秋に開始しました。当研究室でも最も若い研究です。研究を開始するにあたって、手掛かりなく闇雲に取り組んでもなかなか成果は得られないのがこの世の常ですから、まずは既存のソフトウェアにならうことにしました。既存のソフトウエアは街並みの生成を「区割と地割」、「建築の配置」の二つのフェーズにわけて実行するものが多いので、それらの考え方を当研究でも採用しています。着手して間がない研究ですが、それなりに見られる街並み3Dモデルが生成できているので、現時点での成果を紹介します。この研究は2010年度も引き続き実施しますので、試行錯誤はまだまだ続きます。街並み生成の手順や採用するアルゴリズムに関してバリエーションを増やし組み合わせを工夫するなどして、面白い成果が出せればと思います。試行錯誤の変遷もわかるように工夫して更新を重ねたいと思います。敷地・建物配置に関するアルゴリズム(2010.03.15版)・区割と地割まず、都市の幹線道路に相当する線分を任意に設定します。その線分によって分けられる領域を区画とし、適当な大きさになるまで分割を行います。線分に与えた"道幅"によって区画をセットバックし、道の領域を確保します。次に、建物配置用の地割を行います。区割の過程で面積、形状から区画の性格を判断し、土地の利用に適した建物用敷地になるよう分割を行っています。得られた敷地に建物を配置します。矩形の敷地には、敷地境界のセットバック線を柱状化し、建物を配置しています。変形の敷地には、ちょっと工夫をしています。敷地を構成する境界線から最大長の辺を取得し、その最大辺に直交する仮想のグリッドを敷きます。そのグリッドの各点について、敷地内に収まっているかどうか判断させます。これら点群を元に、全頂点角が直角かつ敷地内に収まる面積最大の多角形を得ます。この図形に高さを与えることで、実在しそうな矩形の組み合わせによる建物形状を生成しています。して得た三次元モデルにテクスチャを与えることで上のような建築が作成されます。建築物をあまり細かくモデリングしてしまうと街全体のポリゴンが増えすぎてしまい、満足に表示できなくなってしまいます。テクスチャはこういう時に便利ですね。上図はほぼ柱状体といったシンプルなモデルにテクスチャを貼ったものですが、わりと建物らしく見えます。テクスチャが違和感なくはられるように、建築の高さにあわせてテクスチャの論理高さを自動的に求めるようなGDLスクリプトを組み込んであります。上のような街並みのイメージを得ることができます。鳥瞰ではやや鰻の寝床のような細長い敷地が目立ちますが、アイレベルのパースでは随分それっぽい街並みになっています。関しては実装されていません。梅雨が来る前にまた更新出来れば、と思ってます。都市の成立に関わる要因、制約を考慮したアルゴリズムの追及これまでの研究では,街道や幹線道路をもとにして、領域分割と建物配置を行なうことで景観を生成してきました。初期条件として与えている街道や幹線道路によって生成される景観が左右されますが、現実の都市においても道路の計画は初期に行なわれる行為の一つであり、これはもっともらしい対応関係といえると思います。所蔵資料紹介より引用さて、上に掲載した日本の古地図をみてわかるように、街道はいくつかの集落を経由しながらある2地点を接続しています。街道と集落の発生順序については「にわとりとたまご」のような関係があるとも考えられますが、本研究では、自然集落が発生した後、それらが道で接続され、交易を繰り返し発達していくといったモデルとして都市の発生と発展を考察していきます。ここでは都市や集落を「ノード」、幹線道路や街道を「ブランチ」と呼ぶことにします。以下のステップを踏み、研究を行なっていきます。集落の発生位置予測アルゴリズム今回は、集落(ノード)の発生位置の予測について紹介します。自然集落の発生の要因についてですが、人文地理学において自然集落は地形の遷移点に発生しやすいといわれています。水が浸食・堆積作用によって地形をつくることや台地下には湧水が見られるという一般的な事象からも、地形の遷移点には水が存在したと推測することができます。定住とともに農耕が始まったことからも農地を確保するために、ある程度の平地も同時に必要であったと考えることが出来ます。これらのことから集落の発生位置は、地形の遷移点を背にした平坦な大地が始まる地点だと推測できます。今回はこのような位置をあぶりだすためのアルゴリズムの作成を行ないました。平地度どの程度平坦であるか、の指標として「平地度」というものを定義しました。これは、標高メッシュにおいて「あるセルについて、その標高と同程度の標高をもつセルがいくつ連続しているかの総量」によって表します。許容高度差また同程度の標高とみなす、その閾値を「許容高度差」としました。この例では、許容高度差を3.0とすると、Aの平地度は6、Bの平地度は3となります。このように平地度の計算を行なった後、各セルの平地度を全体における最大値によって除すことで相対化し、グレースケールに変換することで平地度を可視化します。「白い箇所ほど平坦である」ことになります。検証この平地度計算のアルゴリズムを用いて、実地を例に集落発生位置の予測を行ないました。武蔵野台地において、許容高度差が小さい場合、発生時期の早い集落が多く計算された領域内部におさまり、許容高度差を大きくした場合、その内部に発生時期の遅い新田集落が多く領域内部におさまりました。これには、開墾のしやすい場所から集落が発生していった日本の歴史との関係をうかがうことができます。条里制(645)における巨大矩形農地の確保と、これに対しての江戸の鍬下年季(1645)などの未開発地開墾奨励などが挙げられるでしょう。得られた画像を全体的にながめると予想が大きく外れてしまっているように見えますが、部分部分で観察すると、これまで発生した集落は、その近辺においては平地度の高い箇所に該当していることがわかります。平地度の視覚化の際に全体を最大値で除すのではなく、近傍の最大値で除すなど、もう少し、予想領域の見せ方を改良することで満足した結果が得ることができそうです。今後は今回得られた集落発生予想アルゴリズムに改良を加えるとともに、領域周縁にノードを配置し、それらをブランチで結ぶことで、より具体的な都市平面をつくっていこうと考えています。街道の生成まで至れば、それを3次元モデル化できます。早くみなさまにアルゴリズムによって生成した街並みをお見せできればと思っています。前回更新分の方法では、どこまで見渡せるかという程度を平地度としていました(例えば高低差がなければ地平線がみえるように)。この方法では集落の発生予想領域がいささか広くなりすぎてしまうこと、地形の遷移を見つけ出すための閾値の設定が難しいことが問題になっていました。そのため以下のように平地度の定義及び計算手順を変更しました。ある一つのセルを出発地点とし、隣接するセルについて、その標高差の和をとりながら自身の領域を拡大していく。標高差の総和が、一定の数を超えたら領域の拡大を中止し、領域としたセルの数をカウントする。この閾値を許容高低差とする。全てのセルについて手順2.を行ない、最大値によって除し相対化する。手順2.において他のセルの領域の縁となったセルに対して、その領域中心の平地度を確率として乱数により集落を発生させる。eのように、領域縁となったセル(色塗り)は、その領域の原点(同色の×)の平地度を用いる。複数回領域縁となったセルは、その回数分だけ試行する。以下のように算出できました。赤丸が実際の集落位置です。時代ごとの測量技術の差もあって、一部修正を行ないましたが現状の地図と一致しない部分もあります。集落群のつくる模様を比較して頂けると対応がわかりやすいと思います。前回用いたアルゴリズムと比較して、予測領域が限定的になりました。集落の発生位置予測プログラムによって集落を発生させ、これを用いて街道の生成を行ないました。一定距離内にあるノード(集落)間にリンク(道)を生成する(a)。始点標高、リンク総長、リンクが通過するセルの標高及び通過長を用い、計算する(b,c)。各ノードについて次数を計算し、その多さによって降順に並べる。上位ノードは隣接しやすいため、上位ノードに隣接するノードは上位ノードになれない制約を付していく。上位ノード個数には上限及び下限を設けない。すべてのノードから各上位ノードへの経路探索を行なう。Dijkstra法により、コストが最小となる経路を計算し、使用されたリンクの使用回数をカウントしていく。手順3.で得たリンクの使用回数を、そのうちの最大使用回数で除したものを道の使用優先度とする。この優先度が高いものを街道として発展しやすいとみなす。視覚化のために、使用回数と幅員を比例させて表現する。手順1を行なうと以下のようになります。小道のネットワークが非常に煩雑です。これに対して手順2.~4.を行なうと、このように使用優先度の高い道が浮かび上がります。使用回数が非常に少なかったものは出力していません。この中でも特に、生成した街道のうち太く示された街道として成長する可能性が高いと判断された道の近しいところに、実際の街道が存在することがわかります。ここまで地形データとわずかな数値入力によってここまで、集落の発生位置の予測や、街道の生成を行なうことが出来ています。引き続きこれに改良を加え、次は集落の衰退と発展について考えていこうと思っています。HLAB本ページのすべての商標と著作権はそれぞれの所有者に帰属します。