了解。
ここからは 住環境 OS の IR(Intermediate Representation)を、レイヤーごとに JSON 仕様として明確に定義していくね。
これは Flask(Python)で Gemini と連携し、Roblox(HttpService)に渡すための 正式なデータ仕様になる。

あなたの OS 思想(意味 → 構造 → 幾何 → 表示)に完全準拠した形で整理する。


🧩 IR 全体構造(4 レイヤー)

Meaning Layer(意味)
Structure Layer(構造)
Geometry Layer(幾何)
Render Layer(表示)

Physics は任意なので今回は外す。


🟦 ① Meaning Layer(意味レイヤー)JSON 仕様

Gemini が生成するデータ。
“人間の意図”を表す。

{
  "floors": 2,
  "orientation": "south",
  "rooms": [
    {
      "name": "living_room",
      "purpose": "living",
      "size_hint": [6, 4],
      "sunlight": "south",
      "must_have_window": true
    },
    {
      "name": "kitchen",
      "purpose": "cooking",
      "size_hint": [3, 3],
      "sunlight": "east"
    }
  ],
  "constraints": {
    "stairs_required": true,
    "entrance_direction": "south",
    "max_width": 12,
    "max_depth": 10
  }
}

ポイント

  • “部屋の意味”が中心
  • サイズはあくまでヒント
  • 日当たり・窓の向きなどの意図を含む
  • 外観はまだ決めない(内部優先)

🟧 ② Structure Layer(構造レイヤー)JSON 仕様

Flask が Meaning を受けて構造化する。
“部屋グラフ”と“壁・窓・階段”が中心。

{
  "floors": 2,
  "rooms": [
    {
      "id": "r1",
      "name": "living_room",
      "bounds": [0, 0, 6, 4],
      "floor": 1,
      "connections": ["r2"],
      "windows": [
        {"direction": "south", "width": 2}
      ]
    },
    {
      "id": "r2",
      "name": "kitchen",
      "bounds": [6, 0, 3, 3],
      "floor": 1,
      "connections": ["r1"]
    }
  ],
  "stairs": {
    "position": [3, 4],
    "size": [2, 1],
    "connects_floors": [1, 2]
  },
  "walls": [
    {"from": [0,0], "to": [9,0]},
    {"from": [9,0], "to": [9,4]},
    {"from": [9,4], "to": [0,4]},
    {"from": [0,4], "to": [0,0]}
  ]
}

ポイント

  • 部屋は ノード
  • 接続は エッジ
  • 壁・窓・階段はここで確定
  • 外観はまだ生成しない(内部構造が先)

🟩 ③ Geometry Layer(幾何レイヤー)JSON 仕様

Roblox に渡すための“座標化された形”。
Roblox の Part/Model に変換できる状態。

{
  "parts": [
    {
      "type": "wall",
      "position": [4.5, 2, 0],
      "size": [9, 4, 0.2],
      "rotation": [0, 0, 0]
    },
    {
      "type": "floor",
      "position": [4.5, 0, 2],
      "size": [9, 0.2, 4]
    },
    {
      "type": "window",
      "position": [3, 2, -0.1],
      "size": [2, 1, 0.1]
    }
  ],
  "metadata": {
    "scale": 1.0
  }
}

ポイント

  • すべてが 座標・サイズ・回転 に変換されている
  • Roblox の Part にそのまま変換可能
  • Structure Layer の“意味”はここで消える(純粋な幾何)

🟪 ④ Render Layer(表示レイヤー)JSON 仕様

Roblox 側での最終描画情報。
Material・Color・Mesh などを含む。

{
  "render": [
    {
      "id": "wall_01",
      "material": "Concrete",
      "color": [200, 200, 200],
      "part_type": "wall"
    },
    {
      "id": "window_01",
      "material": "Glass",
      "color": [180, 220, 255],
      "transparency": 0.4,
      "part_type": "window"
    }
  ]
}

ポイント

  • 見た目の情報だけ
  • 幾何とは分離(OS 的に正しい)
  • Roblox の Material/Color に対応

🎯 まとめ:IR レイヤーの JSON 仕様(最終形)

レイヤー 役割 JSON の内容
Meaning 人間の意図 部屋の用途・日当たり・階数
Structure 意味を構造化 部屋グラフ・壁・窓・階段
Geometry 座標化 Part の位置・サイズ・回転
Render 見た目 Material・Color・Mesh

この 4 層構造は Roblox × Flask × Gemini の三者が最も自然に連携できる形。


次はどれを作る?

  • Structure Layer の部屋グラフ仕様をもっと詳細化
  • Geometry Layer の座標生成アルゴリズム
  • Flask 側の API 設計(/generateStructure など)
  • Roblox 側の HttpService 受信コード
  • Gemini に渡すプロンプトテンプレート

どこからでも進められるよ。