AIエージェントで3Dの村をつくる:5つのパスで進める

空のシーンから歩ける村まで、5つのパスで。地形、道路、区画、建物、装飾——各パスでAIエージェントに渡す指示文をそのまま載せます。

Cuberta でエージェントが構築した町。通り、横断歩道、れんが造りの集合住宅とコテージ

村を作る最初の試みは、たいてい一つの指示です。「30軒の家がある中世の村を作って」。返ってくるのは、平らな地面に並んだ三十軒の家、どれも似た高さで、最後の一軒で途切れる道路。ジオメトリ自体はどこも間違っていません。ただ、場所になっていないだけです。

直し方は指示を長くすることではなく、一つの指示で扱うことを減らし、実際の集落ができあがった順番で渡すことです。地面、道路、区画、家、装飾、光。五つのパスと、一度のレビュー。パス1のミスは一分の損ですが、同じミスをパス4のあとで見つけると村を一つ失います。

以下はAIエージェントが本物の3Dエディタを動かしている前提です。エージェントはステップの合間にシーンを読み返し、こちらはいつでも止められる。パスに分けられるのはそのおかげです。Cuberta はそういう作りのエディタで、ロケーション単位の道具を Model Context Protocol で公開しています。Copy connect command を押してターミナルに貼れば、エージェントがつながります。以下の指示文は、実際に私が打つとおりのものです。

ツールを開く前に方針を決める

村の出来のほとんどは、エージェントをつなぐ前に決まっています。方針に入れるかどうかの判定は単純で、その答えがジオメトリを変えるかどうかです。「居心地のよい」は変えません。「建物46棟」は変えます。答えは書き出して取っておいてください。言葉として固定してあることが、あとで「無視された一文」を指させる条件になります。

ジオメトリを変える五つの答え

  • 建物は何棟か。大きさの形容詞ではなく数字で。二十五棟なら集落、六十から八十棟なら中心のある村、百五十を超えると小さな町です。400〜500 m² の敷地に戸建てを置くと1ヘクタールあたり20〜25戸なので、五十棟前後なら市街地が3ヘクタールほど、つまり 250 × 250 m に周囲の田畑という規模です。
  • 時代と地域。マテリアルのパレットと屋根勾配を決める答えで、どちらも装飾ではなくジオメトリです。
  • 地形。平地、谷、斜面、海岸——五つのうち最も効きます。斜面は擁壁と段になった敷地と折り返す道をもたらし、氾濫原は何ももたらしません。
  • 用途。目線の高さで歩き回るのか、時速40kmで通り過ぎるのか、RTSのカメラで見下ろすのか。ディテールをどこに置くか、どこに置かないかが決まります。
  • どこで終わるか。田畑、森、水面、あるいは画面外へ抜けていく道。決めておかないと、集落は未完成の地面へ溶けていきます。

パス1 — 地形と道路の背骨

最初は地形と道路です。これ以降のすべてがそれを参照するからです。道路は背骨で、建物はそこにぶら下がり、装飾はそれに沿って並び、プレイヤーが歩く線もそれです。ここでの誤りは後続のすべてのパスに引き継がれます。

空のシーンから。400 × 400 m の地面を浅い谷として作ってください。北端に尾根を通し、中央より18m高く。中ほどは平坦に。低い所を西から東へ小川が流れます。次に幹線道路を一本、幅6m、両側に1.8mの歩道。西から入り、小川の北岸に沿ってゆるく曲がり、東端で外へ抜けます。そこから枝道を二本、幅4m、歩道なし、それぞれ長さ約80mで、末端に転回場所を設けます。幹線が小川を渡る箇所に石橋を一つ。ほかはまだ何も置かないでください。建物も、小物も、樹木も。

この中の二つの数字はきちんと仕事をしています。6mは3mの車線二本ぶんで、二台がすれ違う道路の実寸です。NACTOは市街地の走行車線に3.05mを推奨し、住宅地の生活道路では3.0mが一般的な下限です。歩道の1.8mは二人がすれ違える幅です。そのうえで、路面から一度も外れずに端から端まで歩いてみてください。歩けないならパス1は終わっていません。

パス2 — 区画と、建ててはいけない場所

飛ばされがちなパスであり、寄せ集めを村に変えるパスでもあります。建物は敷地の上に建ち、敷地は一定のセットバックで道路に面する。この関係一つが、通りが通りに見える理由の大半です。

まだ何も建てないでください。道路沿いの土地を区画に分けます。中心部を通る幹線道路の200m区間では、間口15m、奥行30mの区画を両側に、それぞれ歩道から4mセットバック。枝道沿いはもっと大きく、25 × 40 m。次を建築禁止区域として指定してください。小川とその両側8m、標高12mの等高線より上の尾根、転回場所の二か所、そして橋のたもと南岸の 30 × 40 m の矩形。そこは広場なので空けたままにします。中を埋める前に、まず区画の輪郭を見せてください。

建築禁止に関する一文は、この手順全体で最も効きます。エージェントは空間を埋めます。言わなければ、家は小川の岸に、尾根の上に、そして広場にするつもりだった場所の真ん中に建ちます。空けておく区域を機能で呼ぶことも有効で、三つ先のパスで親切に埋められるのを防げます。Cuberta ではそうした領域を言葉で説明する代わりに、ビューポート上で直接マークできます。

パス3 — 建物

区画が引かれ、禁止区域が指定されていれば、このパスは算数です。棟数、階高の約束事、寸法の範囲、そして閉じたパレットを渡します。

では建物を、合計46棟。中心部の区画には、2階建ての住宅を30棟。平面は 7 × 9 m から 9 × 12 m の範囲、階高2.8m、扉は2.0m、切妻屋根で勾配は約40°、すべて道路に正面を向けます。枝道沿いには、やや大きい戸建てを12棟、1階半、最大 12 × 14 m。広場の周囲には3階建てを4棟——宿屋、店、荷車が入る広い扉の作業場、そして塔が16mまで届いてよい小さな礼拝堂。マテリアルは五つだけ。白い漆喰、灰色の石、濃い色の木、赤い粘土瓦、スレート。壁はすべて漆喰か石、屋根はすべて瓦かスレートです。このパレットの中で幅、奥行、棟の向き、色を変えてください。階高、扉の高さ、セットバックは変えないでください。

ばらつきには枠が要ります

制約のないエージェントに特有の失敗は、繰り返しではありません。「変化をつけて」を許可証として読み、扉が3mの家の隣に扉が1.6mの家を建ててしまうことです。実際の在来建築は狭い帯の中でしか変わりません。誰もが同じ長さの材、同じ煉瓦、その土地の雨を流すための同じ屋根勾配で建てていたからです。どの寸法が動いてよく、どれが凍結かを名指しすることが、見本帳ではなく通りを買う代金になります。

このパスでやらないこと

内装です。46棟ぶんの家具を入れるのは別次元の作業量で、そのほとんどは誰も入らない建物に費やされます。今は外殻だけを作り、実際に入る二、三軒はあとから仕上げてください。それは独立した手順です。

パス4 — 装飾と、住んでいる場所に見せる80対20

「誰かが住んでいる」という感覚のほとんどは三つから来ます。各区画の境界を示すもの、日が暮れてからも使われている印、そしてノイズ関数ではなく人間の理屈に従った植栽。それ以外の多くは雑多な小物です。

装飾のパスです。道路に面するすべての区画境界に、柵か低い石垣を高さ1.2mで。背後の家の壁材に合わせてください。街灯は幹線道路のみ、ポールは5m、30mおきに片側ずつ交互。樹木は、広場の南側に6本の並木、中心区画の奥半分に果樹、禁止等高線より上の尾根に密な混交林、小川沿いに葦。区画のおよそ三分の一に、薪の山、雨水桶、荷車、ベンチ、物干し綱のいずれか一つを追加。路面には何も置かないこと。広場には樹と2脚のベンチ以外は何も置かないこと。

住宅地の5〜6mのポールは通常、取付高さの3〜5倍の間隔、つまり18〜30mで配置されます。5mのポールで30mは、幹線しか照らさなかった村にはちょうど合います。指示の中の上限にも注目してください。「およそ三分の一」です。これがないとすべての区画に薪の山が置かれ、規則的な雑多さは空白より悪く見えます。

パス5 — 光と時刻

時刻を初秋の日没一時間前あたりに設定してください。太陽は西北西から低く、地平から約12°、暖かい色で。晴天に高い雲を少し。街灯は弱めに点灯し、日光と競わずに存在がわかる程度に。尾根が東側の区画に影を落としているか確認してください。

太陽の角度は照明の判断というより構図の判断です。低い太陽はファサードを斜めに撫で、隣り合う屋根勾配を分離し、パス1で作った地形を再び読めるようにします。真昼の太陽はそれを平らに潰します。エンジンではライティングを組み直しますが、それでも今設定してください。レビューでの判断はすべてこの光の下で行うことになります。

うまくいかないとき、何と言うか

失敗はほぼ三種類です。建てすぎる。46棟と頼んだのに71棟あり、隙間が全部埋まっている。不服従というより既定の挙動で、範囲が曖昧だとエージェントは広がります。同じものを繰り返す。同じ家が反転して十一回、通りの片側に並ぶ。スケールがずれる。たいていパスの境目で起き、礼拝堂は正しいのに家だけがひっそり縮んでいます。

見えている症状言うべきこと
頼んだより建物が多いパス2で定義した区画の外にあるものをすべて削除してください。46は目標値ではなく上限です。
同じ家が十一回パレットはそのままで、幹線道路の北側の平面寸法を振り直してください。隣り合う二軒が幅と棟の向きの両方を共有してはいけません。
パス3のあと全体が大きくなった1.8mの基準ボックスで各棟の扉を一つずつ測り、1.9〜2.1mから外れるものは作り直します。
浮いている、または半分埋まっているすべてを地形の表面に座り直させてください。真下の地面に対して上下2cmを超えてはいけません。
道路が最後の家で途切れる幹線道路の両端を地面の縁まで延長してください。

二つの習慣でこの大半は防げます。パスが崩れたら、継ぎ当てるのではなくパスごと取り消すこと。失敗したパス3に十五個の修正を入れるより、指示に二文足してやり直すほうが速いですし、継ぎ当てはシーンに孤児オブジェクトを残します。もう一つは、凍結した制約——パレット、階高、建築禁止区域——を毎回パスの冒頭で言い直すことです。

レビューのパス、そして書き出し

ここでの数分が、インポートの向こう側では直すのが高くつくものを捕まえます。

  1. 1.8mのボックスの隣に立つ。村の入口に一つ置いて、大通りを見通します。標準的な扉は2.03mなので、ボックスより手のひら一つぶんほど高く見えるはずです。
  2. 扉と階高を抜き取り検査する。村じゅうに散らして8棟、それぞれ扉を一つ測ります。1.9〜2.1mを外れていれば誤り、階高が2.6〜3.0mを外れていても誤りです。
  3. すべての道を歩く。幹線は端から端まで、枝道はそれぞれ交差点まで戻り、歩道は交差点と橋を通して連続していること。
  4. 浮いているものを探す。太陽を背にして低く周回します。浮いたオブジェクトは座標より、接地影が無いことで見つけるほうが早いです。
  5. マテリアルを数える。パス3で五つと言ったのにシーンが三十四を報告するなら、インポート後ではなく今まとめてください。
  6. 端まで歩く。プレイヤーが到達できる場所は、もっともらしく続いているか、塞がれているかのどちらかであること。

そして書き出しです。テクスチャ込みのGLBかFBXがあれば、Unity、Unreal、Blender、Godot はどれも読めます。単位の約束事を一つ。glTFはメートル、FBXは既定でセンチメートル、Unityは1単位を1メートル、Unrealは1単位を1センチメートルとして扱います。スケール1で読み込んだFBXが百倍ずれて着地することがあるのはこのためです。パス1から実寸のメートルで組んでおけば、これはチェック項目に格下げされます。

書き出す前に、道路、建物、小物、植生といった機能で名前を付けておいてください。受け取った人が何かを選択できるようになります。その先は別の仕事です。マテリアルの統合、インスタンス化、LOD、そしてエンジンでの着地を決めるインポート設定

五つのパス全体で、実際に打ち込む文章はおよそ十文です。残りの時間は見ることに使われますが、それがもともとこの仕事でした。パスは特定のツールの機能ではなく、村を丸ごと一つの思考で抱えなくて済むようにするための方法です。