どどんぐりラボ
制作ノート

生成AIを使わずにダンジョンのバトルマップを自動生成する話

2026年8月 / TRPG・procedural generation

手続き生成されたダンジョン・洞窟のバトルマップ4種

TRPGセッション用のバトルマップって、毎回用意するのが地味に大変です。買ってきた1枚を使い回すと既視感が出るし、かといって毎回描くのは現実的じゃない。

それなら「部屋の配置から石材のテクスチャまで、プログラムに計算させて無限に作ればいいのでは」と思って、実際に手続き生成のアルゴリズムを書いてみました。拡散モデルなどの生成AIは一切使っていません。numpyとPILだけで、ピクセル単位まですべて計算で描いています。

1. 部屋を置いて、通路でつなぐ

やっていることはシンプルです。

  1. グリッド上にランダムなサイズの矩形(部屋)を、他の部屋と重ならない位置に順番に置いていく
  2. 直前に置いた部屋の中心と、新しい部屋の中心をL字の通路でつなぐ
  3. 床マスに8近傍で隣接する非床マスを「壁」として扱う

これだけで、毎回まったく違うレイアウトのダンジョンが手に入ります。コードにするとこんな感じです(実際のロジックを簡略化したもの)。

for i in range(1, len(rooms)):
    a, b = rooms[i - 1], rooms[i]
    # 部屋Aの中心からY方向、部屋Bの中心からX方向にL字で通路を掘る
    grid[a.cy, min(a.cx,b.cx):max(a.cx,b.cx)+1] = True
    grid[min(a.cy,b.cy):max(a.cy,b.cy)+1, b.cx] = True

2. 石材のムラは「荒いノイズを拡大」で作る

単色のグレーだと平坦でゲームっぽくないので、質感を足します。ポイントは、いきなり高解像度のノイズを乗せないこと。粗いノイズ(数十ピクセル単位)を作ってから画像全体に引き伸ばすと、自然な"石のムラ"になります。逆に細かいノイズをそのまま使うと、ザラザラしすぎて安っぽく見えます。

石造りダンジョンのバトルマップ例(グリッド有り)

グリッド有り版。1マス70px=Roll20/Foundry VTTの標準グリッドに合わせています。

3. 装飾は「意味のある場所」にだけ置く

ひび割れ・瓦礫・苔・松明の灯りは、床や壁のマス座標をそのまま使って配置しています。壁際にだけ苔を生やす、部屋の中心付近にだけ松明の暖色グローを乗せる、というように「その場所らしい」ルールに沿って散らすと、ランダムでも破綻して見えません。

洞窟テーマのバトルマップ例(グリッド無し)

洞窟テーマ(グリッド無し版)。テーマごとにパレットとモチーフだけ差し替えています。

手続き生成の強み

手描きや画像生成AIだと「1枚ずつ品質が変わる」「同じような構図になりがち」という問題が起きます。計算式で描く方式だと、パラメータ(部屋数・テーマ・シード値)を変えるだけで、同じ品質のまま何百パターンでも作れます。これは正直、この方式でしか出せない強みだと思っています。

ブラウザでエフェクトを触ってみる

同じ考え方で作った、配信・TRPG用の透過エフェクト生成ツール。色を選んでその場で生成できます(無料)。

エフェクトフォージを試す →

どんぐりラボの配信・TRPG素材

この記事と同じ手続き生成で作った、配信・TRPG向けの素材をBOOTHで配布しています。

BOOTHショップを見る →

同じ舞台で遊べるクトゥルフ神話TRPGのオリジナルシナリオも作りました。納骨堂を舞台にしたホラー一本ものです。