AI都市ジェネレーター:道路網が先、街区が次、建物は最後

生成された街は俯瞰では成立し、路上では破綻します。道路の階層、街区の寸法、間口、交差点——都市として読ませる数値をまとめました。

Cuberta でエージェントが構築した都心。高層ビルを囲むガラスの塔と広い大通り

都市ジェネレーターは高度200mから評価されます。そこはあらゆる都市ジェネレーターが有能に見える、唯一の高度です。カメラを1.7mまで下ろして街角に立たせてみてください。歩道は角を曲がって続いているか。出会う二本の道路は縁石の高さについて合意しているか。角の建物は自分が角にいることを知っているか。街が街として読めるかはこの視点で決まり、それは誰かが建物をモデリングするずっと前に決着しています。

都市はまず道路網である

この順序は好みではなく依存関係です。道路網が地面を街区に切り分け、街区が敷地に分割され、敷地の間口・奥行き・セットバックがそこに建てられる建物を決めます。道路網を変えれば下流はすべて変わる。建物を変えても上流は何も気にしません。

順序を逆にするジェネレーター——建物を積み上げてから隙間に道路を通す——が生むのは「スクリーンショットの街」です。上から見ればボリュームはもっともらしいのに、路上に降りると何も何かに向いていない。配置された瞬間に、向くべき相手が存在しなかったからです。SIGGRAPH 2001で発表されたParishとMüllerの論文、以降のプロシージャル都市ツールのほとんどの祖先は、まず街路網を生成し、街路に土地を区画へ分けさせ、そのあとで初めて区画の上に建物を置きました。

道路は三種類、一種類ではない

本物の道路網には階層があり、名前を知らなくても目線の高さで読み取れます。幹線道路は通過交通を担い、個々の敷地にはほとんど接しない。補助幹線は地区から交通を集めて幹線に流す。生活道路は玄関にたどり着くために存在する。米国の道路網では、幹線と補助幹線が合わせて走行台キロのおよそ70〜80%を担う一方、延長の大部分を占めるのは生活道路です。広くて交通量が多く連続した街路が少しと、狭く短く静かな街路が大量に。

道路を一種類しか出力しないジェネレーターが作るのはチェス盤です。すべての通りが同じ幅、すべての交差点が同じ重み、左に曲がる理由も右に曲がる理由もない。三種類に別々の車道幅、歩道、街灯の間隔、沿道の建物を与えれば、プレイヤーはミニマップではなく体感で方向を取り始めます。

測れる幅員

実務に耐える数字を、メートルで。NACTOのUrban Street Design Guideから。

  • 車線:市街地では3.0m、バスやトラックのルートで3.3m。3.6mになると通りは高速道路として読まれ始めます。
  • 両側駐車のある対面通行の生活道路:縁石間7.3〜8.5m。典型的な住区の道路は、15mの道路用地の中に9mの車道。
  • 歩道の通行帯:住宅地で1.5〜2.1m、都心で2.4〜3.7m。しかもこれは歩く部分だけです。本物の歩道には縁石側に街灯や街路樹の設備帯、建物側に扉や階段の前面帯が加わります。一枚の平らな帯としてモデル化すれば両方が消え、街路は掃き清められたように見えます。
  • 縁石の立ち上がり:0.10〜0.15m。最初に失われるもので、段差ゼロの縁石は通り全体を描かれた平面に変えてしまいます。

この順序を守るツールは限られます。ノードベースのプロシージャルシステム——Houdiniのグラフ、あの2001年の論文の系譜にあるルールベースの都市ツール——は街路グラフから始めますが、代償はルールを自分で書くことです。一発生成のモデルには道路網そのものがなく、出力の中の道路はトポロジーではなくテクスチャです。ライブラリと配置を組み合わせるツールはたいていグリッド、つまり階層が一種類しかない道路網から始めます。本物のエディタを動かすエージェントが四つ目で、道路網から始めるのは平凡な理由からです。幹線を一本引くのは一操作、建物を四百棟置くのは四百操作。Cuberta はこのやり方です。エディタはロケーション単位の操作を Model Context Protocol で公開しているので、エージェントは幹線、補助幹線、生活道路の順に引き、街区を分割し、各ステップの間にシーンを読み返します。それが手書きのルールグラフに勝るかは自分でどれだけ書きたいか次第で、その比較はそれ自体で一つの議論になります

街区が二番目、敷地が三番目

街区とは道路網が囲い込んだもののことです。その内側で何が起こるかは別の判断であり、多くのジェネレーターがまるごと飛ばしている判断でもあります。間口6mでセットバックゼロなら連棟住宅、間口18mでセットバック7mなら郊外。同じ建物ライブラリから両方が出てきます。

事例街区読まれ方
ポートランド(オレゴン州)61 × 61 m交差点だらけで非常に歩きやすい。道路面積のコストは高い
バルセロナ・アシャンプラ113 × 113 m、20mの隅切り高密度で規則的。角のすべてが小さな広場になる
マンハッタン80 × 274 m短いストリートと長いアベニュー。方向そのものが意味を持つ
戦後の郊外住宅地150〜250m、曲線道路、行き止まり交差点が少なく、徒歩では位置がつかみにくい

持ち帰るべきは真似する数字ではなく比率です。ポートランドは61mごとに交差点を置くので、歩行速度1.4m/sなら45秒に一つ出会います。マンハッタンは一方向に80mごと、もう一方向に274mごと。だからこそ二つの軸がまるで別の街のように感じられます。ゲームでの実用域は一辺60〜120mです。60mを下回ると地面の大半が路面になり、120mを超えるとプレイヤーは判断と判断の間を歩きすぎます。しかもその間に見えるのは、生成された都市が最も「生成された」ように見える、長く単調な街区の立面です。

セットバック、間口、階高

商店街と住宅街を分けているのはセットバックという一つの数字です。連続した商業の前面はゼロ、連棟住宅は前庭2〜4m、郊外の独立住宅は6〜8mと車寄せ。使える間口は、連棟住宅で5〜7m(定番のブルックリンのブラウンストーンは6 × 30mの敷地に建ちます)、都市型集合住宅で15〜25m、独立住宅で敷地12〜20m。角地はほぼ必ず隣より広い。角は価値が高く店が入り、アシャンプラでは20mの隅切りとして差そのものが計画に書き込まれました。

垂直方向では、屋根のラインを正直に保つ約束が一つあります。住宅の階高は床から床まで3.0〜3.3m、オフィスは3.6〜4.2m、店舗の1階は4.5m以上。四階建ての住宅は軒まで約12〜13mです。生成された建物がここで合意していないと、隣り合うファサードが床レベルについて食い違い、通りはコラージュとして読まれます。

交差点はジェネレーターが破綻する場所

交差点は両方の道路のジオメトリを一つの面に解決しなければならない唯一の場所で、しかもどちらの道路の定義にもその方法は書かれていません。

  • 面の重なり。二つの道路メッシュが交差すると同一平面のポリゴンができ、交差点の真ん中がちらつきます。最初のフレームから見えます。
  • 互いを貫通する歩道。縁石のラインは角を曲がらなければなりません。自分の中心線に沿って押し出された帯が二本あれば、交差するだけです。
  • 角に何もない。標準的な縁石半径は3〜4.5m、市街地の住宅地では1.5〜3m、1mを切る都市もあります。どこでも同じ半径を使えば、連棟住宅にサーキットのコーナーを、幹線にナイフの刃を作ることになります。
  • 幅員の不整合。12mの幹線が7mの生活道路と出会うには擦り合わせが要ります。なければ生活道路の縁石ラインは2.5m届かないまま宙で途切れます。
  • 角度の合わない路面標示。70度で交わる交差点に90度で押された横断歩道。交差点全体がデカール作業に見えてしまいます。
  • 角の建物が角の建物でない。本物の街では角地は店であり、バーであり、より大きな建物であり、隅切りです。街区中間の建物を90度回しただけなら、交差点にランドマークはなく、地区にナビゲーションもありません。

テストはカメラ操作ひとつです。視点を1.7mに置き、交差点の真ん中に立ち、360度回してみる。耐えれば残りも耐えます。耐えなければスカイラインでは救えません。プレイヤーはレベルの全時間をその高さで過ごすからです。

繰り返しが正体を明かす

生成された都市は、ジオメトリで露見するよりずっと早く繰り返しで露見します。100mの街区の立面を見通すと、プレイヤーは一度に10〜15の建物正面を見ています。その視界に同一のものが二つあれば、そこで幻は終わりです。提供される多様性の多くは偽装です。

  • ファサードキット。6〜10枚の壁パネルを組み替える。業界標準であり実際に機能します——同じ窓の方立が五軒続けて現れるまでは。
  • カラージッター。アルベドの色相をずらす。空撮では説得力がありますが、10mでは無意味です。下のジオメトリが動いていないからです。
  • 回転とミラー。反転した家は同じ家です。目が読むのはシルエットと比率であって、左右の向きではありません。
  • ランダムスケール。四つの中で最悪です。正しかったものを壊すからで、扉は2.0〜2.1mでなくなり、床のラインは隣と合わなくなります。

勝ち取られた多様性は計画そのものから出てきます。分割が違ったから敷地の間口が本当に違う。同じ通りに年代の違う建物が並び、階高が違い、取り壊された跡地に細い挟み込みの建物が一つ入る。地面が段差になるので屋根も段差になり、1:40の勾配だけで軒は階段状になる。そして種類のまるで違う建物がいくつか——変電施設、教会、立体駐車場。300棟の地区にこれを5つ置くほうが、ファサードのバリエーションを20種類増やすより信憑性に効きます。

二つを分ける規則はこうです。説明できる多様性だけが読まれる多様性である。この建物が隣とどう違うのかを自分で言えないなら、プレイヤーにも言えず、その違いはノイズとして登録されます。ルールベースのジェネレーターはルールセットが露出しているものしか変えられません。よく書かれたセットは多くを露出し、急ごしらえのセットは色だけを露出します。エディタの中のエージェントには「北西の街区に小さな教会を置いて、連棟住宅を川に向かって段々に下げてほしい」と言える。その一文が、もう一つのパラメータではなく五つの具体的なオブジェクトになります。

地区に実際いくつの建物が要るのか

建物の数は選ぶものではありません。選ぶのは街区の寸法と間口の幅で、数はその算数から出てきます。80 × 110mの街区の周長は380m。これを間口で割れば通りに面する建物の数が出ます。間口6mの連棟住宅で63棟、12mのタウンハウスで31棟、22mの集合住宅で17棟、中庭を囲む周辺型なら1棟。

歩ける地区はおよそ400 × 400m、1.4m/sなら横断に5分かかりません。街路のピッチが100mなら16街区で、17棟ずつなら270棟、31棟ずつなら500棟、63棟ずつなら1000棟でもう別のプロジェクトです。通りに面する建物200〜400棟が実用域です。どの通りのどの視界も埋まるだけあり、なおかつ自分で全部を見て回れるだけの少なさです。

ユニークなメッシュの数はこれとは別で、ずっと少なくて済みます。街路の視界に12の正面が入るなら、繰り返しが見えなくなるまでにおよそ15〜20種類の建物ボディが要ります。加えて配置の規則が二つ。同一の建物を隣り合わせない、同じ視界に二つ入れない。ボディ20種に屋根3種とファサードキットがあれば300配置を支えられます。ボディ4種にカラージッターでは、何棟置いても何も支えられません。

都市をエージェントにどう説明するか

何が都市を生成するにせよ、説明はムードボードではなく都市計画の要求書のように読めるべきです。順序は内容と同じくらい重要で、道路網、街区、敷地、建物、ストリートファニチャー、光の順に書くと各文が次の文を拘束します。それはジオメトリがどのみち従わなければならない依存関係そのものです。

都心の縁にある地区、400 × 400m、平坦。幹線が一本、中央を南北に走る。片側2車線、各3.3m、幅2mの植栽中央分離帯、両側に3.5mの歩道。補助幹線が2本、東西にこれと交差、間隔130m、縁石間8m。残りは生活道路で埋め、間隔はおよそ90m、縁石間7m、片側駐車。街区は80 × 110m。幹線沿いは5〜7階の連続したれんがと石の建物、セットバックゼロ、1階は4.5mで店舗のショーウィンドウ、上階は3.1m、間口は14〜26m。生活道路沿いは3階建てのれんがの連棟住宅、間口6m、低い柵の内側に3mの前庭。角地はより広い建物とし、1階を隅切りにする。縁石半径は幹線との交差点で4m、それ以外は2m。街灯は幹線で30mおき。1街区は公園、1街区は平面駐車場、北西の街区に小さな教会を置く。午前遅い時間の陽射し、南東から。

どの一文もビューポートで確認できます。重要なのはその性質です。結果が違って出てきたとき、「補助幹線が130mではなく90m間隔になっている」と、無視された一文を指させます。説明全体を書き直してもう一度サイコロを振る必要はありません。形容詞より構造という原則はテキストから生成するどんなシーンにも当てはまりますが、都市は曖昧さをより厳しく罰します。互いに整合しなければならない部品の数が多いからです。

書かないことも同じくらい重要です。制約はすべて、あとで自分が検証する制約になります。数字が40個あれば、確認のほうが地区を建てるより時間がかかります。エージェントがウェブフォームではなくエディタを動かしているなら、要求書は分割して渡せます。建ててよい範囲を指定し、道路網を敷かせ、交差点を一つ歩いてみて、それから街区を埋めさせる。Cuberta ではどの手順も取り消せるので、最初の交差点で車道幅の誤りに気づけばコストは作り直しではなく1分です。

インテリアは必要か

都市地区については、たいてい不要です。コストの低い順に三段階。

  • 不透明なガラス。窓面に暗くわずかに反射するマテリアル、その奥には何もない。かすめる角度からはガラス張りのオフィスビルとして読まれ、5mの正面からは中実のブロックとして読まれます。
  • インテリアマッピング。Joost van Dongenが2008年に発表したシェーダー技術です。ピクセルシェーダーが窓の奥にある仮想の床面と壁面にレイを飛ばし、交点で部屋のテクスチャをサンプリングします。室内のジオメトリを一切持たず、追加で保存するものもなしに、窓に本物の視差が出ます。多くのオープンワールド都市の窓はこれで成立しており、かけた時間あたりの効果では生成された地区にできる最も価値の高い作業です。
  • 実際にモデリングされた室内。壁、床、家具、照明、そして正しい高さで歩道に開く扉。

効いてくるのは建物が何棟あるかではなく、プレイヤーが何棟に入れるかです。多くの都市レベルでは数百棟のうち3〜10棟。その数棟を家具まできちんと作り、残りの300棟にはシェーダーを渡してください。全部にインテリアを生成すれば、誰も入らない部屋のためにオブジェクト数がおよそ20倍になり、しかも本当に重要な10棟の質が下がります。その10棟にはソファをどこに置くかを決める人間が必要だからです。Cuberta は地区だけでなく家具の入ったインテリアも作ります。その手間は、スカイラインではなく「入れる建物リスト」に使う価値があります。

そのリストは地区を生成する前に決めてください。入れる建物にはファサードにはない要件があります。歩道に合わせた扉、縁石の高さプラス一段に乗った1階、6 × 30mの純粋な廊下ではない平面形、そしてプレイヤーが入る理由。壁紙として生成された建物にこれを後付けするのは、最初から正しく建てるより高くつきます。

最初の1時間をどこに使うか

建物を1棟も生成する前に、道路網を作って交差点に立ってください。道路が街区を切り、街区が敷地を作り、敷地が建物を位置づけ、各段階が次を拘束します。それを守るジェネレーターは、空から見ると退屈で、歩くと説得力のある都市を作ります。プレイヤーが空撮を見ることは決してないのですから、これが正しい向きです。順序を逆にするジェネレーターは逆のものを作り、逆は下流では直せません。一度も面していない通りに建物を戻すような操作は、存在しないからです。